Repaint Swing Button mit unterschiedlicher Steigung

Wie kann ich ein JButton mit einem anderen Farbverlauf neu streichen, wenn darauf geklickt wird? Ich habe die paintComponent (Graphics) -Methode außer Kraft gesetzt, um die anfängliche Farbe zu erstellen. Onclick Ich möchte es neu streichen, aber ich möchte nicht, dass der Benutzer dies im actionperformed-Ereignis tut, da ich möchte, dass dies eine eigenständige Komponente ist.

Irgendwelche Ideen, wie dies erreicht werden kann.

Vielen Dank

Der einfachste Ansatz besteht in der Verwendung von setPressedIcon() . Sie können jedoch auch paint() im ButtonUI Delegaten ButtonUI , wie in diesem Beispiel gezeigt .

Und noch ein amüsantes Beispiel:

 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 hat geschrieben Aus irgendeinem Grund gibt mein UIManager.get (“Button.gradient”) eine Null zurück. Würdest du wissen warum? Ich weiß, dass ich MetalTheme benutze.

Dieser Key in UIManager gibt ColorUIResource ( mehr in UIManagerDefaults by @camickr )

[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]]

ist erforderlich, um ColorUIResource anstelle von Gradient , Button.gradien t gibt arrays of Colors and Insets == ColorUIResource