John Jiang

          a cup of Java, cheers!
          https://github.com/johnshajiang/blog

             :: 首頁 ::  :: 聯系 :: 聚合  :: 管理 ::
            131 隨筆 :: 1 文章 :: 530 評論 :: 0 Trackbacks
          利用SwingX與TimingFramework實現淡入淡出
          本文使用SwingXTimingFramework展示了如何實現淡入淡出效果,程序簡潔實用,希望對大家能有所助益。(2009.09.28最后更新)

          在Swing中使用AlphaComposite設置界面的半透明度,再配合javax.swing.Timer可以比較容易地實現淡入淡出效果。但需要我們繼承具體的UI組件,并重寫它的paintComponent方法,同時還要為Timer提供一個ActionListener的實現。這些對于程序員來說,顯得有些乏味。
              幸運地是,SwingX中的JXPanel(JPanel的子類)通過setAlpha方法來設置半透明度,JXPanel中的所有UI組件都可隨之半透明化。TimingFramework提供的Animator可以幫助我們非線性地設置JXPanel中的alpha值。故,我們在實現淡入淡出時,可以使用JXPanel來替代JPanel,用Animator來替代Timer。


              下面是一個非常簡單的示例,該示例在一個使用CardLayout的JPanel--cardPanel,中另包含了兩個JXPanel--panelA和panelB,這兩個子容器中又分別有一個JButton--buttonA和buttonB。當點擊buttonA時,將淡入顯示panelB;當點擊buttonB時,將淡入顯示panelA。
           1 public class FadingCardDemo extends JFrame {
           2 
           3     private static final long serialVersionUID = 8005909309849021746L;
           4 
           5     private String CARD_A = "CARD_A";
           6     private String CARD_B = "CARD_B";
           7 
           8     private JPanel cardPanel = null;
           9     private JXPanel panelA = null;
          10     private JXPanel panelB = null;
          11     private JButton buttonA = null;
          12     private JButton buttonB = null;
          13 
          14     public FadingCardDemo() {
          15         super("FadingButton Demo");
          16         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          17         initUI();
          18     }
          19 
          20     private void initUI() {
          21         cardPanel = new JPanel(new CardLayout());
          22 
          23         buttonA = new JButton("Button A");
          24         buttonA.addActionListener(actionHandler);
          25         panelA = new JXPanel(new BorderLayout());
          26         panelA.add(buttonA, BorderLayout.CENTER);
          27         cardPanel.add(panelA, CARD_A);
          28 
          29         buttonB = new JButton("Button B");
          30         buttonB.addActionListener(actionHandler);
          31         panelB = new JXPanel(new BorderLayout());
          32         panelB.add(buttonB, BorderLayout.CENTER);
          33         cardPanel.add(panelB, CARD_B);
          34 
          35         Container container = getContentPane();
          36         container.setLayout(new BorderLayout());
          37         container.add(cardPanel, BorderLayout.CENTER);
          38     }
          39 
          40     private ActionListener actionHandler = new ActionListener() {
          41 
          42         private Animator animator = null;
          43 
          44         public void actionPerformed(ActionEvent e) {
          45             if (animator == null) {
          46                 animator = new Animator(2000);
          47                 animator.setDeceleration(0.2F);
          48                 animator.setAcceleration(0.4F);
          49             } else if (animator.isRunning()) {
          50                 animator.stop();
          51             }
          52 
          53             JButton button = (JButton) e.getSource();
          54             if (button == buttonA) {
          55                 animator.addTarget(new PropertySetter(panelB, "alpha"1.0F));
          56                 panelB.setAlpha(0.1F);
          57                 ((CardLayout) cardPanel.getLayout()).show(cardPanel, CARD_B);
          58             } else if (button == buttonB) {
          59                 animator.addTarget(new PropertySetter(panelA, "alpha"1.0F));
          60                 panelA.setAlpha(0.1F);
          61                 ((CardLayout) cardPanel.getLayout()).show(cardPanel, CARD_A);
          62             }
          63             animator.start();
          64         }
          65     };
          66 
          67     public static void main(String[] args) {
          68         SwingUtilities.invokeLater(new Runnable() {
          69             public void run() {
          70                 FadingCardDemo demo = new FadingCardDemo();
          71                 demo.setSize(new Dimension(400300));
          72                 demo.setVisible(true);
          73             }
          74         });
          75     }
          76 }
          posted on 2009-09-28 09:46 John Jiang 閱讀(2032) 評論(0)  編輯  收藏 所屬分類: Java 、Swing 、GUI 、原創
          主站蜘蛛池模板: 天水市| 湘潭县| 柳江县| 新平| 资中县| 德化县| 长顺县| 额尔古纳市| 临汾市| 偃师市| 兴文县| 噶尔县| 墨竹工卡县| 兰坪| 斗六市| 伊金霍洛旗| 监利县| 珠海市| 青岛市| 昔阳县| 白水县| 吉安县| 获嘉县| 迁安市| 远安县| 石林| 蓬莱市| 时尚| 乐安县| 张家川| 繁昌县| 南丹县| 阜新市| 遂平县| 两当县| 讷河市| 扎赉特旗| 铜梁县| 工布江达县| 乌审旗| 蒙城县|