【问题标题】:Change colors for JProgressBar with Nimbus?使用 Nimbus 更改 JProgressBar 的颜色?
【发布时间】:2011-11-02 17:12:30
【问题描述】:

有谁知道当您使用 Nimbus LookAndFeel 时如何更改 JProgressBar 的颜色?

【问题讨论】:

标签: java swing colors jprogressbar nimbus


【解决方案1】:

MyPainter 的示例如下:

class MyPainter implements Painter<JProgressBar> {

    private final Color color;

    public MyPainter(Color c1) {
        this.color = c1;
    }
    @Override
    public void paint(Graphics2D gd, JProgressBar t, int width, int height) {
        gd.setColor(color);
        gd.fillRect(0, 0, width, height);
    }
}

但是我的编译器或 IDE (eclipse) 说它不知道 Painter。 有没有人可以帮帮我!

【讨论】:

  • 我们必须先添加这个import com.sun.java.swing.Painter;如果我们有错误这样做: 1-转到项目属性中的构建路径设置。 2-删除 JRE 系统库。 3-添加回来;选择“添加库”并选择 JRE 系统库。
【解决方案2】:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class JProgressBarDemo extends JFrame {
    protected int minValue = 0;
    protected int maxValue = 100;
    protected int counter = 0;
    protected JProgressBar progressBar;

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

        UIManager.put("ProgressBar.background", Color.BLACK); //colour of the background
        UIManager.put("ProgressBar.foreground", Color.RED); //colour of progress bar
        UIManager.put("ProgressBar.selectionBackground",Color.YELLOW); //colour of percentage counter on black background
        UIManager.put("ProgressBar.selectionForeground",Color.BLUE); //colour of precentage counter on red background

        progressBar = new JProgressBar();
        progressBar.setMinimum(minValue);
        progressBar.setMaximum(maxValue);
        progressBar.setStringPainted(true);
        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 JProgressBarDemo();
    }
}

【讨论】:

    【解决方案3】:

    我已经覆盖了整个 nimbusOrange-Default 值,这会更改所有 ProgressBar-Colors 和任何其他 nimbusOrange(InternalFrame - 最小化按钮)
    这里有nimbusBase(蓝色)

    UIDefaults defaults = UIManager.getLookAndFeelDefaults();
    defaults.put("nimbusOrange",defaults.get("nimbusBase"));
    

    最好自己写一个 Painter 并将其设置为 UIManager via

    UIManager.put("ProgressBar[Enabled].backgroundPainter", myPainter);
    

    如果您只想更改单个 ProgressBar 实例的颜色,可以使用Per-component customization

    progress = new JProgressBar();
    UIDefaults defaults = new UIDefaults();
    defaults.put("ProgressBar[Enabled].backgroundPainter", new MyPainter());
    progress.putClientProperty("Nimbus.Overrides.InheritDefaults", Boolean.TRUE);
    progress.putClientProperty("Nimbus.Overrides", defaults);
    

    【讨论】:

    • 这对我来说是新的......每个组件的默认值。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多