java 在应用程序运行时更改LookAndFeel

yhuiod9q  于 2023-11-15  发布在  Java
关注(0)|答案(2)|浏览(154)

我想通过单击按钮来更改LookAndFeel

public static void main(String[] args) {
    FlatDarculaLaf.setup();

    try {
        UIManager.setLookAndFeel(new FlatDarculaLaf());
    } catch (Exception e) {
        e.printStackTrace();
    }

    JFrame frame = new JFrame("Test");
    frame.setLayout(new FlowLayout());

    JButton b = new JButton("Click");
    b.setSize(10, 5);
    b.addActionListener(e -> {
        FlatLightLaf.setup();
        try {
            UIManager.setLookAndFeel(new FlatLightLaf());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    });

    frame.getContentPane().add(b);

    frame.setVisible(true);
    frame.setBounds(0, 0, 1200, 600);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

字符串
但是没有用。有没有办法做到这一点,或者根本不可能?

v8wbuo2f

v8wbuo2f1#

在更改UI后使用SwingUtilities.updateComponentTreeUI(frame)更新UI树。这将更新框架及其所有组件

fumotvh3

fumotvh32#

如果你使用FlatLaf(非常好的选择!),你可以在改变外观后调用FlatLaf.updateUI();来更新UI。这就是FlatLaf演示如何切换外观:
https://github.com/JFormDesigner/FlatLaf/blob/61ba011c3ba2404f7e58d324b18cede1e26c6378/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/ControlBar.java#L226
如果没有FlatLaf,所有窗口都必须更新:

for (Window window : Window.getWindows()) {
    SwingUtilities.updateComponentTreeUI(window);
}

字符串

相关问题