Глядя на исходный код, то это не будет легко.
Цвет хранится в BasicProgressBarUI
класса:
- В конструкторе цвет извлекается из
UIManager
с использованием статического метода. Статический метод означает, что вы не можете перезаписать вызов.
- Цвета хранятся как частные поля, а класс раскрывает только защищенные геттеры, нет сеттеров. Никакие сеттеры не означает, что вы не можете называть это извне.
ProgressBarUI
экземпляр, который используется для JProgressBar
является производным от UIManager
(UIManager#getUI
), что опять-таки статический метод.
Это оставляет нам не так много вариантов. То, что я думаю, что это жизнеспособный один заключается в использовании JProgressBar#setUI
метод:
- Это позволяет Вам создать свой собственный экземпляр пользовательского интерфейса
- Это позволяет переопределить защищенные добытчиками
Главный недостаток этого подхода заключается в том, что он требует, чтобы вы знали фронт, который будет выглядеть и чувствовать ваше приложение. Например, если приложение использует металл, это станет
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% довольны этим решением в связи с главным недостатком того, чтобы знать вид и ощущение вверх-вперед.
Вы должны соблюдать осторожность и внешний вид, который вы используете! (Разные взгляды и ощущения означают разные реакции .. После того, как вы установили бар StringPainted() .. и .setForeground (цвет. (Ваш выбор), если вы не видите реакции use barname.setOpaque (true); – crAlexander