Java 设置JProgressBar文本颜色
我有一个叫做playerhealth的JProgressBar。我把吧台的颜色改成绿色。这使得文本很难看到,因此我想将JProgressBar中文本的颜色设置为黑色 我了解到可以使用UIManager设置JProgressBars的全局颜色,但我只想为这一个(和另一个,但这并不重要)Java 设置JProgressBar文本颜色,java,swing,colors,jprogressbar,Java,Swing,Colors,Jprogressbar,我有一个叫做playerhealth的JProgressBar。我把吧台的颜色改成绿色。这使得文本很难看到,因此我想将JProgressBar中文本的颜色设置为黑色 我了解到可以使用UIManager设置JProgressBars的全局颜色,但我只想为这一个(和另一个,但这并不重要) 我还了解到,我唯一的其他选择是修改JProgressBar类。我该怎么办 您可以将SetStringPaint属性设置为true: progressBar.setStringPainted(true); progr
我还了解到,我唯一的其他选择是修改JProgressBar类。我该怎么办 您可以将SetStringPaint属性设置为true:
progressBar.setStringPainted(true);
progressBar.setForeground(Color.blue);
progressBar.setString("10%");
看看源代码,这并不容易 颜色存储在
BasicProgressBarUI
类中:
- 在构造函数中,使用静态方法从
检索颜色。静态方法意味着您无法覆盖调用UIManager
- 颜色存储为私有字段,该类只公开受保护的getter,不公开setter。没有setters意味着你不能在外部调用它
JProgressBar
的ProgressBarUI
实例源自UIManager
(UIManager#getUI
),这也是一种静态方法
这让我们没有那么多选择。我认为可行的方法是使用JProgressBar#setUI
方法:
- 这允许您创建自己的UI实例
- 这允许覆盖受保护的getter
JProgressBar progressBar = ... ;
ProgressBarUI ui = new MetalProgressBarUI(){
/**
* The "selectionForeground" is the color of the text when it is painted
* over a filled area of the progress bar.
*/
@Override
protected Color getSelectionForeground() {
//return your custom color here
}
/**
* The "selectionBackground" is the color of the text when it is painted
* over an unfilled area of the progress bar.
*/
@Override
protected Color getSelectionBackground()
//return your custom color here
}
}
progressBar.setUI( ui );
由于必须事先了解外观和感觉这一主要缺点,您对该解决方案不是100%满意。您必须小心使用您的外观和感觉!(不同的外观意味着不同的反应..在设置StringPaint()和.setForeground(颜色)(由您选择)条后,如果看不到反应,请使用barname.setO乳(true);我不确定look and feel的作用是什么。如果我还没有真正使用它,它会改变什么吗?您拥有/使用look and feel,无论您是否想要它。是look and feel定义了组件的外观SetString绘制属性决定了字符串是否会出现在进度条上,而不是strin是否会出现g被涂成不同的颜色。