JProgressBar Динамическое изменение цвета бара

я используюJProgressBar компонент вместе с настройками Nimbus UI по умолчанию. Проблема в том, что когда я хочу вручную изменить каждый индикаторЦвет бара, я используюBasicProgressBarUI установивJProgressBar.setUI() функция. Это создает больше проблем, потому что я хотел бы просто изменить цвет панели, и кажется, что я теряю внешний вид jprogressbar по умолчанию (Border, backgroundcolor исчезает).

Так что я могу установитьUIDefaults Nimbus ProgressBar, когда код инициализируется. Оно работает.

Но я хочу изменить каждый индикаторЦвет полоски динамически.

Есть ли другой способ изменить цвет бара?JProgressBar

public class ProgressGenerator extends JFrame {

    protected int minValue = 0;
    protected int maxValue = 100;
    protected int counter = 0;
    protected JProgressBar progressBar;

    public ProgressGenerator() {
        super("JProgressBar Demo");
        setSize(300, 100);

        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (ClassNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (InstantiationException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IllegalAccessException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (UnsupportedLookAndFeelException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        progressBar = new JProgressBar();
        progressBar.setMinimum(minValue);
        progressBar.setMaximum(maxValue);
        progressBar.setStringPainted(true);

        progressBar.setForeground(Color.GREEN);

        JButton start = new JButton("Start");
        start.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Thread runner = new Thread() {
                    public void run() {
                        counter = minValue;
                        while (counter 

Ответы на вопрос(2)

Ваш ответ на вопрос