精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

探秘JDK 7之二:半透明和任意形狀的窗口

開發(fā) 后端
探秘JDK 7:半透明和任意形狀的窗口。本文延續(xù)51CTO昨天的報道,繼續(xù)探秘JDK 7的新特性。在WIN7的炫耀的透明窗口風(fēng)靡世界的同時,JDK 7開發(fā)者同樣也需要這種絢麗開發(fā)觀感!

51CTO昨天為大家?guī)砹恕?a >探秘JDK 7:將會出現(xiàn)新的語言特性”,今天我們從Java SE 6u10(Build 12)開始和大家探討一下Java引入的com.sun.awt.AWTUtilities類提供半透明和任意形狀窗口的支持,這是個臨時類,因為6u10不是一個Java SE主版本,沒有提供抽象窗口工具集API(Abstract Window Toolkit API,AWT API),也沒有修改現(xiàn)有API。在JDK 7中,AWTUtilities類將不復(fù)存在,AWT類也做了許多改變,以更好地支持半透明和任意形狀的窗口,本文將為大家介紹一下JDK 7中提供的3種半透明窗口,另外也會涉及到任意形狀窗口的介紹。

簡單的半透明窗口

簡單的半透明窗口就是透明度均勻分布的窗口,所有像素的不透明度值都一樣,這個值越小,窗口越透明,達到最小值時,窗口就是完全透明的了,相反,如果值越大則越不透明。

JDK 7給java.awt.Window類增加了public void setOpacity(float opacity)和public float getOpacity()兩個方法來實現(xiàn)簡單的半透明窗口效果,前一個方法需要一個不透明度參數(shù),其取值范圍是0.0(完全透明)-1.0(完全不透明)。

在窗口上調(diào)用setOpacity()方法激活其簡單半透明效果,注意指定的參數(shù)值不能小于0.0,也不能大于1.0,否則setOpacity()會拋出一個IllegalArgumentException異常。

如果窗口處于全屏模式且不透明度值小于1.0,setOpacity()方法會拋出一個java.awt.IllegalComponentStateException異常,如果不支持簡單透明度且不透明度值小于1.0,它會拋出UnsupportedOperationException異常。

java.awt.GraphicsDevice類提供了一個public Window getFullScreenWindow()方法確定窗口是否處于全屏模式,這個類也提供了一個public boolean isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency translucencyKind)方法確定當(dāng)前的顯示設(shè)備是否支持簡單透明效果,如果顯示設(shè)備支持這個方法參數(shù)指定的半透明效果,isWindowTranslucencySupported()就返回True,對于簡單半透明效果,這個方法的參數(shù)必須是GraphicsDevice.WindowTranslucency.TRANSLUCENT,如下所示:

  1. GraphicsEnvironment ge;  
  2. ge = GraphicsEnvironment.getLocalGraphicsEnvironment ();  
  3. if (!ge.getDefaultScreenDevice ().  
  4.         isWindowTranslucencySupported (GraphicsDevice.WindowTranslucency.TRANSLUCENT))  
  5. {  
  6.     System.err.println ("simple translucency isn't supported");  
  7.     return;  

我創(chuàng)建了一個STDemo程序演示簡單半透明效果,使用滑塊調(diào)節(jié)框架窗口的透明度,清單1顯示了這個程序的源代碼。

清單1. STDemo.java

  1. // STDemo.java  
  2. import java.awt.EventQueue;  
  3. import java.awt.FlowLayout;  
  4. import java.awt.GraphicsDevice;  
  5. import java.awt.GraphicsEnvironment;  
  6. import javax.swing.JFrame;  
  7. import javax.swing.JLabel;  
  8. import javax.swing.JPanel;  
  9. import javax.swing.JSlider;  
  10. import javax.swing.event.ChangeEvent;  
  11. import javax.swing.event.ChangeListener;  
  12. public class STDemo extends JFrame  
  13. {  
  14.    public STDemo ()  
  15.    {  
  16.       super ("Simple Translucency Demo");  
  17.       setDefaultCloseOperation (EXIT_ON_CLOSE);  
  18.       final JSlider slider = new JSlider (0, 100, 100);  
  19.       ChangeListener cl;  
  20.       cl = new ChangeListener ()  
  21.            {  
  22.                public void stateChanged (ChangeEvent ce)  
  23.                {      
  24.                   JSlider source = (JSlider) ce.getSource ();  
  25.                   STDemo.this.setOpacity (source.getValue ()/100.0f);  
  26.                }  
  27.            };  
  28.       slider.addChangeListener (cl);  
  29.       getContentPane ().setLayout (new FlowLayout ());  
  30.       getContentPane ().add (new JLabel ("TRANSP"));  
  31.       getContentPane ().add (new JPanel () {{ add (slider); }});  
  32.       getContentPane ().add (new JLabel ("OPAQUE"));  
  33.       getRootPane ().setDoubleBuffered (false);  
  34.       pack ();  
  35.       setVisible (true);  
  36.    }  
  37.    public static void main (String [] args)  
  38.    {  
  39.       Runnable r;  
  40.       r = new Runnable ()  
  41.           {  
  42.               public void run ()  
  43.               {  
  44.                  GraphicsEnvironment ge;  
  45.                  ge = GraphicsEnvironment.getLocalGraphicsEnvironment ();  
  46.                  if (!ge.getDefaultScreenDevice ().  
  47.                          isWindowTranslucencySupported  
  48.                            (GraphicsDevice.WindowTranslucency.  
  49.                                            TRANSLUCENT))  
  50.                  {  
  51.                      System.err.println ("simple translucency isn't "+  
  52.                                          "supported");  
  53.                      return;  
  54.                  }  
  55.                  new STDemo ();  
  56.               }  
  57.           };  
  58.       EventQueue.invokeLater (r);  
  59.    }  
  60. }  
  61.  

上面的代碼創(chuàng)建了一個滑塊,為該組件注冊了一個變化監(jiān)聽器,當(dāng)滑塊組件移動時,這個組件觸發(fā)變化事件,監(jiān)聽器調(diào)用setOpacity(),參數(shù)就使用滑塊的當(dāng)前值。

上面的代碼使用new JPanel () {{ add (slider); }}創(chuàng)建了一個Swing面板,并在面板上添加了一個滑塊組件,從本質(zhì)上講,這個快捷方式是先實例化JPanel的一個子類,然后用這個子類的實例初始化滑塊組件。

Swing組件的雙倍緩存可以制造出意想不到的視覺效果,當(dāng)你拖動滑塊使窗口完全透明時,你將只能看到滑塊本身,但清單1中的代碼通過getRootPane ().setDoubleBuffered (false);禁用了雙倍緩存。

編譯并運行STDemo,移動滑塊就能看到簡單半透明窗口效果了,如圖1所示。

窗口及其內(nèi)容全部處于均勻透明的狀態(tài)
圖 1 窗口及其內(nèi)容全部處于均勻透明的狀態(tài)

#p#

像素級半透明窗口

像素級半透明允許你控制窗口中每個像素的不透明度,這樣就可以營造出窗口的一部分比另一部分更透明的效果,雖然像素級半透明也可以實現(xiàn)窗口透明度均勻,但與簡單半透明方法比起來,它更占資源。

JDK 7通過修改Window的public void setBackground(Color bgColor)方法,檢查參數(shù)的alpha部分提供像素級半透明效果的支持,如果alpha不等于1.0(窗口不透明),在窗口上繪制每個像素時將會使用alpha值。

真實的半透明級別

繪制像素時使用的真實半透明值也依賴于傳遞給Window的setOpacity()方法的值,以及Window的當(dāng)前形狀。

如果窗口處于全屏模式且背景色的alpha值小于1.0,這個方法將會拋出IllegalComponentStateException異常,如果不支持像素級半透明且alpha值小于1.0,將會拋出UnsupportedOperationException異常。

為了避免后一個異常,調(diào)用GraphicsDevice's isWindowTranslucencySupported()方法時,參數(shù)必須使用GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSLUCENT,并檢查返回的值,如下所示:

  1. GraphicsEnvironment ge;  
  2. ge = GraphicsEnvironment.getLocalGraphicsEnvironment ();  
  3. if (!ge.getDefaultScreenDevice ().  
  4.         isWindowTranslucencySupported (GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSLUCENT))  
  5. {  
  6.     System.err.println ("per-pixel translucency isn't supported");  
  7.     return;  

另外,確定窗口本身是否支持像素級半透明效果也很重要,可調(diào)用java.awt.GraphicsConfiguration's public Boolean isTranslucencyCapable()方法來判斷,如果支持的話,這個方法返回Ture,如下所示:

  1. / The following code fragment continues from the previous code fragment, but assumes that   
  2. // the current class is a descendent of java.awt.Window.  
  3. if (!getGraphicsConfiguration ().isTranslucencyCapable ())  
  4. {  
  5.     System.err.println ("per-pixel translucency not in effect for this graphics configuration");  
  6.     System.exit (0);  
  7. }  
  8.  

如果你想確定當(dāng)前背景色的alpha,可調(diào)用Window的public Color getBackground()方法,你也可以調(diào)用新的public boolean isOpaque()方法確定窗口當(dāng)前是否是不透明的(返回True)。

我創(chuàng)建了一個PPTDemo程序演示像素級半透明窗口,清單2顯示了它的代碼,因為這個窗口是未加裝飾的,你需要點擊它的關(guān)閉按鈕來終止它。

清單2. PPTDemo.java

  1. // PPTDemo.java  
  2. import java.awt.Color;  
  3. import java.awt.Dimension;  
  4. import java.awt.EventQueue;  
  5. import java.awt.GradientPaint;  
  6. import java.awt.Graphics;  
  7. import java.awt.Graphics2D;  
  8. import java.awt.GraphicsDevice;  
  9. import java.awt.GraphicsEnvironment;  
  10. import java.awt.event.ActionEvent;  
  11. import java.awt.event.ActionListener;  
  12. import javax.swing.Box;  
  13. import javax.swing.BoxLayout;  
  14. import javax.swing.JButton;  
  15. import javax.swing.JFrame;  
  16. import javax.swing.JPanel;  
  17. public class PPTDemo extends JFrame  
  18. {  
  19.    public PPTDemo ()  
  20.    {  
  21.       super ("Per-Pixel Translucency Demo");  
  22.       JPanel gradPanel = new JPanel ()  
  23.                          {  
  24.                              // Transparent red  
  25.                              Color colorA = new Color (255, 0, 0, 0);  
  26.                              // Solid red  
  27.                              Color colorB = new Color (255, 0, 0, 255);  
  28.                              protected void paintComponent (Graphics g)  
  29.                              {  
  30.                                  Graphics2D g2d = (Graphics2D) g;  
  31.                                  GradientPaint gp;  
  32.                                  gp = new GradientPaint (0.0f, 0.0f, colorA,  
  33.                                                          0.0f, getHeight (),  
  34.                                                          colorB, true);  
  35.                                  g2d.setPaint (gp);  
  36.                                  g2d.fillRect (0, 0, getWidth (),  
  37.                                                getHeight ());  
  38.                                    
  39.                              }  
  40.                          };  
  41.       gradPanel.setPreferredSize (new Dimension (300, 200));  
  42.       gradPanel.setLayout (new BoxLayout (gradPanel, BoxLayout.Y_AXIS));  
  43.       JButton btnClose = new JButton ("Close");  
  44.       ActionListener al;  
  45.       al = new ActionListener ()  
  46.            {  
  47.                public void actionPerformed (ActionEvent ae)  
  48.                {  
  49.                   System.exit (0);  
  50.                }  
  51.            };  
  52.       btnClose.addActionListener (al);  
  53.       btnClose.setAlignmentX (0.5f);  
  54.       gradPanel.add (Box.createVerticalGlue ());  
  55.       gradPanel.add (btnClose);  
  56.       gradPanel.add (Box.createVerticalGlue ());  
  57.       setContentPane (gradPanel);  
  58.       if (!getGraphicsConfiguration ().isTranslucencyCapable ())  
  59.       {  
  60.           System.err.println ("per-pixel translucency not in effect for "+  
  61.                               "this graphics configuration");  
  62.           System.exit (0);  
  63.       }  
  64.       setBackground (new Color (0, 0, 0, 0)); // Achieve per-pixel  
  65.                                               // translucency.  
  66.       pack ();  
  67.       setLocationRelativeTo (null);  
  68.       setVisible (true);  
  69.    }  
  70.    public static void main (String [] args)  
  71.    {  
  72.       Runnable r;  
  73.       r = new Runnable ()  
  74.           {  
  75.               public void run ()  
  76.               {  
  77.                  GraphicsEnvironment ge;  
  78.                  ge = GraphicsEnvironment.getLocalGraphicsEnvironment ();  
  79.                  if (!ge.getDefaultScreenDevice ().  
  80.                          isWindowTranslucencySupported  
  81.                            (GraphicsDevice.WindowTranslucency.  
  82.                                            PERPIXEL_TRANSLUCENT))  
  83.                  {  
  84.                      System.err.println ("per-pixel translucency isn't "+  
  85.                                          "supported");  
  86.                      return;  
  87.                  }  
  88.                  new PPTDemo ();  
  89.               }  
  90.           };  
  91.       EventQueue.invokeLater (r);  
  92.    }  

上面的代碼顯示了用JPanel類創(chuàng)建了兩個java.awt.Color對象,alpha值為0時透明,為255時不透明,它的paintComponent()方法和java.awt.GradientPaint一起給面板的表面涂上了一層梯度式alpha值。

后面的代碼將這個面板作為框架窗口的內(nèi)容面板,并驗證窗口的圖形配置是否支持像素級半透明,最后調(diào)用setBackground()方法開啟像素級半透明窗口效果。

調(diào)整窗口的大小后,清單2中的代碼調(diào)用setLocationRelativeTo(null)讓面板在屏幕上居中,接著調(diào)用setVisible(true)方法控制面板的半透明顯示:上方透明,下方不透明,中間半透明,如圖2所示。

從上到下,透明度不斷減小
圖 2 從上到下,透明度不斷減小

#p#

像素級透明和任意形狀的窗口

像素級透明和像素級半透明類似,這種半透明模式主要用于任意形狀窗口中的內(nèi)容。

任意形狀窗口是未加裝飾的窗口,其外觀與特定幾何形狀一致(如圓,圓角矩形等),形狀外的像素是透明的,在這些像素上點擊才顯示背景。

JDK 7通過向Window增加public void setShape(Shape shape)和public Shape getShape()方法支持像素級透明和任意形狀的窗口,向前一個方法傳遞一個java.awt.Shape實例給當(dāng)前窗口指定一個形狀。

如果窗口處于全屏模式且傳遞來一個非空形狀時,setShape()方法會拋出IllegalComponentStateException異常,如果不支持像素級透明且傳遞來一個非空形狀時,拋出UnsupportedOperationException異常。

為了避免后一個異常,調(diào)用GraphicsDevice's isWindowTranslucencySupported()方法時,參數(shù)必須使用raphicsDevice.WindowTranslucency.PERPIXEL_TRANSPARENT,并檢查返回的值,如下所示:

  1. GraphicsEnvironment ge;  
  2. ge = GraphicsEnvironment.getLocalGraphicsEnvironment ();  
  3. if (!ge.getDefaultScreenDevice ().  
  4.         isWindowTranslucencySupported (GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSPARENT))  
  5. {  
  6.     System.err.println ("per-pixel transparency isn't supported");  
  7.     return;  

我創(chuàng)建了一個PPTSWDemo程序演示像素級透明和任意形狀的窗口,我們將清單2中顯示出來的圓角矩形改成橢圓形狀,清單3顯示了這個程序的源代碼。

清單3. PPTSWDemo.java

  1. // PPTSWDemo.java  
  2. import java.awt.Color;  
  3. import java.awt.Dimension;  
  4. import java.awt.EventQueue;  
  5. import java.awt.GradientPaint;  
  6. import java.awt.Graphics;  
  7. import java.awt.Graphics2D;  
  8. import java.awt.GraphicsDevice;  
  9. import java.awt.GraphicsEnvironment;  
  10. import java.awt.Shape;  
  11. import java.awt.event.ActionEvent;  
  12. import java.awt.event.ActionListener;  
  13. import java.awt.geom.Ellipse2D;  
  14. import javax.swing.Box;  
  15. import javax.swing.BoxLayout;  
  16. import javax.swing.JButton;  
  17. import javax.swing.JFrame;  
  18. import javax.swing.JPanel;  
  19. public class PPTSWDemo extends JFrame  
  20. {  
  21.    public PPTSWDemo ()  
  22.    {  
  23.       super ("Per-Pixel Transparency and Shaped Window Demo");  
  24.       setUndecorated (true); // Avoid decorated window artifacts.  
  25.       JPanel gradPanel = new JPanel ()  
  26.                          {  
  27.                              // Solid white  
  28.                              Color colorA = new Color (255, 255, 255);  
  29.                              // Solid red  
  30.                              Color colorB = new Color (255, 0, 0);  
  31.                              protected void paintComponent (Graphics g)  
  32.                              {  
  33.                                  Graphics2D g2d = (Graphics2D) g;  
  34.                                  GradientPaint gp;  
  35.                                  gp = new GradientPaint (0.0f, 0.0f, colorA,  
  36.                                                          0.0f, getHeight (),  
  37.                                                          colorB, true);  
  38.                                  g2d.setPaint (gp);  
  39.                                  g2d.fillRect (0, 0, getWidth (),  
  40.                                                getHeight ());  
  41.                                    
  42.                              }  
  43.                          };  
  44.       gradPanel.setPreferredSize (new Dimension (300, 200));  
  45.       gradPanel.setLayout (new BoxLayout (gradPanel, BoxLayout.Y_AXIS));  
  46.       JButton btnClose = new JButton ("Close");  
  47.       ActionListener al;  
  48.       al = new ActionListener ()  
  49.            {  
  50.                public void actionPerformed (ActionEvent ae)  
  51.                {  
  52.                   System.exit (0);  
  53.                }  
  54.            };  
  55.       btnClose.addActionListener (al);  
  56.       btnClose.setAlignmentX (0.5f);  
  57.       gradPanel.add (Box.createVerticalGlue ());  
  58.       gradPanel.add (btnClose);  
  59.       gradPanel.add (Box.createVerticalGlue ());  
  60.       setContentPane (gradPanel);  
  61.       pack ();  
  62.       setShape (new Ellipse2D.Float (0, 0, getWidth (), getHeight ()));  
  63.       setLocationRelativeTo (null);  
  64.       setVisible (true);  
  65.    }  
  66.    public static void main (String [] args)  
  67.    {  
  68.       Runnable r;  
  69.       r = new Runnable ()  
  70.           {  
  71.               public void run ()  
  72.               {  
  73.                  GraphicsEnvironment ge;  
  74.                  ge = GraphicsEnvironment.getLocalGraphicsEnvironment ();  
  75.                  if (!ge.getDefaultScreenDevice ().  
  76.                          isWindowTranslucencySupported  
  77.                            (GraphicsDevice.WindowTranslucency.  
  78.                                            PERPIXEL_TRANSPARENT))  
  79.                  {  
  80.                      System.err.println ("per-pixel transparency isn't "+  
  81.                                          "supported");  
  82.                      return;  
  83.                  }  
  84.                  new PPTSWDemo ();  
  85.               }  
  86.           };  
  87.       EventQueue.invokeLater (r);  
  88.    }  

在驗證了支持像素級透明后,清單3執(zhí)行setShape (new Ellipse2D.Float (0, 0, getWidth (), getHeight ()));將框架窗口改成橢圓形,效果如圖3所示。

梯度式透明現(xiàn)在限制在橢圓范圍內(nèi)
圖 3 梯度式透明現(xiàn)在限制在橢圓范圍內(nèi)

遺憾的是,任意形狀窗口的邊緣有鋸齒,也許等到JDK 7正式發(fā)布,使用像素級半透明和抗鋸齒功能可以解決掉這個問題。 

#p#

半透明聯(lián)合像素級透明和任意形狀窗口

你可以聯(lián)合像素級半透明(或簡單半透明)和像素級透明實現(xiàn)一個半透明的任意形狀窗口,我創(chuàng)建了一個CTSWDemo程序演示這是可能的,清單4中的代碼擴展了前面的例子,包括了像素級半透明代碼。

清單 4. CTSWDemo.java

  1. // CTSWDemo.java  
  2. import java.awt.Color;  
  3. import java.awt.Dimension;  
  4. import java.awt.EventQueue;  
  5. import java.awt.GradientPaint;  
  6. import java.awt.Graphics;  
  7. import java.awt.Graphics2D;  
  8. import java.awt.GraphicsDevice;  
  9. import java.awt.GraphicsEnvironment;  
  10. import java.awt.Shape;  
  11. import java.awt.event.ActionEvent;  
  12. import java.awt.event.ActionListener;  
  13. import java.awt.geom.Ellipse2D;  
  14. import javax.swing.Box;  
  15. import javax.swing.BoxLayout;  
  16. import javax.swing.JButton;  
  17. import javax.swing.JFrame;  
  18. import javax.swing.JPanel;  
  19. public class CTSWDemo extends JFrame  
  20. {  
  21.    public CTSWDemo ()  
  22.    {  
  23.       super ("Combined Translucency with Per-Pixel Transparency and Shaped "+  
  24.              "Window Demo");  
  25.       setUndecorated (true); // Avoid decorated window artifacts.  
  26.       JPanel gradPanel = new JPanel ()  
  27.                          {  
  28.                              Color colorA = new Color (255, 0, 0, 0);  
  29.                              Color colorB = new Color (255, 0, 0, 255);  
  30.                              protected void paintComponent (Graphics g)  
  31.                              {  
  32.                                  Graphics2D g2d = (Graphics2D) g;  
  33.                                  GradientPaint gp;  
  34.                                  gp = new GradientPaint (0.0f, 0.0f, colorA,  
  35.                                                          0.0f, getHeight (),  
  36.                                                          colorB, true);  
  37.                                  g2d.setPaint (gp);  
  38.                                  g2d.fillRect (0, 0, getWidth (),  
  39.                                                getHeight ());  
  40.                                    
  41.                              }  
  42.                          };  
  43.       gradPanel.setPreferredSize (new Dimension (300, 200));  
  44.       gradPanel.setLayout (new BoxLayout (gradPanel, BoxLayout.Y_AXIS));  
  45.       JButton btnClose = new JButton ("Close");  
  46.       ActionListener al;  
  47.       al = new ActionListener ()  
  48.            {  
  49.                public void actionPerformed (ActionEvent ae)  
  50.                {  
  51.                   System.exit (0);  
  52.                }  
  53.            };  
  54.       btnClose.addActionListener (al);  
  55.       btnClose.setAlignmentX (0.5f);  
  56.       gradPanel.add (Box.createVerticalGlue ());  
  57.       gradPanel.add (btnClose);  
  58.       gradPanel.add (Box.createVerticalGlue ());  
  59.       setContentPane (gradPanel);  
  60.       if (!getGraphicsConfiguration ().isTranslucencyCapable ())  
  61.       {  
  62.           System.err.println ("per-pixel translucency not in effect for this "+  
  63.                               "graphics configuration");  
  64.           System.exit (0);  
  65.       }  
  66.       setBackground (new Color (0, 0, 0, 0)); // Achieve per-pixel  
  67.                                               // translucency.  
  68.       pack ();  
  69.       setShape (new Ellipse2D.Float (0, 0, getWidth (), getHeight ()));  
  70.       setLocationRelativeTo (null);  
  71.       setVisible (true);  
  72.    }  
  73.    public static void main (String [] args)  
  74.    {  
  75.       Runnable r;  
  76.       r = new Runnable ()  
  77.           {  
  78.               public void run ()  
  79.               {  
  80.                  GraphicsEnvironment ge;  
  81.                  ge = GraphicsEnvironment.getLocalGraphicsEnvironment ();  
  82.                  if (!ge.getDefaultScreenDevice ().  
  83.                          isWindowTranslucencySupported  
  84.                            (GraphicsDevice.WindowTranslucency.  
  85.                                            PERPIXEL_TRANSLUCENT))  
  86.                  {  
  87.                      System.err.println ("per-pixel translucency isn't "+  
  88.                                          "supported");  
  89.                      return;  
  90.                  }  
  91.                  if (!ge.getDefaultScreenDevice ().  
  92.                          isWindowTranslucencySupported  
  93.                            (GraphicsDevice.WindowTranslucency.  
  94.                                            PERPIXEL_TRANSPARENT))  
  95.                  {  
  96.                      System.err.println ("per-pixel transparency isn't "+  
  97.                                          "supported");  
  98.                      return;  
  99.                  }  
  100.                  new CTSWDemo ();  
  101.               }  
  102.           };  
  103.       EventQueue.invokeLater (r);  
  104.    }  

上面的梯度代碼在創(chuàng)建Color對象時再次使用了alpha值,如圖4所示,但半透明紅色梯度現(xiàn)在只占用了橢圓形部分,而不是整個窗口。

 
圖 4 setBackground()方法調(diào)用允許橢圓形內(nèi)用紅色半透明呈梯度渲染

小結(jié)

JDK 7對半透明和任意形狀窗口的支持使得創(chuàng)建富有新意的UI更為容易,希望正式發(fā)布時會包含軟剪裁或其它可移除邊緣鋸齒的技術(shù)。下一篇文章將會介紹JDK 7中新出現(xiàn)的JLayer Swing組件。

【編輯推薦】

  1. 探秘JDK 7:將會出現(xiàn)新的語言特性
  2. Java 7,一個技術(shù)標(biāo)準(zhǔn)的商業(yè)咒語
  3. Java 7 未按時發(fā)布 計劃再次延期
  4. JDK 7功能完備版今天發(fā)布?
責(zé)任編輯:佚名 來源: IT168
相關(guān)推薦

2010-06-28 09:26:15

JDK 7Swing組件Java

2011-06-21 09:46:49

Qt 半透明 嵌入

2011-07-29 09:31:32

JDK 7

2011-05-20 09:35:22

JDK7

2011-05-20 09:43:23

JDK7

2010-06-22 11:07:42

JDK 7Java開發(fā)Java

2011-05-20 10:15:06

JDK7

2011-05-20 10:28:29

JDK7

2011-05-20 09:53:00

JDK7

2011-05-20 10:20:11

JDK7

2009-07-10 11:31:45

Swing支持透明和不規(guī)則窗口

2010-11-15 11:27:11

2010-09-14 09:18:28

DIVCSS

2015-07-29 16:33:12

IOS半透明引導(dǎo)

2010-06-29 09:23:09

JDK 7I|ONIO.2

2011-05-20 09:59:42

JDK7

2009-08-24 08:37:52

Windows 7防火墻

2012-04-17 16:19:21

蘋果

2015-12-21 10:49:57

Windows 10開始菜單磁貼

2011-07-04 09:44:41

點贊
收藏

51CTO技術(shù)棧公眾號

成人综合在线观看| 亚洲国产精品91| 欧美伊人久久久久久午夜久久久久| 欧美另类xxx| 日本japanese极品少妇| 国产日韩另类视频一区| 亚洲精品视频观看| 蜜桃视频在线观看91| 国产精品午夜福利| 国产视频一区免费看| 日韩在线免费高清视频| 超级砰砰砰97免费观看最新一期 | 精品国产欧美日韩一区二区三区| 成人精品视频一区二区三区尤物| 久久这里有精品视频| 国产麻豆xxxvideo实拍| 高清在线一区| 岛国av午夜精品| 在线观看18视频网站| 无码精品视频一区二区三区| 国产一区二区在线免费观看| 57pao成人国产永久免费| 欧美手机在线观看| 国产精品一区二区av交换| 欧美一级二级三级蜜桃| 手机在线看福利| 国产精品蜜芽在线观看| 亚洲精品美腿丝袜| 亚洲一区二区精品在线| 好男人免费精品视频| 99久免费精品视频在线观看| 亚洲一区二区三区四区视频| 日韩xxx视频| 麻豆精品网站| 欧美诱惑福利视频| 国产无遮挡裸体免费视频| 亚洲一区在线| 日韩视频欧美视频| 精品熟妇无码av免费久久| 美女久久99 | 国产又粗又黄又爽的视频| 亚洲专区一区二区三区| 久久久久久久久亚洲| 校园春色 亚洲| 手机在线电影一区| 自拍偷拍亚洲一区| 欧美成人久久久免费播放| 久久99国产成人小视频| 亚洲美女视频网| 亚洲调教欧美在线| 日韩av不卡一区| 日韩成人小视频| 国产精品探花一区二区在线观看| 福利一区二区三区视频在线观看| 亚洲免费观看高清完整版在线观看 | 精品国产91洋老外米糕| 亚洲天堂av一区二区三区| 婷婷激情成人| 日韩午夜在线观看视频| 岛国大片在线免费观看| 亚洲va欧美va人人爽成人影院| 91精品1区2区| 在线视频日韩一区| 国产亚洲人成a在线v网站 | 在线观看不卡av| 奇米网一区二区| 婷婷久久综合| 欧美高清视频一区二区| 国产精品成人aaaa在线| 国产精品日韩欧美一区| 国产精品极品在线| 国产精品爽爽久久| 国产乱人伦偷精品视频免下载| 日韩免费视频在线观看| 日韩国产亚洲欧美| 国产一区二区女| 99re在线视频观看| 亚洲三区在线观看无套内射| 国产欧美日韩麻豆91| 一区二区三区在线视频看| 日本性爱视频在线观看| 天天影视色香欲综合网老头| mm1313亚洲国产精品无码试看| 日皮视频在线观看| 精品日本高清在线播放| 亚洲第一av网站| 精品一区二区三区自拍图片区| 波多野结衣理论片| 精品一二三四在线| 国产一区二区免费在线观看| 黄色国产在线| 亚洲精品免费一二三区| 免费无码国产v片在线观看| 成人午夜亚洲| 亚洲精品在线三区| 亚洲AV无码成人精品区明星换面| 91精品入口| 国产亚洲激情视频在线| 国产97免费视频| 99视频一区| 成人h视频在线观看播放| 少妇精品视频一区二区| 国产精品美女一区二区| av免费观看大全| 亚洲欧洲二区| 亚洲精品国产精品国自产在线| 看全色黄大色黄女片18| 日韩欧美精品一区| 2018日韩中文字幕| 中文字幕在线乱| 在线免费看av的网站| 成人动漫一区二区| 一区二区精品国产| 一根才成人网| 精品免费日韩av| 久操视频在线观看免费| 亚洲久久在线| 91麻豆蜜桃| 午夜不卡视频| 色av一区二区| 第四色在线视频| 午夜精品999| 国产一区二中文字幕在线看| 欧美偷拍视频| 亚洲综合色婷婷| 污视频网址在线观看| 国产99亚洲| 午夜精品福利电影| 精品国产无码一区二区| 国产精品福利影院| 成人一级片网站| 好吊妞国产欧美日韩免费观看网站| 制服丝袜激情欧洲亚洲| a天堂中文字幕| 国产精品资源| 九九九九精品九九九九| 波多野结衣在线观看| 日韩午夜电影在线观看| 日本少妇aaa| 美女一区二区三区在线观看| 日本一区二区精品视频| 在线观看欧美日韩电影| 亚洲精品97久久| 国产亚洲成人av| 国产成a人亚洲| 欧美黑人在线观看| 视频一区日韩精品| 欧美激情极品视频| 日韩一级免费毛片| 精品欧美aⅴ在线网站| 国产一级伦理片| 国产精品亚洲欧美| 久久久久久久久久久一区| 毛片在线网站| 亚洲人高潮女人毛茸茸| 狠狠狠狠狠狠狠| 久久久精品欧美丰满| 成人在线观看a| 日韩精品电影| 成人在线视频网站| 精精国产xxxx视频在线中文版| 日韩欧亚中文在线| 性高潮久久久久久久| 日韩av成人高清| 四虎影院一区二区| 99re8这里有精品热视频免费| 国产亚洲欧洲高清一区| 在线观看中文字幕av| 亚洲欧洲日产国码二区| 色姑娘综合天天| 影音先锋日韩资源| 日本成人三级| 99er精品视频| 午夜精品久久久久久久99热| 欧美一区二不卡视频| 欧美性猛交xxxx免费看| 久久日免费视频| 从欧美一区二区三区| 国产成人a亚洲精v品无码| 欧美色蜜桃97| 成人av片网址| **在线精品| 操人视频在线观看欧美| 天堂网2014av| 欧美群妇大交群中文字幕| 久久久国产精品黄毛片| 久久综合网色—综合色88| 一区二区三区网址| 影音先锋中文字幕一区二区| 欧美极品一区| 久久精品九色| 国产z一区二区三区| 怡红院红怡院欧美aⅴ怡春院| 欧美精品第1页| 欧美丰满艳妇bbwbbw| 91免费视频大全| av噜噜在线观看| 日韩亚洲在线| 亚洲一区二区在线看| 国产无遮挡裸体免费久久| 国产精品久久久久9999| 美女91在线| www国产精品com| 日本一区二区三区在线观看视频| 五月天国产精品| 亚洲人与黑人屁股眼交| 久久综合色之久久综合| 精品国产乱码久久久久久1区二区| 国产高清一区| 免费亚洲一区二区| 97久久综合精品久久久综合| 国产精品免费一区豆花| 麻豆网站免费在线观看| 欧美极品少妇xxxxx| 欧美激情办公室videoshd| 亚洲精品久久视频| 成 人 黄 色 片 在线播放| 欧美日韩一区二区三区高清| 欧美精品韩国精品| 亚洲国产精品自拍| 91杏吧porn蝌蚪| 国产精品剧情在线亚洲| 色哟哟精品观看| 91伊人久久大香线蕉| 国产精久久久久| 国产乱子伦一区二区三区国色天香| 隔壁人妻偷人bd中字| 欧美疯狂party性派对| 日韩精品电影网站| 亚洲理论电影片| 久久99精品久久久久久三级| 99这里只有精品视频| 成人精品视频99在线观看免费| 欧美色图天堂| 另类色图亚洲色图| 日日夜夜精品一区| 最近2019中文字幕大全第二页| 国产普通话bbwbbwbbw| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 欧美日韩在线免费观看视频| 成人短片线上看| 香蕉久久夜色| 成人羞羞网站| 亚洲精品自在在线观看| 大色综合视频网站在线播放| 日本一区二区三区免费观看| 亚洲8888| 日韩高清dvd| 欧美日韩激情在线一区二区三区| aa日韩免费精品视频一| 1204国产成人精品视频| 99久久精品久久久久久ai换脸| 韩国成人动漫| 国产精品igao视频| 成人福利片在线| 国产欧美在线看| 年轻的保姆91精品| 国产伦精品一区二区三区| 91蝌蚪精品视频| 九九久久99| 精品久久久久久久| 中文字幕日韩一区二区三区| 欧美.www| 北条麻妃在线观看| 日本在线播放一区二区三区| 青青青在线视频免费观看| 久久精品免费看| 特黄特黄一级片| 本田岬高潮一区二区三区| 亚洲中文字幕无码av| 久久久久久久免费视频了| 久久久久久成人网| 亚洲六月丁香色婷婷综合久久| 中文字幕欧美激情极品| 亚洲人妖av一区二区| 国产精品不卡av| 91精品91久久久中77777| 99热这里只有精品9| 精品国产乱子伦一区| 你懂的免费在线观看| 色悠悠久久久久| 国产在线拍揄自揄拍视频 | 中文字幕在线2021| 亚洲成av人**亚洲成av**| 草莓视频18免费观看| 欧美精三区欧美精三区| 午夜精品久久久久久久爽| 精品一区二区三区四区在线| 最近高清中文在线字幕在线观看| 亚洲欧美日韩综合| av网站网址在线观看| 欧美性在线视频| 欧美高清一级片| 欧美日韩一区二区三| 伊人情人综合网| 黄色国产精品视频| 国产成人亚洲综合a∨猫咪| 爱爱免费小视频| 一区二区三区免费在线观看| 久久人人爽人人爽人人片av免费| 日韩欧美精品网址| 国产精品久久久久久69| 精品小视频在线| 在线观看中文字幕的网站| 国产精品69久久| 国产乱人伦精品一区| 亚洲一一在线| 麻豆9191精品国产| 欧美日韩人妻精品一区在线| 中文av一区二区| 在线天堂中文字幕| 日韩一区二区三区在线观看| 国产女人在线观看| 98精品国产高清在线xxxx天堂| 性xxxxfreexxxxx欧美丶| 91在线网站视频| 成人精品天堂一区二区三区| 日韩免费一级视频| 成人久久视频在线观看| 91传媒免费观看| 欧美性大战久久久久久久| 天天干天天爱天天操| 欧美黑人巨大xxx极品| 啪啪av大全导航福利综合导航| 91在线观看网站| 99国产精品一区二区| 日韩精品一区二区三区色欲av| 欧美aaa在线| 久久久久久亚洲中文字幕无码| 国产精品美女久久久久久久久久久 | 男女视频一区二区三区| 99热精品国产| 国产午夜在线播放| 欧美成人官网二区| 2024短剧网剧在线观看| 成人综合网网址| 68国产成人综合久久精品| 色婷婷一区二区三区av免费看| 国产成人av一区二区| 久久久久久久久久久久久女过产乱| 午夜免费久久看| 天天干视频在线| 456亚洲影院| 精品在线观看入口| 99精品视频播放| 国产亚洲精久久久久久| 自拍偷拍校园春色| 一区二区三区亚洲| 亚洲精品tv| 男人j进女人j| 粉嫩一区二区三区在线看| 欧美三级日本三级| 精品国产123| 手机av在线| 日韩在线第一区| 久久精品国产99| 青青草原在线免费观看视频| 日韩女优毛片在线| 国产精品69xx| 久久久影院一区二区三区| 久久精品亚洲一区二区| 国产探花视频在线| 91精品免费观看| 美女尤物在线视频| 欧美视频观看一区| 久久99久久99| 久久久久99精品成人片毛片| 亚洲高清在线观看| 怡红院成人在线| 99re99热| 91一区二区在线| 中文字幕观看在线| 成人444kkkk在线观看| 国产另类在线| 久久精品影视大全| 亚洲精品日韩综合观看成人91| 中文天堂在线资源| 久久国产精彩视频| 国产乱人伦丫前精品视频| 国产又大又黄又粗又爽| 亚洲精品五月天| 国产在线小视频| 91九色偷拍| 久久久久99| 九九九在线视频| 亚洲三级 欧美三级| 九九99久久精品在免费线bt| 中文字幕无码精品亚洲35| 欧美高清在线一区| 国产91绿帽单男绿奴| 国产精品久在线观看| 国产综合精品一区| 亚洲女优在线观看| 精品国产人成亚洲区| 精品裸体bbb| 欧美激情 国产精品| 亚洲欧洲美洲综合色网| 久久国产精品高清一区二区三区| 欧美亚洲日本黄色| 1024精品久久久久久久久|