我想通过单击按钮来更改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);
}
字符串
但是没有用。有没有办法做到这一点,或者根本不可能?
2条答案
按热度按时间v8wbuo2f1#
在更改UI后使用
SwingUtilities.updateComponentTreeUI(frame)
更新UI树。这将更新框架及其所有组件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,所有窗口都必须更新:
字符串