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

Mi intención es crear una ventana con un fondo cian. ¿Qué está mal con esto? ¡Mi ventana no se vuelve cian, como era de esperar!JFrame.setBackground() no funciona, ¿por qué?

Además, podría alguien señalar por qué parece que tengo todos los colores por duplicado (hay un Color.CYAN y un Color.cyan). ¿Hay alguna diferencia en absoluto entre los dos? Tal vez el anterior era una constante desde antes de que hubiera enums en Java y el segundo es de Enum.

Gracias

Respuesta

36

¿Por qué es que las ventanas no cian como se esperaba?

El problema aquí es que el área donde se muestra el contenido del JFrame es realmente el "panel de contenido", y no el contenido del JFrame en sí.

Por lo tanto, la siguiente línea:

mainFrame.setBackground(Color.CYAN); 

¿Está cambiando el color de la JFrame, pero que no es en realidad la parte que es inmediatamente visible cuando se muestra el JFrame.

Lo que se necesita es cambiar el color de lo que se llama el "contenido del panel * (consulte How to Use Root Panes para una ilustración), cambiando la línea anterior a las siguientes: Marcos

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

Uso de oscilación podría ser sorprendentemente poco intuitivo al principio, por lo que recomiendo encarecidamente echar un vistazo a los recursos que he enumerado en la parte inferior de esta respuesta.

¿existe una diferencia entre Color.CYAN y Color.cyan?

No, no hay diferencia entre los dos: ambas son constantes en la clase Color que son los objetos Color. La única diferencia está en los nombres de las constantes. se introdujeron

Las constantes con nombres minúsculas cuando se introdujo la clase Color (que parece ser JDK 1.0, ya que no hay "Desde" notación en la Especificación API Java para la clase Color), y los nombres en mayúsculas se añadieron más adelante en JDK 1.4.

Probablemente se añadieron la adición de las constantes en mayúsculas llamado para que los nombres de constantes en la clase Color consistente con la Code Conventions for the Java Programming Language que a Section 9: Naming Conventions estado que deben ser constantes en todas las letras en mayúsculas.

Recursos

Para obtener más información sobre el uso de marcos, los siguientes recursos del The Java Tutorials sería de interés:

2

que desea establecer el color del panel de contenido del JFrame.

Aparte del nombre, no hay diferencia entre la parte superior y las constantes de color de la caja de camello.

+0

Sobre constantes de color de mayúsculas y camal, sí, eso es lo que pensaba. Pero si no hay diferencia, ¿por qué existen por duplicado? –

+1

creo que los nombres de los camelcase están allí primero, no estoy del todo seguro, pero creo que fue solo un caso de no cumplir con los estándares de nomenclatura de Sun, por lo que agregaron los que están correctamente en mayúscula para que se ajusten al estándar. - y, por supuesto, no querían eliminar los camelcas porque eso rompería los programas existentes. – MeBigFatGuy

4

esto debería funcionar:

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