Java 使用不同的渐变重新绘制swing按钮

Java 使用不同的渐变重新绘制swing按钮,java,swing,jbutton,Java,Swing,Jbutton,如何在单击JButton时使用不同的渐变重新绘制它。我已经重写了paintComponent(Graphics)方法来进行初始绘制。Onclick我想重新绘制它,但我不希望用户在actionperformed事件中这样做,因为我希望它是一个独立的组件 任何关于如何实现这一目标的想法 谢谢最简单的方法是使用,但您也可以在委托中重写paint(),如图所示。最简单的方法是使用,但您也可以在委托中重写paint(),如图所示。和另一个有趣的示例: import java.util.List; impo

如何在单击JButton时使用不同的渐变重新绘制它。我已经重写了paintComponent(Graphics)方法来进行初始绘制。Onclick我想重新绘制它,但我不希望用户在actionperformed事件中这样做,因为我希望它是一个独立的组件

任何关于如何实现这一目标的想法


谢谢

最简单的方法是使用,但您也可以在委托中重写
paint()
,如图所示。

最简单的方法是使用,但您也可以在委托中重写
paint()
,如图所示。

和另一个有趣的示例:

import java.util.List;
import javax.swing.*;
import javax.swing.plaf.ColorUIResource;

public class GradieltButton {

    public static void main(String[] args) {
        Object grad = UIManager.get("Button.gradient");
        List gradient;
        if (grad instanceof List) {
            gradient = (List) grad;
            System.out.println(gradient.get(0));
            System.out.println(gradient.get(1));
            System.out.println(gradient.get(2));
            System.out.println(gradient.get(3));
            System.out.println(gradient.get(4));
            //gradient.set(2, new ColorUIResource(Color.blue));
            //gradient.set(3, new ColorUIResource(Color.YELLOW));
            //gradient.set(4, new ColorUIResource(Color.GREEN));
            //gradient.set(2, new ColorUIResource(221, 232, 243));//origal Color
            //gradient.set(2, new ColorUIResource(255, 255, 255));//origal Color
            //gradient.set(2, new ColorUIResource(184, 207, 229));//origal Color
            gradient.set(2, new ColorUIResource(190, 230, 240));
            gradient.set(3, new ColorUIResource(240, 240, 240));
            gradient.set(4, new ColorUIResource(180, 200, 220));
            //UIManager.put("Button.background", Color.pink);
        }
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new GradieltButton().makeUI();
            }
        });
    }

    public void makeUI() {
        JButton button = new JButton("Click");
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(button);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}
@ShaggyInjun出于某种原因写了我的UIManager.get(“Button.gradient”) 返回空值。你知道为什么吗?我知道我正在使用MetalTheme

UIManager中的
键返回
ColorUIResource
()

[0.3,0.0,javax.swing.plaf.ColorUIResource[r=221,g=232,b=243], javax.swing.plaf.ColorUIResource[r=255,g=255,b=255], javax.swing.plaf.ColorUIResource[r=184,g=207,b=229]]


需要使用
ColorUIResource
而不是
Gradient
按钮。gradien
t返回
颜色和插入的数组
=
ColorUIResource

,还有另一个有趣的例子:

import java.util.List;
import javax.swing.*;
import javax.swing.plaf.ColorUIResource;

public class GradieltButton {

    public static void main(String[] args) {
        Object grad = UIManager.get("Button.gradient");
        List gradient;
        if (grad instanceof List) {
            gradient = (List) grad;
            System.out.println(gradient.get(0));
            System.out.println(gradient.get(1));
            System.out.println(gradient.get(2));
            System.out.println(gradient.get(3));
            System.out.println(gradient.get(4));
            //gradient.set(2, new ColorUIResource(Color.blue));
            //gradient.set(3, new ColorUIResource(Color.YELLOW));
            //gradient.set(4, new ColorUIResource(Color.GREEN));
            //gradient.set(2, new ColorUIResource(221, 232, 243));//origal Color
            //gradient.set(2, new ColorUIResource(255, 255, 255));//origal Color
            //gradient.set(2, new ColorUIResource(184, 207, 229));//origal Color
            gradient.set(2, new ColorUIResource(190, 230, 240));
            gradient.set(3, new ColorUIResource(240, 240, 240));
            gradient.set(4, new ColorUIResource(180, 200, 220));
            //UIManager.put("Button.background", Color.pink);
        }
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new GradieltButton().makeUI();
            }
        });
    }

    public void makeUI() {
        JButton button = new JButton("Click");
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(button);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}
@ShaggyInjun出于某种原因写了我的UIManager.get(“Button.gradient”) 返回空值。你知道为什么吗?我知道我正在使用MetalTheme

UIManager中的
键返回
ColorUIResource
()

[0.3,0.0,javax.swing.plaf.ColorUIResource[r=221,g=232,b=243], javax.swing.plaf.ColorUIResource[r=255,g=255,b=255], javax.swing.plaf.ColorUIResource[r=184,g=207,b=229]]


需要使用
ColorUIResource
而不是
Gradient
按钮。gradien
t返回
颜色和插入的数组
=
ColorUIResource

出于某种原因,my
UIManager.get(“Button.Gradient”)
返回空值。你知道为什么吗?我知道我正在使用MetalTheme。实际调用是
UIManager.getDefaults().get(“Button.gradient”)
。出于某种原因,我的
UIManager.get(“Button.gradient”)
返回空值。你知道为什么吗?我知道我在使用MetalTheme。实际调用是
UIManager.getDefaults().get(“Button.gradient”)