Използвам компонент JProgressBar
заедно с настройките по подразбиране на потребителския интерфейс на Nimbus. Проблемът е, че когато искам ръчно да променя цвета на лентата на прогреса, използвам BasicProgressBarUI
чрез настройка на функцията JProgressBar.setUI()
. Това създава повече проблеми, защото бих искал просто да променя цвета на лентата и изглежда, че губя външния вид по подразбиране на jprogressbar (Граница, цвят на фона изчезва).
Така че мога да задам 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 <= maxValue) {
Runnable runme = new Runnable() {
public void run() {
progressBar.setValue(counter);
}
};
SwingUtilities.invokeLater(runme);
counter++;
try {
Thread.sleep(100);
} catch (Exception ex) {
}
}
}
};
runner.start();
}
});
getContentPane().add(progressBar, BorderLayout.CENTER);
getContentPane().add(start, BorderLayout.WEST);
WindowListener wndCloser = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
addWindowListener(wndCloser);
setVisible(true);
}
public static void main(String[] args) {
new ProgressGenerator();
}
}
UIDefaults
иputClientProperty
за промяна на единJProgressBar
цвят - person David Kroukamp   schedule 17.01.2013Painter
. - person trashgod   schedule 17.01.2013UI
подход е по-добър, но ако го опаковате във ваш собствен персонализиранJProgressBar
клас и пренасочване наsetBackground
иsetForeground
извикването наJProgressBar
къмUI
, което променя цвета... Предполагам, че все пакUIDefault
s са по-добри? - person David Kroukamp   schedule 17.01.2013