如何在JOptionPane中更改按钮的背景?

3
我想知道是否有可能更改JOptionPane中按钮的背景颜色。我知道如何使用UIManager更改整个JOptionPane的背景,但现在我想将JOptionPane中的单独的okButton、cancelButton等设置为单独的颜色。如果可以这样做,我该怎么做呢?
感谢您的帮助。

@Blender:我非常确定这个问题是关于Java Swing而不是html/css。 - Tikhon Jelvis
为什么?通常情况下,改变默认设置并不是最好的选择,一致的视觉效果是有原因的,改变它们可能会让用户感到困惑。 - kleopatra
你不需要使用UIManager,因为你可以自己确定JButton。 - Amir
4个回答

7

没有直接的方法可以做到这一点。

但是,如果你真的想尝试一下,那么你需要阅读JOptionPane API,它提供了代码,演示了如何手动创建和显示一个JOptionPane而不使用showXXX方法。

使用这种方法,你现在可以访问实际的JDialog。然后你可以使用Darryl's SwingUtils 来访问各个按钮,然后设置背景。

代码应该像这样:

JButton ok = SwingUtils.getDescendantOfType(JButton.class, dialog, "Text", "Ok");
ok.setBackground(...);

+1. 很高兴听到这个消息。我已经寻找它很长时间了。你知道SwingUtils发布的许可证吗? - Heisenbug
@Heisenbug,"关于"页面上说您可以自由使用代码。 - camickr

4

最简单的方法是创建自己的JDialog并将按钮特性设置为您想要的样子。


3
您可以在showOptionDialog中使用您自己的带有特定属性的按钮。我猜这不是最好的解决方案,但它很简单易用。
JButton button = new JButton("OK");
button.setBackground(Color.BLACK);
button.setForeground(Color.WHITE);
button.addActionListener(new ActionListener() {
   @Override
   public void actionPerformed(ActionEvent actionEvent) {
       JOptionPane.getRootFrame().dispose();
   }
});
JButton[] buttons = { button };
OptionPane.showOptionDialog(null, "Test Message", "Dialog", JOptionPane.OK_OPTION, JOptionPane.INFORMATION_MESSAGE, new ImageIcon(), buttons, buttons[0]);

enter image description here


2
在你的JOptionPane之前添加以下代码行。
UIManager.put("Button.background", Color.white);
JOptionPane.showMessageDialog(null, "Project, Please");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接