Вертикальный индикатор выполнения имеет странный фон, который не изменяется

Индикатор выполнения создается с помощью следующего кода

bar = new JProgressBar(JProgressBar.VERTICAL);
 bar.setEnabled(true);
 bar.setBackground(Color.YELLOW);
 bar.setForeground(Color.GREEN);
 bar.setStringPainted(true); 
 getReflectedComponent().setLayout(new BorderLayout());
 getReflectedComponent().add(bar, BorderLayout.CENTER);

Обратите внимание, что getReflectedComponent() возвращает JComponent. В другом методе отображается отображаемое значение String max и текущее значение, а не больше.

Я действительно не знаю, почему эти очень странные серые полосы отображаются наверху. Если я показываю индикатор выполнения горизонтально, их там нет...

2 ответа

Я не вижу вашей проблемы с вашим кодом, поэтому он должен происходить из чего-то другого, что вы не показываете нам (еще один аргумент для обеспечения SSCCE)

Вот пример, чтобы начать работу:

import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
public class TestScrollbars {
 protected void initUI() {
 final JFrame frame = new JFrame();
 frame.setTitle(TestScrollbars.class.getSimpleName());
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 JProgressBar bar = new JProgressBar(JProgressBar.VERTICAL);
 bar.setEnabled(true);
 bar.setBackground(Color.YELLOW);
 bar.setForeground(Color.GREEN);
 bar.setStringPainted(true);
 bar.setString("2000 g");
 bar.setValue(65);
 frame.setLayout(new BorderLayout());
 frame.add(bar, BorderLayout.CENTER);
 frame.setSize(500, 400);
 frame.setVisible(true);
 }
 public static void main(String[] args) {
 SwingUtilities.invokeLater(new Runnable() {
 @Override
 public void run() {
 new TestScrollbars().initUI();
 }
 });
 }
}

И полученное изображение (где индикатор выполнения правильно отображает выбранные цвета):


Также рассмотрите пользовательский ProgressBarUI, упомянутый здесь и показан здесь.

licensed under cc by-sa 3.0 with attribution.