【问题标题】:Java Windows UIManagerJava Windows 用户界面管理器
【发布时间】:2016-07-30 00:11:22
【问题描述】:

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

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

【问题讨论】:

    标签: java windows swing user-interface uimanager


    【解决方案1】:

    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 的一些值,它似乎运行良好。也许,你可以做一些小的修改来调整它,但基础应该很好。

    【讨论】:

    • 我以同样的方式创建了 JOptionPane ,这里是我的 UI 代码 gist.github.com/DarkGuardsman/9820dedcfd6dbdfbd4138bf0df3007b9 其余的是封闭源代码,所以我无法分享所有内容。但是,我确实认为这是一个副作用,因为我现在遇到了其他奇怪的错误。例如不会变成透明的 JPanel。
    • 默认的金属外观和感觉在视觉上很糟糕,类似于 windows 2000 图形的线条。这就是为什么我使用 windows 样式,几个文档说支持更改背景颜色。以及切换金属外观和感觉将我的按钮大小调整为小得多。 nadeausoftware.com/articles/2008/11/…
    • :/ 对所有这些 UIManager 段的处理方式有点奇怪,你会期望它们之间有某种程度的一致性。以及更改颜色等基本功能。至于 nimbus,它不是我在 UI 中寻找的东西,它改变了其余 GUI 的所有视觉效果。另外,我需要更改所有密钥条目,因为我听说 nimbus 密钥不同。感谢您的帮助,您的 cmets 很有用
    • 确实,LAF 之间并没有一致性。意图是好的,但实施不是很好。就个人而言,我尝试使用它。搭配经典的LAF,就相当不错了。使用 Nimbus,它相当不错。我从未尝试过 Windows LAF,但我现在不建议这样做 :) 不客气,再见 :)
    【解决方案2】:

    如果您使用的是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 并设置所需的按钮特性。

    【讨论】:

    • 为什么要创建一个新的 UIManger 实例?此外,我还致力于实现我自己的对话框,以防我无法让 UIManager 正常工作。
    • 如果您使用自己的对话框,则不需要 UImanager 实例。
    • 是的,但 UIManager 确实简化了这个过程,如果我能让它工作:)
    • 自从我使用自定义 GUI 以来,将您的解决方案标记为答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    相关资源
    最近更新 更多