Java Windows UIManager

Java Windows UIManager

我正在尝试使用 java 中的 UIManager 使我所有的弹出 GUIs 和错误 GUIs 使用相同的颜色.问题是我似乎无法在使用 windows 样式时更改按钮颜色,而且我无法设法更改 GUIs 标题栏。

代码:它相当简单,我正在调用 UIManager.getLookAndFeelDefaults().put("Button.background", buttonColor) 和其他一些 UI 更改。没什么大不了的...

如果您正在使用 JOptionPane,

您可以更改使用此格式的标题以使用您自己的标题。

JOptionPane.showMessageDialog(null, "This is the message", "This is the title", JOptionPane.YES_NO_OPTION);

设置对话框的背景颜色-

UIManager UI=new UIManager();
UI.put("OptionPane.background", Color.white);
UI.put("Panel.background", Color.white);
JOptionPane.showMessageDialog(null,"Text","SetColor",JOptionPane.YES_NO_OPTION);

要更改对话框中的按钮或其他所有内容,请创建您自己的 JDialog 并设置您想要的按钮特性。

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);
    }
}

对于标题中的白色背景,你有一个颜色(白色),所以它似乎可行。也许,一个 key-value 中的问题。 Post如果你想让我们更好地理解,请。

编辑

看了你的代码,我明白了你的问题。这是使用的外观。 您不使用默认外观(金属)。
您可能不知道,但 Swing 中的所有外观和感觉并非天生相同。
实际上,某些选项和 mix-options 受某些外观支持,但其他外观不支持。
如果您使用默认的外观和感觉,您应该有较少的兼容性问题。
了解它是否正确支持的最好方法是向一些官方文档报告,但确实有很多关于它的信息是枯燥的,有错误的,而且不详细

在您发表评论的 link 中: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 起可用。

我同意你的看法,金属很丑。但是为什么不使用 nimbus 而不是 windows LAF 呢?这很棒。我试过你的代码,它用 Nimbus 修改了 lAF 的一些值,它看起来工作得很好。也许,你可以做一些小的修改来调整它,但基础应该很好。