【问题标题】:Set filechooser Colors with Nimbus L&F使用 Nimbus L&F 设置文件选择器颜色
【发布时间】:2013-05-01 22:24:52
【问题描述】:

我在 Nimbus 中使用自定义颜色。经过数小时的搜索,我无法找到如何正确设置 JFileChooser 的背景和前景颜色。

我的(非工作)代码:

UIManager.getLookAndFeelDefaults().put("FileChooser.background", Color.DARK_GRAY);  
UIManager.getLookAndFeelDefaults().put("FileChooser.textForeground", Color.white);  
UIManager.getLookAndFeelDefaults().put("FileChooser.foreground", Color.white);  
UIManager.getLookAndFeelDefaults().put("Label.foreground", Color.white);  

根据Oracle Nimbus defaults,这应该可以,但不能。我也无法在其他任何地方找到答案。

我想改变什么

我希望标签:(查找范围:,文件夹名称:文件类型)显示为白色,浅灰色边框显示为深灰色。

提前致谢:)

更新: 我可以绕道修复一些文本颜色:

UIManager.getLookAndFeelDefaults().put("textForeground", Color.white);
UIManager.getLookAndFeelDefaults().put("Menu.textForeground", Color.white);
UIManager.getLookAndFeelDefaults().put("ToolTip.textForeground", Color.BLACK);
UIManager.getLookAndFeelDefaults().put("List.textForeground", Color.BLACK);
UIManager.getLookAndFeelDefaults().put("TextField.foreground", Color.BLACK);
UIManager.getLookAndFeelDefaults().put("TextArea.foreground", Color.BLACK);
UIManager.getLookAndFeelDefaults().put("EditorPane.foreground", Color.BLACK);

但是,JFileChooser 的框架背景仍然是浅灰色(而所有其他框架/对话框和消息对话框都遵循设置的背景颜色 DarkGray)。

我现在注意到的另一个奇怪的问题是: 弹出菜单尊重JMenuItem 的背景颜色,但忽略前景。 为了说明我的意思,我上传了一个新的IMAGE,我在其中比较了一个“正常”弹出菜单和一个出现在JFileChooser 中的弹出菜单。

【问题讨论】:

标签: java swing look-and-feel jfilechooser uimanager


【解决方案1】:

我有同样的问题,关于更改 JFileChooser 的背景颜色。

我的解决方案 - 新 Painter。我想这对您的目的也很有用。 Constants.APP_BACKGROUND_COLOR 是所需的背景颜色。这是一个代码示例:

UIManager.getLookAndFeelDefaults().put("FileChooser.background", Constants.APP_BACKGROUND_COLOR);

UIManager.getLookAndFeelDefaults().put("FileChooser[Enabled].backgroundPainter",
                    new Painter<JFileChooser>()
                    {
                        @Override
                        public void paint(Graphics2D g, JFileChooser object, int width, int height)
                        {
                            g.setColor(Constants.APP_BACKGROUND_COLOR);
                            g.draw(object.getBounds());

                        }
                    });

【讨论】:

  • 感谢您回答尼古拉。我假设您的代码有效。我找到了解决我的问题的解决方案 - 通过设置 nimbusBase 颜色。我选择了正确的答案,因为它专门设置了我最初在问题中提出的 JFilechooser 的颜色。
【解决方案2】:

您可能想查看http://docs.oracle.com/javase/7/docs/api/javax/swing/plaf/nimbus/NimbusStyle.html 以获取有关覆盖 Nimbus 配色方案的一些有用信息。

使用下面的代码,我之前已经设法更改了 jProgesssBar 的 Nimbus 配色方案。我已经对其进行了一些调整,以便它可能适用于您的 jFileChooser。希望这行得通!

    UIDefaults defaults = new UIDefaults();
    defaults.put("FileChooser.background", Color.DARK_GRAY);
    defaults.put("FileChooser.textForeground", Color.white);

    yourJFileChooser.putClientProperty("Nimbus.Overrides.InheritDefaults", Boolean.TRUE);
    yourJFileChooser.putClientProperty("Nimbus.Overrides", defaults);

【讨论】:

  • 感谢您的快速回复,但遗憾的是这并没有做任何事情 :( 还使用:[code]defaults.put("FileChooser.textForeground", Color.white);[/code] 我不知道为什么这个组件一直玩这么多。但是我可以通过向后安装这匹马来使其处于可用状态。我将默认文本颜色默认 textForeground 设置为白色,并修复了需要黑色的组件将其设置为黑色字体(例如列表)
【解决方案3】:

Nimbus 外观和感觉 UI 默认设置有许多尚未修复的错误。有些工作,如JProgressBarJButton 背景渐变,有些则不行。即使我尝试设置相同的东西。最好自己编写代码而不是使用这些默认值,或者只是等待修复这些错误的更新。

只需使用getComponents() 方法获取JFileChooser 的组件,然后执行此操作即可。

【讨论】:

  • 是的,不是,不是并且(或者只是等待修复这些错误的更新。)等到我们死了.... Swing 处于维护模式,Java8 没有变化
  • 感谢您的回答。当您想要设置背景颜色时,Nimbus 部分是荒谬的。对于 JTabbedPane 选项卡,您需要重写 Paint Method。通过设置基色,我得到了它的工作,它看起来很漂亮。
  • 等待 Java 8,让 Nimbus 成为王者!
【解决方案4】:

感谢大家的回答,并为我迟到的回复道歉,因为我一直忙于其他组件。

我希望我的应用程序有一个在整个应用程序中保持一致的深色主题。对我有用的解决方案很简单:

为 Nimbus 设置默认颜色。

UIManager.put("nimbusBase", Color.DARK_GRAY);

这已经用 JFilechooser 中的菜单完成了技巧。它还修复了 JTabbed Pane 等问题。

我现在需要做的就是修复文本,因为它们在深灰色上是黑色的。

【讨论】:

  • 我选择 Nikola Dragićević 的答案是正确的,因为我没有正确地提出我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-28
  • 2015-03-01
相关资源
最近更新 更多