java的外观和主要

时间:2010-12-11 08:07:30

标签: java look-and-feel

如果我在单击按钮后在actionPerfomed中使用java外观,则效果更改无法正常工作,而只是稍微改变。

但是,如果我在main上使用相同的代码,它就能正常工作。

对此有什么解决方法?

1 个答案:

答案 0 :(得分:3)

在布局gui之前更改外观时,所有GUI组件都知道如何绘制自己。如果在以后更改它,则需要更新UI树以使更改传播到所有组件:

UIManager.setLookAndFeel(lnfName);
SwingUtilities.updateComponentTreeUI(frame);
frame.pack();

请参阅java documentation了解相关信息。

这是一个简单的例子,可以在按下按钮时改变外观:

public static void main(String[] args) {

    final JFrame frame = new JFrame("Test");

    frame.add(new JButton(new AbstractAction("Press to change") {

        int current = 0;

        @Override
        public void actionPerformed(ActionEvent e) {

            LookAndFeelInfo[] lafs = UIManager.getInstalledLookAndFeels();
            LookAndFeelInfo laf = lafs[current++ % lafs.length];

            try {
                UIManager.setLookAndFeel(laf.getClassName());
                SwingUtilities.updateComponentTreeUI(frame);
                frame.pack();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }));

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
}

如果您不想pack frame(更改其大小),请改为拨打repaint