2010-04-30 7 views
13
JFrame mainFrame = new JFrame(); 
    mainFrame.setSize(100, 100); 
    mainFrame.setBackground(Color.CYAN); 
    mainFrame.setVisible(true); 

Mon intention est de créer une fenêtre avec un arrière-plan cyan. Quel est le probleme avec ca? Ma fenêtre n'est pas cyan, comme je m'y attendais!JFrame.setBackground() ne fonctionne pas - pourquoi?

Aussi, pourrait-on indiquer pourquoi je semble avoir toutes les couleurs en double (il y a un Color.CYAN et un Color.cyan). Y a-t-il une différence entre les deux? Peut-être que le plus ancien était une constante d'avant il y avait des enums à Java et le second est de l'Enum?

Merci

Répondre

36

Pourquoi les fenêtres ne cyan comme prévu?

Le problème ici est que la zone où le contenu du JFrame est affiché est en réalité le "volet de contenu", et non le contenu du JFrame lui-même.

Par conséquent, la ligne suivante:

mainFrame.setBackground(Color.CYAN); 

est en train de changer la couleur de la JFrame, mais qui est en fait pas la partie qui est immédiatement visible lorsque l'JFrame est affiché.

Ce qui est nécessaire est de changer la couleur de ce qu'on appelle le « volet contenu * (s'il vous plaît se référer à How to Use Root Panes pour une illustration), en changeant la ligne ci-dessus pour ce qui suit:

mainFrame.getContentPane().setBackground(Color.CYAN); 

Utilisation de cadres dans balançoire pourrait être étonnamment unintuitive au début, donc je recommande fortement de prendre un regard sur les ressources que je l'ai indiqué au bas de cette réponse.

y at-il une différence entre Color.CYAN et Color.cyan?

Non, il n'y a pas de différence entre les deux - ce sont les deux constantes de la classe Color qui sont elles-mêmes Color. La seule différence est dans les noms des constantes.

Les constantes avec des noms minuscules ont été introduites lorsque la classe Color a été introduite (qui semble être JDK 1.0, car il n'y a pas de « Étant donné que » la notation dans l'API Java Specification pour la classe Color), et les noms en majuscules ont été ajoutés plus tard dans JDK 1.4.

probablement l'addition des constantes nommées majuscules ont été ajoutées pour que les constantes dans la classe cohérente Color avec le Code Conventions for the Java Programming Language qui Section 9: Naming Conventions état que les constantes doivent être en majuscules.

Ressources

Pour plus d'informations sur l'utilisation de cadres, les ressources suivantes de The Java Tutorials serait intéressant:

2

Vous souhaitez définir la couleur du volet contenu du JFrame.

À part le nom, il n'y a pas de différence entre les constantes de couleur des majuscules et des chameaux.

+0

A propos des constantes de couleur majuscules et camal, oui, c'est-ce que je pensais. Mais s'il n'y a pas de différence, pourquoi existent-ils en double? –

+1

je crois que les noms de camelcase là d'abord, pas tout à fait sûr, mais je crois que c'était juste un cas de ne pas correspondre aux normes de nommage de Sun, et ils ont ajouté ceux correctement capitalisés pour s'adapter à la norme. - et bien sûr ils ne voulaient pas enlever les camelcased car cela casserait les programmes existants. – MeBigFatGuy

4

Cela devrait fonctionner:

JFrame mainFrame = new JFrame(); 
mainFrame.setSize(100, 100); 
mainFrame.getContentPane().setBackground(Color.CYAN); 
mainFrame.setVisible(true); 
Questions connexes