2007-12-23

Swing 的观感切换

关键字: Java Swing 观感

今天学习了怎样切换Swing的观感,感觉还不错                                                                      

在默认的情况下,Swing 程序使用Metal观感,可以采用两种方法改变观感。

      第一种方式是在Java的安装的子目录下jre / lib有一个文件swing.properties。在这个文件中,将属性Swing.defaultlaf设置为所希望的观感类名。例如:

swing.defaultlaf = com.sun.java.swing.plaf.motif.MotifLookAndFeel

ps:第一中方式我怎么也没找到那个swing.properties,不知大家的如何?

  注意,Metal观感位于Javax.swing包中。其他的观感包位于com.sun.java包中,并且不是在每个Java实现中都提供。现在,鉴于版权的原因,Windows 和Mac 的观感包只与Windows和Mac版本的java运行环境一起发布。

   提示:下面给出一个测试很有帮助的的建议。由于属性文件中的以#字符开始的行被忽略,所以,可以在swing.properties文件中提供几种观感,并同过增删#字符来切换选择:

#swing.defaultlaf = javax.swing.plaf.metal.MetalLookAndFeel

  swing.defaultlaf = com.sun.java.swing.plaf.motif.MotifLookAndFeel

#swing.defaultlaf = com.sun.java.swing.plaf.windows.WindowsLookAndFeel

采用这种方式开启观感时必须重新启动程序。Swing程序只在启动时读取一次swing.properties文件。

      第二种方式是动态地改变观感。这需要调用静态的UIManager.setLookAndFeel方法,并提供所想要的观感类名,然后再调用静态方法SwingUtilities.updateComponentTreeUI来刷新全部的组件集。这里需要向这个方法提供一个组件,并由此找到其他的所有组件。当UIManager.setLookAndFeel方法没有找到所希望的观感或在加载过程中出现错误时,将会抛出异常。

     下面是一个例子,他显示了如何在程序中切换观感的方式。在这个程序中,这有点需要注意的地方。在内部动作监听器类的actionPerformed方法中,需要将一个外部的PalfPanel类的this引用传递给updateComponentTreeUI方法。

java 代码
  1. import java.awt.*;   
  2. import java.awt.event.*;   
  3. import javax.swing.*;   
  4.   
  5.   
  6. public class PlafTest {   
  7.   
  8.     public static void main(String[] args) {   
  9.         // TODO Auto-generated method stub   
  10.         PlafFrame frame = new PlafFrame();   
  11.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
  12.         frame.setVisible(true);   
  13.   
  14.     }   
  15. }   
  16.   
  17. //A Frae with a button panel for chaing look and fell   
  18. class PlafFrame extends JFrame {   
  19.        
  20.     public static final int DEFAULT_WIDTH = 300;   
  21.     public static final int DEFAULT_HEITHT =200;   
  22.        
  23.     public PlafFrame(){   
  24.            
  25.         setTitle("PlaF Test");   
  26.         setBounds(350,250,DEFAULT_WIDTH,DEFAULT_HEITHT);   
  27.         PlafPanel panel = new PlafPanel();   
  28.         add(panel);   
  29.     }   
  30.        
  31. }   
  32.   
  33. //A panel with buttons to change the pluggable look and fell   
  34.   
  35. class PlafPanel extends JPanel {   
  36.     public PlafPanel(){   
  37.         UIManager.LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels();   
  38.         for(UIManager.LookAndFeelInfo info : infos)   
  39.             makeButton(info.getName(),info.getClassName());   
  40.                
  41.            
  42.     }   
  43.        
  44.    void makeButton(String name,final String plafName){   
  45.           
  46.        //add button to panel   
  47.           
  48.        JButton button = new JButton(name);   
  49.        add(button);   
  50.           
  51.        //set button action   
  52.           
  53.        button.addActionListener(new  
  54.          ActionListener(){   
  55.            public void actionPerformed(ActionEvent event){   
  56.                   
  57.                //button action :switch to the new look and feel   
  58.                try{   
  59.                    UIManager.setLookAndFeel(plafName);   
  60.                    SwingUtilities.updateComponentTreeUI(PlafPanel.this);   
  61.                       
  62.                }   
  63.                catch(Exception e){e.printStackTrace();}   
  64.               
  65.            }   
  66.               
  67.        });   
  68.    }   
  69.        
  70.        
  71. }   

 

以上程序运行的结果在附件中可以看到

评论
发表评论

您还没有登录,请登录后发表评论

gml520
搜索本博客
我的相册
Ab40424d-27ea-32ee-801f-3c3df41136a0-thumb
linuxkerel.jpg
共 5 张
最近加入圈子
存档
最新评论