2011-05-06 9 views
18

Tengo un JFrame que contiene solo un JPanel. He intentado establecer el tamaño del Panel y empaquetar el marco, pero eso no tiene ningún efecto.Java Swing set "actual" Tamaño de fotograma (dentro)

Si configuro el tamaño del JFrame, cambiará el tamaño para que incluya la barra de título y los bordes. ¿Cómo configuro el "tamaño real" para que no incluya la barra de título y los bordes?

Ejemplo:

Example

Gracias de antemano, chicos

Respuesta

19

También podemos establecer preferredSize del contentPane y llame paquete en el JFrame, pero, en general, por lo general es mejor dejar que los componentes a tamaño sí mismos sobre la base de sus tamaños preferidos según lo determinado por sus administradores de diseño.

+0

Sí, eso funcionó. Gracias. – CookieMonster

+0

Sí, pero esta es una aplicación con solo un panel donde se dibujarán los gráficos, por lo que el tamaño debe ser muy preciso. – CookieMonster

10

Si configura el tamaño preferido del JPanel, el método JFrame's pack() lo respetará.

+0

sí, ya que supongo que se está agregando a la posición BorderLayout.CENTER de contentPane, pero si se agrega algo más a otra posición de BorderLayout, se estropeará. –

+0

@ Andrew, lo siento, estoy haciendo muchas suposiciones, pero suponiendo que OP desea establecer el tamaño de la interfaz gráfica excepto en fronteras, menús, etc., si uno solo dimensiona el componente BorderLayout.CENTER y agrega otros componentes a otras posiciones de BorderLayout, entonces el tamaño de GUI final puede ser incorrecto.Pero mis suposiciones eran incorrectas ya que el OP está principalmente interesado en el tamaño de un componente que contiene una imagen. Así que Vincent está en lo cierto y le borraré mi primer comentario en breve (y este comentario). –

4

Utilice el método .getInsets en JFrame que le proporciona las dimensiones de los tamaños en el área no cliente.

A continuación, agréguelo al tamaño deseado y configure el tamaño con setSize.

9

Este es un ejemplo de configuración de tamaño de JPanel y el embalaje del marco:

JFrame frame = new JFrame(); 
JPanel panel = new JPanel(); 
panel.setPreferredSize(new Dimension(200, 200)); 
frame.add(panel); 
frame.pack(); 
frame.setVisible(true); 

¿Usted intentó algo como esto?

+0

Sí, eso es lo que dijo hovercraft-full-of-eels, funciona muy bien. – CookieMonster

+0

Solo lo vi publicar una vez que he enviado el mío :) – Tulio

+1

No hay problema, yo también voté el tuyo :) aunque ya me había dado cuenta esta vez, a veces realmente no puedo prescindir de un ejemplo :) – CookieMonster

2

Si desea obtener frontera del capítulo y luego utilice primero paquete de en su marco y después de ese periodo de conseguir Insets como en este código de abajo:

frame.pack(); 
Insets insets = frame.getInsets(); 
int frameLeftBorder = insets.left; 
int frameRightBorder = insets.right; 
int frameTopBorder = insets.top; 
int frameBottomBorder = insets.bottom; 

es mejor utilizar el método paquete justo después de su setResizable (boolean) método, porque cambiar el tamaño por alguna razón cambia los bordes de su marco, pero si no utiliza el método de cambio de tamaño, entonces use el método justo al comienzo del constructor del marco.

+0

Whoa 2 downvotes en poco tiempo, parece que ni siquiera vale la pena ayudar a las personas. –

0

El establecimiento del tamaño real del espacio utilizable en JFrame se puede hacer configurando el tamaño preferido del contenedor en el método createComponents(Container container). Hecho de esta manera, omita configurar el tamaño de todo el JFrame a través de setPreferredSize(new Dimension (width, length) en el método run(). Entonces, el código se verá así:

@Override 
public void run() { 
    JFrame frame = new JFrame(); 
    // other code ... 
    this.createCompoents(frame.getContentPane()); 
} 

private void createCompoents(Container container) { 
    // other code ... 
    container.setPreferredSize(new Dimension(width, length)); 
}