在Nimbus主题中更改ProgressBar Swing的UI查找 [英] Change UI Lookup for ProgressBar Swing in Nimbus Theme

查看:142
本文介绍了在Nimbus主题中更改ProgressBar Swing的UI查找的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在NetBeans中为Nimbus UI将Default-Orange的颜色从Default-Orange更改为Green。

I want to change Color of Progressbar from Default-Orange to Green for Nimbus UI in NetBeans.

我添加了以下行

for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    UIDefaults defaults= UIManager.getDefaults();

                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    UIManager.getLookAndFeelDefaults().put("ProgressBar[Enabled+Finished].foregroundPainter", Color.GREEN);
                    UIManager.getLookAndFeelDefaults().put("ProgressBar[Enabled+Finished].backgroundPainter", Color.GREEN);
                    break;
                }
            }

这不做任何更改。对代码或任何其他变通方法的任何更正?

This doesn't make any changes. Any correction to code or any other workarounds?

推荐答案

Nimbus不像其他外观那样运行(对我们来说是这样)。

Nimbus doesn't operate like other look and feels (yea for us).

通常你应该使用 ColorUIResource ,但是Nimbus更喜欢使用 Painter s,例如......

Normally you should be using a ColorUIResource, but Nimbus prefers the use of Painters, for example...

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.RenderingHints;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.Painter;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.plaf.ColorUIResource;

public class TestNimbus {

    public static void main(String[] args) {
        new TestNimbus();
    }

    public TestNimbus() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");

                    ProgressPainter painter = new ProgressPainter(Color.WHITE, Color.GREEN);
                    UIManager.getLookAndFeelDefaults().put("ProgressBar[Enabled+Finished].foregroundPainter", painter);
                    //UIManager.getLookAndFeelDefaults().put("ProgressBar[Enabled+Finished].backgroundPainter", painter);
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new GridBagLayout());
                GridBagConstraints gbc = new GridBagConstraints();
                gbc.gridwidth = GridBagConstraints.REMAINDER;

                JProgressBar pb = new JProgressBar();
                frame.add(pb, gbc);

                pb = new JProgressBar();
                pb.setValue(50);
                frame.add(pb, gbc);

                pb = new JProgressBar();
                pb.setValue(100);
                frame.add(pb, gbc);

                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class ProgressPainter implements Painter {

        private Color light, dark;
        private GradientPaint gradPaint;

        public ProgressPainter(Color light, Color dark) {
            this.light = light;
            this.dark = dark;
        }

        @Override
        public void paint(Graphics2D g, Object c, int w, int h) {
            g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            gradPaint = new GradientPaint((w / 2.0f), 0, light, (w / 2.0f), (h / 2.0f), dark, true);
            g.setPaint(gradPaint);
            g.fillRect(2, 2, (w - 5), (h - 5));

            Color outline = new Color(0, 85, 0);
            g.setColor(outline);
            g.drawRect(2, 2, (w - 5), (h - 5));
            Color trans = new Color(outline.getRed(), outline.getGreen(), outline.getBlue(), 100);
            g.setColor(trans);
            g.drawRect(1, 1, (w - 3), (h - 3));
        }
    }
}

我偷了画家<一个href =https://stackoverflow.com/questions/11672093/custom-painter-on-jprogressbar> JProgressBar上的自定义画家,所以可以信用

I stole the painter from Custom Painter on JProgressBar, so credit there

这篇关于在Nimbus主题中更改ProgressBar Swing的UI查找的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆