Frage

Ich bin eine Java-Desktop-Anwendung zu entwickeln. Darin habe ich 4 JButtons auf einem JPanel. Jetzt möchte ich, dass, wenn eine Schaltfläche, um die Hintergrundfarbe ändert, um eine andere Farbe (zB orange) angeklickt wird, um darzustellen, dass es angeklickt wurde und die Hintergrundfarbe aller anderen 3 Tasten auf die Standardfarbe (falls zurückgesetzt einer von ihnen orange hatte Hintergrundfarbe).

Also, auf einmal nur eine Taste kann die orange Farbe hat.

Der derzeitige Ansatz, dass ich angelegt habe, ist, dass ich den folgenden Code in der xxxActionPerformed() Methode von JButton button1 umgesetzt habe

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.

Jetzt in der tatsächlichen, ich will nicht die backgroud Farbe als Grau (für unclicked Taste). Stattdessen mag ich die Standard-Hintergrundfarbe, so dass die backgroud Farbe selbst zum anpassen Look-and-Feel der GUI nach dem Endbenutzers-Plattform Look-and-Feel.

Q1. Wie kann ich die Standard-Hintergrundfarbe erhalten?

Q2. Ist das der richtige Ansatz, dies zu tun oder Gibt es einen anderen Mechanismus, durch die I-Gruppe alle vier Tasten in einer Tastengruppe, so dass nur eine der angegebenen Eigenschaft auf einmal haben kann (wie Radio-Buttons)?

War es hilfreich?

Lösung

  1. nur Gebrauch null die Standardfarbe zu verwenden:

    button1.setBackground(Color.ORANGE);
    button2.setBackground(null);
    ...
    
  2. prüfen, mit JToggleButtons mit einem Button, bis das Symbol 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);
    ...
    

Andere Tipps

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

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

Soweit ich weiß, können die Tasten in unterschiedlichen Look & fühlt sich ändern. Hier ist eine schöne webstart app, dass alle verfügbaren Tasten:

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

Hier ist ein Querschnitt von "Button.background" auf dieser Basis Beispiel :

*** 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: com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel$NimbusProperty@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]

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

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 Benutzeroberfläche erhalten.

Q2 .: Ich habe noch nie über die Gruppierung Tasten gehört. Dann kann ich nicht Sie diese Frage beantworten.

Hope es hilft.

Wenn Sie möchten Sie Ihre ganze Taste UI Redesign kann

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 dem Haupt Stück Code verwenden wie

jButton1.setUI(new buttonUI(jButton1));

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

Sie haben in das Decorator-Muster sahen in Java Sie auf eine Schaltfläche in eine Methode übergeben, die sie in Abhängigkeit davon ziert, ob die Taste ist die aktuelle aktive, zum Beispiel, wenn er schwebt über.

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

rufen Sie diese Methode aus dem Mouseevent oder Action Methoden und geben nur ein Repaint () nach. Setzen Sie alle Ihre Knöpfe in ein Array oder einen Vektor und eine Schleife durch es jedes in an die Methode übergeben decorateButton und geben dem initail Booleschen Wert false, dann auf Ereignis gesetzt es auf wahr. Auf diese Weise wird der Anfangswert ist Standard und die Taste wird dann auf Aktion dekoriert die Schaltflächen erscheinen als Teil einer Gruppe zu handeln

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top