重新绘制与不同的梯度的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
而不是Gradient
, Button.gradien
t返回arrays of Colors and Insets
Button.gradien
arrays of Colors and Insets
== == ColorUIResource