有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java Windows UIManager

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

enter image description here

代码:很简单,我打电话给UIManager。getLookAndFeelDefaults()。放置(“Button.background”,buttonColor)和一些其他UI更改。没什么大不了的


共 (2) 个答案

  1. # 1 楼答案

    如果您正在使用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并设置所需的按钮特征

  2. # 2 楼答案

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

    对于标题中的白色背景,您有一种颜色(白色),因此它似乎可以工作。可能是键值中的问题。 如果你想让我们更好地理解,请把它贴出来

    编辑

    看到你的代码后,我明白了你的问题。这是使用的外观和感觉。 您不使用默认的外观(金属)
    也许,你不知道,但所有的外观和感觉在摇摆不平等的出生
    实际上,某些选项和混合选项受某些外观支持,但不受其他外观支持
    如果使用默认的外观,那么兼容性问题应该会少一些
    要知道它是否得到了正确支持,最好的方法是向一些官方文档报告,但关于它的许多信息确实是枯燥的,有错误的,而且不详细

    在您在注释中发布的链接:http://nadeausoftware.com/articles/2008/11/all_ui_defaults_names_common_java_look_and_feels_windows_mac_os_x_and_linux#Button中,表中显示的键并不意味着值存在或可修改,而是只有键存在于LAF中
    每个LAF负责考虑或不考虑键以及更改键相关值的可能性

    我试着用WindowsLAF只设置背景色按钮,它也不起作用。因此,这似乎不是一个副作用,但它看起来更像是缺少对WindowsLAF这一功能的支持

    无论如何,如果你想要一个正式的、漂亮的、更新的、比经典的金属外观更灵活的外观,你可以对Nimbus感兴趣。 Nimbus document
    它是从JavaSE6更新10开始提供的

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