在应用程序运行时更改 LookAndFeel

问题描述 投票:0回答:2

我想通过单击按钮来更改 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);
}

但是没有成功。有没有办法做到这一点,或者根本不可能?

java swing look-and-feel
2个回答
1
投票

更改 UI 后使用

SwingUtilities.updateComponentTreeUI(frame)
更新 UI 树。这应该更新框架及其所有组件


0
投票

如果您使用 FlatLaf(绝佳选择!),您可以在更改外观和感觉后调用

FlatLaf.updateUI();
来更新 UI。这就是 FlatLaf 演示用来切换外观和感觉的方法:

https://github.com/JFormDesigner/FlatLaf/blob/61ba011c3ba2404f7e58d324b18cede1e26c6378/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/ControlBar.java#L226

© www.soinside.com 2019 - 2024. All rights reserved.