2010-01-18 11 views
5

Ich entwickle eine Java-Desktop-Anwendung. Darin habe ich 4 JButtons auf einem JPanel. Jetzt möchte ich, dass jedes Mal, wenn eine Schaltfläche angeklickt wird, die Hintergrundfarbe in eine andere Farbe (Orange) geändert wird, um anzuzeigen, dass sie angeklickt wurde und die Hintergrundfarbe aller anderen drei Schaltflächen auf ihre Standardfarbe zurückgesetzt wurde Hintergrundfarbe).Wie stelle ich eine Hintergrundfarbe eines JButtons in Java ein?

So kann zu einer Zeit nur eine Taste die orange Farbe haben.

Der derzeitige Ansatz, den ich angewendet haben, ist, daß ich den folgenden Code in der Methode der xxxActionPerformed() JButton button1

button1.setBackground(Color.Orange); 
button2.setBackground(Color.Gray); 
button3.setBackground(Color.Gray); 
button4.setBackground(Color.Gray); 

und in ähnlicher Weise für den Rest drei Tasten implementiert haben.

Nun möchte ich eigentlich nicht die Hintergrundfarbe als Grau (für nicht ausgewählte Schaltfläche). Stattdessen möchte ich die Standardhintergrundfarbe, so dass die Hintergrundfarbe sich an das Aussehen und die Oberfläche der GUI gemäß dem Look-and-Feel der Endbenutzerplattform anpasst.

Q1. Wie kann ich die Standardhintergrundfarbe erhalten?

Q2. Ist das der richtige Ansatz, um dies zu tun? Gibt es einen anderen Mechanismus, mit dem ich alle vier Schaltflächen in einer Schaltflächengruppe gruppieren kann, so dass nur einer die angegebene Eigenschaft gleichzeitig haben kann (wie Optionsfelder)?

Antwort

9
  1. nur null verwenden die Standardfarbe zu verwenden:

    button1.setBackground(Color.ORANGE); 
    button2.setBackground(null); 
    ... 
    
  2. prüfen, mit JToggleButtons mit einem ButtonBroup, stellen die Icon und PressedIcon der Tasten. Keine Notwendigkeit, die Hintergrundfarbe zu ändern.

    button1 = new JToggleButton(new ImageIcon("0.jpg")); 
    button1.setSelectedIcon(new ImageIcon("1.jpg")); 
    button2 = new JToggleButton(new ImageIcon("0.jpg")); 
    button2.setSelectedIcon(new ImageIcon("2.jpg")); 
    ... 
    ButtonGroup group = new ButtonGroup(); 
    group.add(button1); 
    group.add(button2); 
    ... 
    
+0

+1 für JToggleButton. Ist 'null' zuverlässig? – trashgod

+0

+1 für die besten Ansatz vorschlagen (mit JToggleButton). Ich habe nach dieser Art von Ansatz gesucht. Danke –

+0

@trashgod Ich habe es viele Male ohne Probleme benutzt, aber nicht mit JToggleButtons ... sowieso ist es das Aussehen und das Gefühl, es zu ehren oder nicht: - | Das ist ein guter Grund, die Farbe des UIManager zu verwenden, oder die Symbole –

1

Q1 .: Um die GUI Farbe der Schaltfläche zu erhalten, nur das tun

button1.setBackground(Color.Orange); 
button2.setBackground(java.awt.SystemColor.control); 
button3.setBackground(java.awt.SystemColor.control); 
button4.setBackground(java.awt.SystemColor.control); 

Mit dieser Klasse (java.awt.SystemColor. *), Können Sie die Farbe aller Elemente Ihrer Benutzer erhalten können Schnittstelle.

Q2 .: Ich habe noch nie von Gruppierungsknöpfen gehört. Dann kann ich dir diesen nicht beantworten.

Ich hoffe, es hilft.

8

Sie können die Standard-Hintergrundfarbe für Schaltflächen aus dem UIManager erhalten:

button1.setBackground(UIManager.getColor("Button.background")); 

Soweit ich weiß, könnten die Schlüssel in anderem Blick & fühlt sich ändern. Hier ist eine schöne webstart App, die alle verfügbaren Tasten zeigt:

http://tips4java.wordpress.com/2008/10/09/uimanager-defaults/

+0

+1 für schöne JWS Link haben. – trashgod

+0

Das hat für mich funktioniert und ist meine bevorzugte Lösung. – Cookie

1

Hier ist ein Querschnitt von „Button.Hintergrund“auf der Grundlage dieser example:

 
*** Metal javax.swing.plaf.metal.MetalLookAndFeel 636 entries 
Button.background: javax.swing.plaf.ColorUIResource[r=238,g=238,b=238] 

*** Nimbus com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel 1052 entries 
Button.background: [email protected]60961dff 

*** CDE/Motif com.sun.java.swing.plaf.motif.MotifLookAndFeel 550 entries 
Button.background: javax.swing.plaf.ColorUIResource[r=174,g=178,b=195] 

*** Mac OS X com.apple.laf.AquaLookAndFeel 705 entries 
Button.background: com.apple.laf.AquaNativeResources$CColorPaintUIResource[r=238,g=238,b=238] 
-1

ausgesehen haben Sie in das Decorator-Muster in Java Sie auf eine Schaltfläche in eine Methode übergeben, die sie in Abhängigkeit davon ziert, ob die Taste der aktuelle aktive ist, zum Beispiel wenn es schwebte über jedes vorbei.

public Jbutton decorateButton(JButton b, boolean isHoveredOver){ 
    if(isHoveredOver) 
     b.setBackground(getContentPane().getBackground().GREEN); 
    return b; 
} 

Sie diese Methode aus den Mouseevent oder Action Methoden aufrufen und erteilen, nachdem sie nur ein Repaint(). Ihre Tasten in einem Array oder Vektor und Schleife durch sie alle in die decorateButton Methode setzen und geben der initail-Boolesche Wert von false then on und das Ereignis auf true setzen Auf diese Weise th e Anfangswert ist Standard und die Taste eingerichtet wird dann Wirkung auf die Tasten als Teil einer Gruppe erscheint

0

zu handeln, wenn Sie wünschen,

Ihre ganze Taste UI Redesign können
public class buttonUI extends javax.swing.plaf.basic.BasicButtonUI{ 

buttonUI(JButton b){ 
    b.setContentAreaFilled(false); 
} 

@Override 
    public void paint(Graphics g,JComponent c){ 
      Graphics2D g2d = (Graphics2D) g; 
      g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
      AbstractButton b = (AbstractButton) c; 
      g2d.setFont(font.deriveFont(11f)); 
      Dimension d = b.getSize(); 
      FontMetrics fm = g2d.getFontMetrics(); 
      g2d.setColor(new Color(100,100,100)); 
      String caption = b.getText(); 
      int x = (d.width - fm.stringWidth(caption))/2; 
      int y = (d.height + fm.getAscent())/2 - 2; 
      g2d.drawString(caption, x, y);   
     } } 

und in der Haupt Stück Code verwenden wie

jButton1.setUI(new buttonUI(jButton1)); 

Dieses, wie ich es verwenden .. können Sie Ihre eigene Art und Weise

Verwandte Themen