2011-02-14 36 views
7

Tengo el siguiente código simple:¿Por qué setBackground to JButton no funciona?

btn = new JButton(); 
btn.setBackground(backgroundColor) 

trabajé cuando utilicé:

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel"); 

pero dejó de trabajar después de haber comentado la línea anterior. ¿Alguien sabe por qué puede suceder y cómo puedo establecer un color de fondo para un botón sin el uso de un Look and Feel explícito?

AÑADIDO

Me parece que tengo que usar getBackground. Pero no sé como.

+8

En una nota relacionada: por favor, no utilice ese 'UIManager 'línea así: el código rígido del nombre de clase PLAF significa que su código no se ejecutará cuando ese PLAF no esté disponible (por ejemplo, en JDKs que no sean de Windows ** o ** en un JDK de Windows más nuevo que pueda dejar de enviar esa clase específica). ['UIManager.getSystemLookAndFeelClassName()'] (http://download.oracle.com/javase/6/docs/api/javax/swing/UIManager.html#getSystemLookAndFeelClassName()) puede ser lo que buscas. –

+0

¿Puedes publicar más detalles? Su UIManager.setLookAndFeel ("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel"); ¿está después o antes del comando btn.setBackground (backgroundColor)? – Serhiy

+0

@Serhiy, mi LookAndFeel era antes. Y no quiero usarlo en absoluto. – Roman

Respuesta

6

De setBackground() javadoc:

Corresponde a la apariencia en honor a esta propiedad, algunos pueden optar por ignorarlo.

Tal vez su LAF simplemente lo ignoró.

+0

Si bien es posible que simplemente lo haya ignorado, es muy poco probable. Primero compruebe la opción setOpaque, ya que esa es la causa más probable. – Reid

0

El problema también puede estar en la forma en que está creando el botón. Comprobar si el código anterior:

public class Test extends JApplet{ 

public void init() 
{ 
    java.awt.EventQueue.invokeLater(new Runnable() 
    { 
     public void run() 
     { 
      setSize(200, 200); 
      setLayout(null); 

      JPanel p = new JPanel(); 
      getContentPane().add(p); 
      p.setSize(getSize()); 
      p.setLayout(null); 

      JButton b = new JButton("test"); 
      p.add(b); 
      b.setBounds(10, 10, 100, 20); 
      b.setBackground(Color.GREEN); 

     } 
    }); 
} 

}

0

que hacer un click en el botón que desea establecer de fondo para, y luego ir a la ventana de propiedades. Allá, la segunda opción será fondo. Haga clic en sus puntos suspensivos, y puede cambiar el color a su gusto. El color no se mostrará en el botón de su marco hasta después de ejecutar el programa. Puedes ver que el botón está en el color que prefieres.

10

es necesario establecer opaco del elemento de verdad para el color que se llena

 btn = new JButton(); 
    btn.setOpaque(true); 
    btn.setBackground(backgroundColor); 
+0

esta debería ser la respuesta aceptada, exactamente lo que me faltaba – Argento

1

añadir btn.setBorderPainted (falso)

Cuestiones relacionadas