2011-02-14 4 views
7

J'ai le code simple suivant:Pourquoi setBackground à JButton ne fonctionne pas?

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

je travaillais quand je:

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

Mais il a cessé de travailler après avoir commenté la ligne ci-dessus. Est-ce que quelqu'un sait pourquoi cela peut arriver et comment je peux définir une couleur d'arrière-plan à un bouton sans l'utilisation d'une apparence et une sensation explicite?

AJOUTÉE

Il me semble que je dois utiliser getBackground. Mais je ne sais pas comment.

+8

Sur une note sans rapport: s'il vous plaît ne pas utiliser que 'UIManager 'ligne comme ça: coder en dur le nom de la classe PLAF signifie que votre code ne fonctionnera pas quand ce PLAF n'est pas disponible (par exemple sur les JDK non Windows ** ou ** sur les nouveaux JDK Windows qui pourraient arrêter d'envoyer cette classe spécifique). ['UIManager.getSystemLookAndFeelClassName()'] (http://download.oracle.com/javase/6/docs/api/javax/swing/UIManager.html#getSystemLookAndFeelClassName()) pourrait être ce que vous recherchez. –

+0

Pouvez-vous poster plus de détails? Votre UIManager.setLookAndFeel ("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel"); est après ou avant la commande btn.setBackground (backgroundColor)? – Serhiy

+0

@Serhiy, mon LookAndFeel était avant. Et je ne veux pas l'utiliser du tout. – Roman

Répondre

6

De setBackground() javadoc:

Il est au look and feel d'honorer cette propriété, certains peuvent choisir de l'ignorer.

Peut-être que votre LAF vient de l'ignorer.

+0

Alors qu'il est possible qu'il l'ignore, il est hautement improbable. Vérifiez d'abord l'option setOpaque, car c'est la cause la plus probable. – Reid

0

Le problème peut également provenir de la façon dont vous créez le bouton. Vérifiez si le code ci-dessus:

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

Cliquez simplement une fois sur le bouton que vous souhaitez définir arrière-plan, puis aller à la fenêtre des propriétés. Là-bas, la deuxième option sera en arrière-plan. Cliquez sur ses points de suspension, et vous pouvez changer la couleur à votre goût. La couleur ne sera pas affichée sur le bouton de votre cadre tant que vous n'aurez pas exécuté le programme. Vous pouvez voir que le bouton est dans la couleur que vous préférez.

10

il est nécessaire de mettre Opaque de l'élément à vrai pour la couleur à remplir

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

cela devrait être la réponse acceptée, exactement ce qui me manquait – Argento

1

ajouter btn.setBorderPainted (false)