2010-11-15 30 views
9

Tengo JFrame.¿Cómo agregar múltiples componentes a un JFrame?

también tengo una clasecaja que se extiende Componente. Esta clase de caja tiene pintura método que hace un rectángulo lleno.

Cuando agrego múltiplo de estos componentes de la caja a mi JFrame, sólo el más reciente añade uno se visualiza cuando llamo repinte en el JFrame.

Me tomó un vistazo a los controladores de distribución, pero no estoy seguro de que es lo que quiero. Todo lo que quiero es poder hacer una animación de un montón de rectángulos donde quiera en la pantalla.

(también intentaron crear un panel, añadiendo el panel a la JFrame, y luego sumando todos los componentes de la caja al panel. Esto no funcionó tampoco).

¡Gracias de antemano!

+0

El código sería útil. Parece que está sobreescribiendo una referencia o algo ... – Jules

+0

Lo hará en el futuro. Gracias. – klyngbaek

Respuesta

9

Tiene 2 opciones.

Usted puede cambiar el diseño de su marco:

JFrame frame; 
frame.setLayout(new FlowLayout()); 

Ahora, si se agrega más de una casilla, se mostrará en el marco.

La otra opción es hacer lo que usted ha dicho que ha intentado. (Adición de un panel al marco)

JPanel pane = new JPanel(); 
frame.add(pane); 
(add the boxes to 'pane') 

Además, se debe tener cuidado con el tamaño de su Box. Es probable que desee una llamada al setPreferredSize() en algún lugar de la creación del Box. Esto le dirá a Java qué tamaño debe hacer el cuadro cuando se agrega al diseño.

También debe echar un vistazo a la Java Layout Manager Tutorials. Hay mucha información excelente allí.

Y, una cosa más. El motivo por el que se mostraba solo un cuadro a la vez en el marco era porque el administrador de diseño de JFrame es BorderLayout. Y cuando llama al add en un componente que tiene un BorderLayout, el componente se agrega automáticamente al centro del componente. Las llamadas subsiguientes al add sobrescribirán el componente central, dejando solo un componente en el medio.

+0

¿Hay algún diseño que me permita simplemente agregar tantos componentes como desee, sin tener que seleccionar explícitamente dónde (por ejemplo, IZQUIERDA, DERECHA o CENTRO)? – klyngbaek

+0

La otra opción que tengo es agregar 1 componente y hacer que el método de pintura en ese componente dibuje todos los rectángulos que quiero. (en lugar de tener cada rectángulo representado con su propio componente) – klyngbaek

+0

@zucch, FlowLayout le permitirá agregar tantos componentes como desee. – jjnguy

0

Necesita consultar otros administradores de diseño. JFrame utiliza Default BorderLayout y, sin especificar el "lugar" en el que se agrega un componente, se agrega a CENTER. Según el aspecto que desee que tenga su interfaz de usuario, depende del administrador de diseño que desee utilizar. Sugeriría que tal vez use el constructor de GUI de Netbeans.

EDIT: se perdió la parte acerca de lo que desea añadir, pero el concepto sigue siendo el mismo, si es que acaba de añadir estos componentes al controlador de distribución por defecto, se sobrescribirá. Suena como que necesita hacer su pintura dentro de uno de sus componentes de Caja o crear un JPanel y establecer el diseño en null, pero luego tendría que colocarlos explícitamente. Realmente depende de lo que quieras hacer exactamente.

+0

Está intentando dibujar componentes del tiempo de ejecución, no veo cómo el creador de la GUI de Netbeans podría ser de ayuda. – Jules

+0

@Jules - Verifique EDITAR ... – Merky

0

Haga su diseño en el papel primero, y luego leer sobre los gestores de diseño Swing.

Tenga en cuenta que algunos componentes Swing solo permiten que se les agregue un componente. Me encontré con esto cuando uso paneles con pestañas. Cada pestaña solo puede aceptar un control (JPane?) Por lo que debe crear un panel separado con un diseño para organizar los controles relacionados y luego, como unidad, agregar el panel a la pestaña. Hay arreglos similares en la biblioteca Swing.

1

Puede establecer el diseño del marco en null y luego usar setBounds() para colocar sus cajas exactamente donde desee.

0

Gracias por todas sus respuestas.

Dado que estoy usando mi propia clase personalizada, Caja, tengo la capacidad de establecer la posición de mi rectángulo a través del método de pintura.

Me di cuenta de que mi clase Box estaba extendiendo la cosa incorrecta. Debería haber estado extendiendo javax.swing.Jcomponent.

Si ahora uso un panel con OverlayLayout, agrego mis componentes a ese panel, todos aparecen correctamente.

+1

Observe conflictos con 'javax.swing.Box'. – trashgod

Cuestiones relacionadas