Java 改变观感

来源:互联网 发布:阿里短信平台 php 编辑:程序博客网 时间:2024/05/21 09:35

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

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

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

  提示:由于属性文件中以#字符开始的行被忽略,所以,可以在swing.properties文件中提供几种观感选择,并通过增删#字符来切换选择

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

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

  完整示例,演示如何切换观感方式: 

import java.awt.EventQueue;import java.awt.event.*;import javax.swing.*;public class PlafTest {    public static void main(String[] args) {        EventQueue.invokeLater(new Runnable() {            @Override            public void run() {                PlafFrame frame = new PlafFrame();                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                frame.setVisible(true);            }        });    }}final class PlafFrame extends JFrame {    public PlafFrame() {        setTitle("PlafTest");        setSize(DEFAULT_WIDTH, DEFALUT_HEIGHT);        buttonPanel = new JPanel();        UIManager.LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels();        for (UIManager.LookAndFeelInfo info : infos) {            makeButton(info.getName() + "-" + info.getClassName(), info.getClassName());        }        add(buttonPanel);    }    void makeButton(String name, final String plafName) {        // add button to panel        JButton button = new JButton(name);        buttonPanel.add(button);        // set button action        button.addActionListener(new ActionListener() {            @Override            public void actionPerformed(ActionEvent event) {            // button action: switch to the new look and feel                try {                    UIManager.setLookAndFeel(plafName);                    SwingUtilities.updateComponentTreeUI(PlafFrame.this);                } catch (Exception e) {                    e.printStackTrace();                }            }        });    }    private JPanel buttonPanel;    public static final int DEFAULT_WIDTH = 300;    public static final int DEFALUT_HEIGHT = 200;}

  演示结果:

  Metal:

Nimbus:

CDE/Motif:

Windows:

Windows Classic:

原创粉丝点击