如何在Nimbus中更改单个JProgressBar的颜色?

4

我试图改变Nimbus LAF(外观)中单个JProgressBar的颜色。这种解决方案确实有效,但它会改变所有JProgressBars的颜色:/

    UIDefaults defaults = UIManager.getLookAndFeelDefaults();
    defaults.put("nimbusOrange",defaults.get("nimbusBase"));

在这个讨论串中,有另一种解决方案可以为每个JProgressBar分别改变颜色:
    progress = new JProgressBar();
    UIDefaults defaults = new UIDefaults();
    defaults.put("ProgressBar[Enabled].backgroundPainter", new MyPainter());
    progress.putClientProperty("Nimbus.Overrides.InheritDefaults", Boolean.TRUE);
    progress.putClientProperty("Nimbus.Overrides", defaults);

很遗憾,我无法让它工作。我不知道在哪里可以找到"MyPainter()"库。因此,我尝试(不知道我在做什么)用"defaults.get("nimbusBase")"和"Color.red"替换该方法,但也没有成功。

1个回答

4

1. 请问你能指出以下哪一个是

UIManager.put("ProgressBar.background", Color.orange);
UIManager.put("ProgressBar.foreground", Color.blue);
UIManager.put("ProgressBar.selectionBackground", Color.red);
UIManager.put("ProgressBar.selectionForeground", Color.green);

请注意在MetalLookAndFeel中的有效UIDefaults,

2.然后请在Nimbus Defaults中搜索相应的等效项。

3.然后尝试使用逻辑和此Painter覆盖JProgressBar


+1,还有很多关于这个东西的链接我需要学习。我不知道它这么简单 :-) - nIcE cOw
直到你知道在哪里使用标准颜色(XxxRenderer),什么时候使用putNimbusColor(非复合)JComponents,以及对于Compoun和JButtons JComponents,否则这可能是可怕的... - mKorbel
感谢您的快速和有益的回复。现在一切都能正常运行了。:D对于任何未来的读者:如果你的编译器缺少“com.sun.java.swing.Painter.class”和/或“javax.swing.Painter.class”,你可以在这里下载它:http://www.java2s.com/Code/Jar/o/Downloadorgnetbeansswingtabcontroljar.htm - user1430180
@Matthieu 不确定我是否理解正确,在链接的帖子中使用了FillPainter,它只用一种颜色填充可用的矩形,为了更好的外观,需要在Painter中使用GradientPaint。 - mKorbel
1
@mKorbel,抱歉,我在这个主题上进行了太多的搜索,并得到了太多不同的答案,让我感到困惑。看了你的帖子后,现在更清晰了,谢谢! :) - Matthieu

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