在 Java 中使用 Nimbus L&F 感觉时,我在多次更改 JButton 的背景颜色时遇到了问题。在下面的代码中,我有一个简单的 Swing 应用程序,它显示一个 JButton 并尝试每秒更改一次颜色。但是,仅应用了第一种颜色。任何人都可以就如何多次进行此更改提供任何建议吗?我正在运行 java 6.29。
public class NimbusTest3 extends JFrame {
private javax.swing.JButton button;
public NimbusTest3(){
button = new javax.swing.JButton();
button.setText("Text");
this.add(button, BorderLayout.CENTER);
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
this.pack();
Timer t = new Timer(1000, new ActionListener() {
Random r = new Random();
@Override
public void actionPerformed(ActionEvent e) {
UIDefaults buttonDefaults = UIManager.getLookAndFeelDefaults();
Color c = new Color(r.nextInt(
256), r.nextInt(256), r.nextInt(256));
System.out.println(c);
buttonDefaults.put("Button.background", c);
button.putClientProperty("Nimbus.Overrides", buttonDefaults);
button.putClientProperty("Nimbus.Overrides.InheritDefaults", false);
SwingUtilities.updateComponentTreeUI(button);
button.repaint();
}
});
t.start();
}
public static void main(String args[]) {
try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (Exception e) {
return;
}
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new NimbusTest3().setVisible(true);
}
});
}
}