重新绘制与不同的梯度的swingbutton

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

任何想法如何实现。

谢谢

最简单的方法是使用setPressedIcon() ,但是也可以重写ButtonUI委托中的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”)返回null。 你知道为什么吗? 我知道我正在使用MetalTheme。

Key in UIManager这个Key in UIManager返回ColorUIResource ( 更多在@camickr的UIManagerDefaults中 )

[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而不是GradientButton.gradien t返回arrays of Colors and Insets Button.gradien arrays of Colors and Insets == == ColorUIResource