自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Swing容器組件的顯示效果

開發(fā) 后端
本文介紹Swing容器組件的顯示效果,使用Renderer渲染機(jī)制,在容器的paint方法中設(shè)置圖形對象的透明屬性,就可以實(shí)現(xiàn)Swing容器組件自身和子組件的透明渲染。

其實(shí)有很多用戶界面效果在Swing中是相當(dāng)容易實(shí)現(xiàn)的。前面曾談到過淡入淡出式彈出Swing Popup窗口,其實(shí)對于任何Swing容器組件而言都可以實(shí)現(xiàn)這一功能。使用Renderer渲染機(jī)制,在容器的paint方法中設(shè)置圖形對象的透明屬性,就可以實(shí)現(xiàn)Swing容器組件自身和子組件的透明渲染。如果再將這個過程漸變化,就能實(shí)現(xiàn)容器顯示淡入淡出效果。

本文的演示使用下面幾行代碼就實(shí)現(xiàn)了容器顯示的淡入淡出效果:

  1. /**  
  2.  * 淡入淡出式顯示內(nèi)容組件的容器  
  3.  * @author William Chen  
  4.  */  
  5. public class GlassBox extends JComponent implements ActionListener{  
  6.     //常數(shù)定義  
  7.     private static final int ANIMATION_FRAMES=50;  
  8.     private static final int ANIMATION_INTERVAL=10;  
  9.     //幀索引  
  10.     private int frameIndex;  
  11.     //時鐘  
  12.     private Timer timer;  
  13.      
  14.     /** Creates a new instance of GlassBox */  
  15.     public GlassBox() {  
  16.     }  
  17.      
  18.     public void paint(Graphics g){  
  19.         if(isAnimating()){  
  20.             //根據(jù)當(dāng)前幀顯示當(dāng)前透明度的內(nèi)容組件  
  21.             float alpha=(float)frameIndex/(float)ANIMATION_FRAMES;  
  22.             Graphics2D g2d=(Graphics2D)g;  
  23.             g2d.setComposite(AlphaComposite.getInstance
    (AlphaComposite.SRC_OVER, alpha));  
  24.             //Renderer渲染機(jī)制  
  25.             super.paint(g2d);  
  26.         }else{  
  27.             //如果是***次,啟動動畫時鐘  
  28.             frameIndex=0;  
  29.             timer=new Timer(ANIMATION_INTERVAL, this);  
  30.             timer.start();  
  31.         }  
  32.     }  
  33.     //判斷當(dāng)前是否正在進(jìn)行動畫  
  34.     private boolean isAnimating(){  
  35.         return timer!=null && timer.isRunning();  
  36.     }  
  37.     //關(guān)閉時鐘,重新初始化  
  38.     private void closeTimer() {  
  39.         if(isAnimating()){  
  40.             timer.stop();  
  41.             frameIndex=0;  
  42.             timer=null;  
  43.         }  
  44.     }  
  45.     //動畫時鐘處理事件  
  46.     public void actionPerformed(ActionEvent e) {  
  47.         //前進(jìn)一幀  
  48.         frameIndex++;  
  49.         if(frameIndex>=ANIMATION_FRAMES)  
  50.             //***一幀,關(guān)閉動畫  
  51.             closeTimer();  
  52.         else//更新當(dāng)前一幀  
  53.             repaint();  
  54.     }  
  55. }  

將GlassBox類作為JFrame的ContentPane就能實(shí)現(xiàn)窗口內(nèi)容顯示的淡入淡出效果。GlassBox更常見的使用方式是作為普通容器,放在應(yīng)用程序的任何地方。本文附帶的演示程序是將GlassBox是作為普通容器加入JFrame的ContentPane內(nèi)的。

Swing靈活強(qiáng)大的擴(kuò)展和自定義功能得益于其優(yōu)秀的模型和架構(gòu)設(shè)計。如果程序是僅局限于用幾個Label和Button等堆砌起來的簡單應(yīng)用,你很難體會到Swing容器組件的優(yōu)點(diǎn),反而會因?yàn)樗撵`活復(fù)雜覺得它不如SWT等編寫簡單。然而在你面對現(xiàn)實(shí)應(yīng)用中的復(fù)雜、靈活多變的界面需求時,Swing的能力就逐步顯現(xiàn)了出來了。

【編輯推薦】

  1. Swing應(yīng)用的數(shù)據(jù)驗(yàn)證
  2. 淺談Swing和SWT比較
  3. 應(yīng)該改進(jìn)的Java Swing 2.0
  4. 淺析Swing Set示例
  5. Swing中的JFormattedTextField組件實(shí)例
責(zé)任編輯:佚名 來源: 中國IT實(shí)驗(yàn)室
相關(guān)推薦

2009-07-10 16:29:32

Swing組件

2009-07-10 13:36:32

Swing容器

2009-07-14 17:21:42

Swing組件

2009-07-15 11:02:32

Swing組件

2012-01-17 14:29:38

JavaSwing

2009-07-10 18:06:59

JTree Swing

2009-07-17 12:54:13

2012-01-17 13:41:34

JavaSwing

2009-07-10 10:19:57

JFormattedTSwing

2009-07-15 13:06:38

Swing組件

2009-07-10 10:08:59

Spinner ModSwing組件

2009-07-10 17:03:17

AWT組件Swing組件

2009-07-14 18:05:28

輕量級Swing組件

2009-07-17 14:38:51

輕量級Swing組件

2009-07-17 10:31:18

paint方法Swing組件

2009-07-10 14:58:13

JLabel組件JFC和Swing

2009-07-15 10:52:13

JTree組件

2009-07-17 11:13:46

AWT和SwingSwing組件

2009-07-10 12:30:12

Swing組件

2009-07-10 09:38:06

Java swing組
點(diǎn)贊
收藏

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