2011-08-09 30 views
11
setExtendedState(getExtendedState()|JFrame.MAXIMIZED_BOTH); 
setResizable(false); 
setUndecorated(true); 
System.out.println("--------> "+getContentPane().getWidth()); //----> 0 why is this happening? 

Estoy tratando de determinar el tamaño de un JFrame. He buscado en google y comprobado la documentación y todavía no sé por qué no va a funcionar Se trabaja muy bien en casi cualquier otro control que lo intento enJava, JFrame: getWidth() devuelve 0

EDIT: frame.getWidth() funciona cuando llamada fuera de la clase (que se extiende JFrame) aún, si reemplazo

System.out.println("--------> "+getContentPane().getWidth()); 

con

System.out.println("--------> "+this.getWidth()); 

getWidth todavía devolver 0

EDIT2: Necesito el tamaño del marco antes de configurarlo y esas cosas. Necesito agregar otros controles al marco y sus coordenadas y tamaño dependen del tamaño del marco.

+2

¿Está el marco visible? – lhballoti

+0

todo depende de cómo colocó el contenedor, si hay definiciones para 'setSize()' o 'setBounds()', entonces cualquier 'Dimension' real solo devolverá' Container', de lo contrario si 'JComponents' devuelve' PreferedSize' a el 'Contenedor', entonces puede obtener esta' Dimensión' en cualquier lugar que desee – mKorbel

+0

@ madflame991, Para su segunda edición, esto no es posible, ni tiene sentido. – mre

Respuesta

10

La razón por la que obtuvo 0 es porque no llamó a ninguno de los paquetes(), setSize (int, int) o setSize (Dimension). Esto es solo cuando se llama a uno de estos métodos que se calculará el diseño de su marco.

JFrame frame = new JFrame("My Frame"); 
frame.setExtendedState(getExtendedState()|JFrame.MAXIMIZED_BOTH); 
frame.setResizable(false); 
frame.setUndecorated(true); 
frame.pack(); // Important line!!! 
frame.setVisible(true); 
System.out.println("--------> "+getContentPane().getWidth()); 
+0

Necesito el ancho antes de terminar de agregar los controles – adrianton3

+1

Ejecuto la prueba y parece que no se puede obtener el ancho del marco porque no es visible, pero me di cuenta de que si el marco siempre es JFrame.MAXIMIZED_BOTH, entonces el ancho del marco es igual al ancho de la pantalla, que puede obtener por 'Toolkit tk = Toolkit.getDefaultToolkit(); int screenWidth = tk.getScreenSize(). width;' – aymeric

+0

¡Gracias! getScreenSize no es lo que estaba buscando pero soluciona bastante mi problema – adrianton3

10

No ha realizado realizando (es decir, setVisible(true)) el JFrame todavía. Y, por lo tanto, no tiene tamaño, ya que no ha presentado sus componentes.

+2

1+. 'pack()' también representará el JFrame (creo). –

+0

Intenté llamarlo después de hacerlo visible y todavía me lo devolvió 0 – adrianton3

+0

@ madflame991, Esta podría ser una pregunta estúpida, pero, ¿agregó algún componente al 'JFrame' antes de hacerlo visible? Y como se mencionó en @Hovercraft, quizás la invocación de 'pack()' sea la mejor opción, ya que esto obligará al contenedor a diseñar sus componentes y luego a hacerse visible. – mre