gpt4 book ai didi

java - UIManager 仅更改颜色一次 (Nimbus)

转载 作者:行者123 更新时间:2023-12-02 07:21:34 27 4
gpt4 key购买 nike

引用这个错误:

4848910 : UIManager only updates colors once

我的 JFrame 上有两个按钮。从第一个按钮开始,我将 LAF 颜色更改为

UIManager.put( "Button.background", new ColorUIResource(Color.red) );
SwingUtilities.updateComponentTreeUI( this.getContentPane() );

在第二个按钮上,我正在使用

更改 LAF 颜色
UIManager.put( "Button.background", new ColorUIResource(Color.green) );
SwingUtilities.updateComponentTreeUI( this.getContentPane() );

这里我使用 ColorUIResource (如错误解决方案所述),但我的问题仍然与所引用的错误中描述的相同。即,当第一次单击任何按钮时,UIManager 会更改颜色,但在后续单击时不会更改颜色。

我错过了什么吗?任何帮助将不胜感激。

最佳答案

代码

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.LookAndFeel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.UnsupportedLookAndFeelException;

public class NimbusTestButtonsBackground extends JFrame {

private static final long serialVersionUID = 1L;
private javax.swing.JButton button;

public NimbusTestButtonsBackground() {
button = new javax.swing.JButton();
button.setText("Text");
add(button);
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
this.pack();
Timer t = new Timer(1000, new ActionListener() {

private Random r = new Random();

@Override
public void actionPerformed(ActionEvent e) {
Color c = new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256));
try {
LookAndFeel lnf = UIManager.getLookAndFeel().getClass().newInstance();
UIDefaults uiDefaults = lnf.getDefaults();
uiDefaults.put("nimbusBase", c);
UIManager.getLookAndFeel().uninitialize();
UIManager.setLookAndFeel(lnf);
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}
UIDefaults defaults = UIManager.getDefaults();
defaults.put("Button.background", c);
SwingUtilities.updateComponentTreeUI(button);
}
});
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 NimbusTestButtonsBackground().setVisible(true);
}
});
}
}

关于java - UIManager 仅更改颜色一次 (Nimbus),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14155284/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com