2010-12-16 3 views
0

Wie kann ich ein JButton mit einem anderen Farbverlauf neu streichen, wenn es 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.Repaint Swing-Taste mit unterschiedlichen Gradienten

Irgendwelche Ideen, wie dies erreicht werden kann.

Dank

Antwort

4

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 Aus irgendeinem Grund meine UIManager.get schrieb ("Button.gradient") einen Nullwert zurückgibt. Würdest du wissen warum? Ich weiß, dass ich MetalTheme benutze.

Diese Key in UIManager kehrt ColorUIResource (more 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]]

erforderlich ColorUIResource zu verwenden anstelle von Gradient, t gibt arrays of Colors and Insets == ColorUIResource

+0

Aus irgendeinem Grund gibt mein 'UIManager.get (" Button.gradient ")' null zurück. Würdest du wissen warum? Ich weiß, dass ich MetalTheme benutze. – ShaggyInjun

+1

@ShaggyInjun se meine Bearbeitung hier für mehr Info – mKorbel

+1

Der eigentliche Aufruf ist 'UIManager.getDefaults(). Get (" Button.gradient ")'. – ShaggyInjun