UIManager.getLookAndFeelDefaults().put("Button.background", buttonColor)
对于 JOptionPane 对话框中按钮的颜色,我不明白为什么它不起作用。它应该。也许是副作用。我们没有看到您的所有代码。
试试这个简单的代码,你应该只会看到绿色的按钮。
package swing.uimanager;
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
public class JFrameWithUIManger extends JFrame {
public static void main(String[] args) {
new JFrameWithUIManger();
}
public JFrameWithUIManger() {
final UIDefaults lookAndFeelDefaults = UIManager.getLookAndFeelDefaults();
lookAndFeelDefaults.put("Button.background", Color.GREEN);
add(new JButton("A button"));
pack();
setVisible(true);
JOptionPane.showMessageDialog(this, "hello I am a message dialog");
JOptionPane.showConfirmDialog(this, "hello I am a question dialog", "do you like me ?", JOptionPane.YES_NO_OPTION);
}
}
对于标题中的白色背景,你有一个颜色(白色),所以它似乎工作。也许,键值有问题。
如果您希望我们更好地理解,请发布。
编辑
看到你的代码后,我明白了你的问题。这是使用的外观和感觉。
您不使用默认的外观和感觉(金属)。
可能,您不知道,但 Swing 中的所有外观和感觉并不是天生的。
实际上,某些外观和感觉支持某些选项和混合选项,但其他外观不支持。
如果你使用默认的观感,你应该有更少的兼容性问题。
了解它是否正确支持的最好方法是向一些官方文档报告,但确实有很多关于它的信息是枯燥的,有错误的,而且不详细
在您在评论中发布的链接:http://nadeausoftware.com/articles/2008/11/all_ui_defaults_names_common_java_look_and_feels_windows_mac_os_x_and_linux#Button 中,表中显示的键并不意味着值存在或可修改,而是仅表示 LAF 中存在键。
每个 LAF 负责考虑或不考虑密钥以及更改与密钥关联的值的可能性。
我尝试使用 Windows LAF 仅设置背景颜色按钮,它也不起作用。因此,这似乎不是副作用,但它看起来更像是缺少对 Windows LAF 的此功能的支持。
无论如何,如果您想要比经典金属外观和感觉更正式、美观、更新、更灵活的外观和感觉,您可以对 Nimbus 感兴趣。
Nimbus document
它从 Java SE 6 Update 10 开始可用。
我同意你的观点,Metal 很丑。但是为什么不使用 nimbus 而不是 windows LAF 呢?这很棒。我尝试了您的代码,它使用 Nimbus 修改了 lAF 的一些值,它似乎运行良好。也许,你可以做一些小的修改来调整它,但基础应该很好。