在Nimbus LaF中更改JButton的默认键值 [英] Changing the defauls key values for JButton in Nimbus LaF

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

问题描述

我的程序中有两个按钮

JButton button1 = new JButton();
button1.setText("First Button");
JButton button2 = new JButton("Second Button");

我尝试更改按钮的LaF,我可以使用以下代码更改按钮背景颜色

I have tried to change the LaF of the button, I am able to change the button background color using the following code

UIManager.put(Button.background new color(134,201,236));

但是当我尝试更改其他键值(例如"Button.disabled""Button[Default+Focused+Pressed].backgroundPainter")时,该代码对我不起作用. 有人可以帮助我如何更改使用Painter的默认键值吗?

But when i tried to change the other key values like "Button.disabled", "Button[Default+Focused+Pressed].backgroundPainter" the code did not work for me. Could someone help me how to change the default key values which uses Painter?

推荐答案

一定要爱Nimbus.

Gotta love Nimbus.

好的,首先,您要保持这些值接近...

Okay to start with, you're going to want to keep these values close...

Button.background = DerivedColor(color=214,217,223 parent=control offsets=0.0,0.0,0.0,0 pColor=214,217,223
Button.contentMargins = javax.swing.plaf.InsetsUIResource[top=6,left=14,bottom=6,right=14]
Button.defaultButtonFollowsFocus = false
Button.disabled = DerivedColor(color=214,217,223 parent=control offsets=0.0,0.0,0.0,0 pColor=214,217,223
Button.disabledText = DerivedColor(color=142,143,145 parent=nimbusDisabledText offsets=0.0,0.0,0.0,0 pColor=142,143,145
Button.focusInputMap = javax.swing.plaf.InputMapUIResource@70e4bd3a
Button.font = javax.swing.plaf.FontUIResource[family=SansSerif,name=sansserif,style=plain,size=12]
Button.foreground = DerivedColor(color=0,0,0 parent=text offsets=0.0,0.0,0.0,0 pColor=0,0,0
ButtonUI = javax.swing.plaf.synth.SynthLookAndFeel
Button[Default+Focused+MouseOver].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@3e5d2085
Button[Default+Focused+Pressed].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@78662669
Button[Default+Focused].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@2988e80b
Button[Default+MouseOver].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@7c508d6d
Button[Default+Pressed].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@2b5ec36a
Button[Default+Pressed].textForeground = DerivedColor(color=255,255,255 parent=nimbusSelectedText offsets=0.0,0.0,0.0,0 pColor=255,255,255
Button[Default].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@62c2ed06
Button[Disabled].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@c6499e5
Button[Disabled].textForeground = DerivedColor(color=142,143,145 parent=nimbusDisabledText offsets=0.0,0.0,0.0,0 pColor=142,143,145
Button[Enabled].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@742746e1
Button[Focused+MouseOver].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@293f9e9c
Button[Focused+Pressed].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@5ce0ec60
Button[Focused].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@7463fda8
Button[MouseOver].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@3a3dad8b
Button[Pressed].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@6f231f2e

这些基本上是Nimbus用来绘制标准按钮的默认键/值...

These are basically the default key/values used by Nimbus to paint a standard button...

基本上,您要做的就是提供自己的Painter,例如...

Basically, what you have to do is provide your own Painter, for example...

public class ButtonPainter implements Painter {

    private Color light, dark;
    private GradientPaint gradPaint;

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

    @Override
    public void paint(Graphics2D g, Object c, int w, int h) {
        System.out.println("...");
        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));
    }
}

然后替换UIManager

UIManager.getLookAndFeelDefaults().put("Button[Enabled].backgroundPainter", new ButtonPainter(Color.YELLOW, Color.RED));
UIManager.getLookAndFeelDefaults().put("Button[Focused].backgroundPainter", new ButtonPainter(Color.YELLOW, Color.RED));

例如...

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.GridBagLayout;
import java.awt.RenderingHints;
import javax.swing.JButton;
import javax.swing.JFrame;
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");
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                System.out.println(UIManager.get("Button[Default+Focused].backgroundPainter"));

                UIManager.getLookAndFeelDefaults().put("Button[Enabled].backgroundPainter", new ButtonPainter(Color.YELLOW, Color.RED));
                UIManager.getLookAndFeelDefaults().put("Button[Focused].backgroundPainter", new ButtonPainter(Color.YELLOW, Color.RED));

                System.out.println(UIManager.get("Button[Default+Focused].backgroundPainter"));


                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new GridBagLayout());
                frame.add(new JButton("First Button"));
                frame.add(new JButton("Second Button"));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class ButtonPainter implements Painter {

        private Color light, dark;
        private GradientPaint gradPaint;

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

        @Override
        public void paint(Graphics2D g, Object c, int w, int h) {
            System.out.println("...");
            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));
        }
    }

}

这是全局更改,因此所有按钮都将受到此更改的影响.我相信有一种方法可以做到,只有要更改的控件才会受到影响,但是您需要自己进行更多研究;)

This is a global change, so all buttons will be affected by this change. I believe there's a way to do so only those controls you want to change can be affected, but you will need to do some more research into that yourself ;)

这篇关于在Nimbus LaF中更改JButton的默认键值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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