我希望在应用程序中为所有的JPanels使用不同的背景颜色。当使用Nimbus外观时,我该如何实现?
我遵循更改颜色主题来更改Nimbus外观中组件的颜色。
这只有时候会随机起作用。如果在更改颜色之前设置了
这里是一些测试代码:
我遵循更改颜色主题来更改Nimbus外观中组件的颜色。
这只有时候会随机起作用。如果在更改颜色之前设置了
PropertyChagneListener
,它只会一次被通知。这里是一些测试代码:
public class RedPanels extends JFrame {
public RedPanels() {
JPanel panel = new JPanel();
add(panel);
setPreferredSize(new Dimension(100, 100));
pack();
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
UIManager.getDefaults().addPropertyChangeListener(
new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent event) {
if (event.getPropertyName().equals("Panel.background")) {
System.out.println("color changed");
}
});
UIManager.put("Panel.background", new Color(255,0,0));
break;
}
}
} catch (Exception e) {
// Nimbus is not available.
}
new RedPanels();
}
});
}
}
Panel.background
添加了一个PropertyChangeListener
,请看我的代码。但是它从未被通知,即使我设置了颜色。 - Jonas