Domanda

Sto sviluppando un'applicazione Java Desktop. In esso ho 4 JButtons su un JPanel. Ora voglio che ogni volta che un pulsante viene premuto i suoi cambiamenti di colore di sfondo a qualche altro colore (diciamo arancione) per rappresentare che ha cliccato e il colore di tutti gli altri 3 pulsanti sfondo riportare al loro colore di default (nel caso qualcuno di loro aveva Arancione colore di sfondo).

Così, in una sola volta un solo pulsante può avere il colore arancione.

L'attuale approccio che ho applicato è che ho implementato il seguente codice nel metodo xxxActionPerformed() di JButton button1

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

e allo stesso modo per i tre pulsanti di riposo.

Ora, nel vero e proprio, non voglio che il colore backgroud come Grey (per tasto unclicked). Invece, voglio che il colore di sfondo predefinito in modo che il colore backgroud si adatterà al look-and-feel della GUI in base al look-and-feel di piattaforma l'utente finale.

Q1. Come posso ottenere il colore di sfondo predefinito?

Q2. È questo l'approccio corretto per fare questo o C'è qualche altro meccanismo attraverso il quale posso raggruppare tutti i quattro pulsanti in un gruppo di pulsanti in modo che solo uno può avere la proprietà specificata in una sola volta (come pulsanti di opzione)?

È stato utile?

Soluzione

  1. basta usare null di utilizzare il colore predefinito:

    button1.setBackground(Color.ORANGE);
    button2.setBackground(null);
    ...
    
  2. considerare l'utilizzo di JToggleButtons con un ButtonGroup, Impostare l'icona e PressedIcon dei pulsanti. Non c'è bisogno di cambiare il colore di sfondo.

    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);
    ...
    

Altri suggerimenti

È possibile ottenere il colore di sfondo standard per i pulsanti dalla UIManager:

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

Per quanto ne so, le chiavi potrebbero cambiare in diversi look & sente. Ecco un bel app WebStart che mostra le chiavi tutte disponibili:

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

Ecco uno spaccato di "Button.background" sulla base di questo esempio :

*** 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 .: Per ottenere il colore GUI del pulsante, basta fare questo

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

Con questa classe (java.awt.SystemColor. *), È possibile ottenere il colore di tutti gli elementi dell'interfaccia utente.

Q2 .: Non ho mai sentito parlare di raggruppamento di pulsanti. Poi, non posso rispondere a questo uno.

Speranza che aiuta.

Se lo si desidera è possibile riprogettare il pulsante intera interfaccia utente

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);        
        }   }

e nel vostro pezzo principale di utilizzare il codice come

jButton1.setUI(new buttonUI(jButton1));

Questo come lo uso .. si può avere il proprio modo troppo

Hai guardato nello schema decorator in Java si passa un tasto in un metodo che decora a seconda che il pulsante è quello corrente attiva, ad esempio se si passa sopra.

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

si chiama questo metodo dal MouseEvent o metodi ActionEvent e solo emette un repaint () dopo. mettere tutti i pulsanti in una matrice o un vettore e passante attraverso di essa passando ciascuno nel metodo decorateButton e invia il valore booleano initail false allora nell'evento impostato a true. In questo modo il valore iniziale è predefinito e il pulsante viene poi decorato sull'azione appariranno i pulsanti di agire come parte di un gruppo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top