问题
I know this question has been answered before, but it's just not working for me. I followed the instructions from here: How to change JProgressBar color?
import javax.swing.*;
import java.awt.*;
public class ProgressBarTest extends JFrame {
public static void main(String args[]) {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
UIManager.put("ProgressBar.background", Color.orange);
UIManager.put("ProgressBar.foreground", Color.black);
UIManager.put("ProgressBar.selectionBackground", Color.red);
UIManager.put("ProgressBar.selectionForeground", Color.green);
JProgressBar progressBar = new JProgressBar(0,100);
progressBar.setValue(50);
f.add(progressBar, BorderLayout.PAGE_END);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
All I am getting is the same old colors.
I'm using Mac OS X 10.7.3 and Java 1.6. I tried the CrossPlatformLookAndFeel and it works with the new colors. However I want this in the default look and feel. How can I do this?
回答1:
To override Look & Feel defaults, make the change before constructing the GUI on the event dispatch thread, as shown below.
On the com.apple.laf.AquaLookAndFeel, the progress bar's UI delegate is an instance of com.apple.laf.AquaProgressBarUI. As you have found, it ignores many defaults in favor of the native component. If a novel color scheme is required, consider supplying your own UI delegate, as shown here.
AquaProgressBarUI:
CustomProgressUI:
ProgressBar UI Defaults:
ProgressBar.background: com.apple.laf.AquaNativeResources$CColorPaintUIResource[r=238,g=238,b=238] ProgressBar.border: javax.swing.plaf.BorderUIResource@47f08ed8 ProgressBar.cellLength: 1 ProgressBar.cellSpacing: 0 ProgressBar.cycleTime: 3000 ProgressBar.font: sun.swing.SwingLazyValue@6446d228 ProgressBar.foreground: javax.swing.plaf.ColorUIResource[r=0,g=0,b=0] ProgressBar.horizontalSize: javax.swing.plaf.DimensionUIResource[width=146,height=12] ProgressBar.repaintInterval: 20 ProgressBar.selectionBackground: javax.swing.plaf.ColorUIResource[r=255,g=255,b=255] ProgressBar.selectionForeground: javax.swing.plaf.ColorUIResource[r=0,g=0,b=0] ProgressBar.verticalSize: javax.swing.plaf.DimensionUIResource[width=12,height=146] ProgressBarUI: com.apple.laf.AquaProgressBarUI
SSCCE:
import java.awt.*;
import javax.swing.*;
public class ProgressBarTest extends JFrame {
public static void main(String args[]) {
UIManager.put("ProgressBar.repaintInterval", 100);
UIManager.put("ProgressBar.border",
BorderFactory.createLineBorder(Color.blue, 2));
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame();
f.setLayout(new GridLayout(0, 1, 5 , 5));
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(createBar());
f.add(createBar());
f.add(createBar());
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
private JProgressBar createBar() {
JProgressBar progressBar = new JProgressBar(0, 100);
progressBar.setValue(50);
return progressBar;
}
});
}
}
来源:https://stackoverflow.com/questions/11148120/cant-change-jprogressbar-color-in-mac-os-look-and-feel