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方法。
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- public class PlafTest {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- PlafFrame frame = new PlafFrame();
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frame.setVisible(true);
- }
- }
- //A Frae with a button panel for chaing look and fell
- class PlafFrame extends JFrame {
- public static final int DEFAULT_WIDTH = 300;
- public static final int DEFAULT_HEITHT =200;
- public PlafFrame(){
- setTitle("PlaF Test");
- setBounds(350,250,DEFAULT_WIDTH,DEFAULT_HEITHT);
- PlafPanel panel = new PlafPanel();
- add(panel);
- }
- }
- //A panel with buttons to change the pluggable look and fell
- class PlafPanel extends JPanel {
- public PlafPanel(){
- UIManager.LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels();
- for(UIManager.LookAndFeelInfo info : infos)
- makeButton(info.getName(),info.getClassName());
- }
- void makeButton(String name,final String plafName){
- //add button to panel
- JButton button = new JButton(name);
- add(button);
- //set button action
- button.addActionListener(new
- ActionListener(){
- public void actionPerformed(ActionEvent event){
- //button action :switch to the new look and feel
- try{
- UIManager.setLookAndFeel(plafName);
- SwingUtilities.updateComponentTreeUI(PlafPanel.this);
- }
- catch(Exception e){e.printStackTrace();}
- }
- });
- }
- }
以上程序运行的结果在附件中可以看到!
发表评论
- 浏览: 4275 次
- 性别:

- 来自: 福建

- 详细资料
搜索本博客
我的相册
共 5 张
最新评论
-
NetBeans vs Eclipse 最新 ...
qubic 写道leirdal 写道唉,netbeans和eclipse的比较, ...
-- by leirdal -
NetBeans vs Eclipse 最新 ...
K,这种话题6天12页,我真服了。。。
-- by 冉翔 -
NetBeans vs Eclipse 最新 ...
喜欢楼上这样的话,自己亲自去用某样东西,才有资格去评价它,否则,只能是人云亦云了
-- by lbfhappy -
NetBeans vs Eclipse 最新 ...
今天用了一下netbean 还有UI设计功能,很好很强大,毫无疑问第一感觉UI响 ...
-- by XMLDB -
NetBeans vs Eclipse 最新 ...
n个人说了VS不占内存速度快之后,证明了有个人就会信口开河.
-- by ray_linn






评论排行榜