2010-01-18 62 views
5

Estoy desarrollando una aplicación de escritorio Java. En él tengo 4 JButtons en un JPanel. Ahora quiero que cada vez que se haga clic en un botón su color de fondo cambie a otro color (por ejemplo naranja) para representar que se ha hecho clic y el color de fondo de los otros 3 botones se restablecerá a su color predeterminado (en caso de que alguno de ellos tenga color de fondo).¿Cómo establecer un color de fondo de un JButton en Java?

Por lo tanto, al mismo tiempo, solo un botón puede tener el color naranja.

El enfoque actual que he solicitado es que he implementado el código siguiente en el método de JButton xxxActionPerformed() botón1

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

y lo mismo para los tres botones de descanso.

Ahora, en realidad, no quiero que el color del fondo de pantalla sea gris (para el botón sin clic). En cambio, quiero el color de fondo predeterminado para que el color de fondo se ajuste a la apariencia de la GUI de acuerdo con el aspecto y la sensación de la plataforma del usuario final.

Q1. ¿Cómo puedo obtener el color de fondo predeterminado?

Q2. ¿Es este el enfoque correcto para hacer esto o hay otro mecanismo mediante el cual pueda agrupar los cuatro botones en un grupo de botones para que solo uno pueda tener la propiedad especificada al mismo tiempo (como botones de opción)?

Respuesta

9
  1. sólo tiene que utilizar null utilizar el color predeterminado:

    button1.setBackground(Color.ORANGE); 
    button2.setBackground(null); 
    ... 
    
  2. considerar el uso de JToggleButtons con un ButtonGroup, ajuste el Icon y PressedIcon de los botones. No es necesario cambiar el color de fondo.

    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 para JToggleButton. Está usando 'null' confiable? – trashgod

+0

+1 para sugerir el mejor enfoque (usando JToggleButton). Estaba buscando este tipo de enfoque. Gracias –

+0

@trashgod Lo usé muchas veces sin problemas, pero no con JToggleButtons ... de todos modos depende del aspecto y la sensación de honrarlo o no: - | esa es una buena razón para usar el color del UIManager, o usar los iconos –

1

Q1 .: Para obtener el color interfaz gráfica de usuario del botón, simplemente hacer esto

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

Con esta clase (java.awt.SystemColor. *), Se puede obtener el color de todos los elementos de su usuario interfaz.

P2 .: Nunca escuché sobre la agrupación de botones. Entonces, no puedo responderte esta.

Espero que ayude.

8

, usted puede obtener el color de fondo para los botones estándar de la UIManager:

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

Por lo que yo sé, las claves podría cambiar en diferentes mirada & siente. Aquí es una aplicación Web Start agradable que muestra todas las teclas disponibles:

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

+0

1 de buen enlace JWS. – trashgod

+0

Esto funcionó para mí, y es mi solución preferida. – Cookie

1

Aquí es una sección transversal de "botón.fondo" en base a este 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

has mirado en el patrón decorador en Java pasa un botón en un método que decora dependiendo de si el botón es la corriente activa, por ejemplo, si se movía sobre .

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

llama a este método a partir de los métodos MouseEvent o ActionEvent y simplemente emite un repintado() después. poner todos los botones en una matriz o vector y el bucle a través de él pasa cada uno en el método decorateButton y dar el valor booleano initail de falso luego el evento lo configuró en verdadero. De esta forma e valor inicial es por defecto y el botón es entonces decorado sobre la acción aparecerán los botones para actuar como parte de un grupo

0

Si lo desea, puede rediseñar su botón de toda la interfaz de usuario

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

y en su principal pedazo de código como el uso

jButton1.setUI(new buttonUI(jButton1)); 

Esto cómo lo uso .. usted puede tener su propia manera demasiado

Cuestiones relacionadas