2009-01-10 19 views
55

Intentando crear una aplicación GUI en Java/Swing. Estoy principalmente acostumbrado a "pintar" GUI en el lado de Windows con herramientas como VB (o para ser más precisos, Gupta SQLWindows ... me pregunto cuántas personas saben qué es eso ;-)).¿Hay un equivalente de "Group Box" en Java Swing?

no puedo encontrar un equivalente de un cuadro de grupo en el columpio ...

Con un cuadro de grupo, que tienen una caja cuadrada (por lo general con un título) en torno a un par de widgets relacionados. Un ejemplo es un cuadro de grupo alrededor de unos botones de radio (con el título que explica de qué se tratan los botones de opción, por ejemplo, cuadro de grupo titulado "Sexo" con botones de opción "Hombre" y "Mujer").

He buscado un poco ... la única forma que encontré fue agregar un subpanel, establecer el borde en el subpanel y luego agregar todos los widgets en el "grupo" al sub-panel cristal. ¿Hay una manera más elegante de hacer eso?

+0

Quizás podría explicar lo que es un cuadro de grupo. – Geo

+0

Creo que se refiere al grupo de control que ve en muchos cuadros de diálogo, donde tiene un cuadrado alrededor de un conjunto de widgets, como botones de opción, por ejemplo. – Uri

Respuesta

110

Crea un JPanel y agrégalos a tus botones de radio. No se olvide de configurar el diseño de JPanel en algo apropiado.

luego llamar a panel.setBorder(BorderFactory.createTitledBorder(name));

1

No AFAIK, al menos no con los widgets de oscilación estándar.

En VB tiene un widget de grupo, que es esencialmente un panel + borde.

En Swing tienes un JPanel que es el widget de contenedor, y creas y configuras un objeto de borde solo si lo necesitas. Se puede argumentar que de una manera más elegante ya que no se paga por algo que no se usa (p. Ej., Borde)

-1

Estoy respondiendo según el comentario de Uri que explica lo que significa el OP por Group Box :

Uri: Creo que se refiere al grupo de control que ve en muchos cuadros de diálogo, donde tiene un cuadrado alrededor de un conjunto de widgets, como botones de opción, por ejemplo.

Hasta donde yo sé, cada JComponent puede establecer un borde para sí mismo, por lo que no necesita un segundo panel.

+0

Quiero tener un borde alrededor de varios JComponents. Además, tener solo un elemento en un cuadro de grupo suele ser una mala práctica. – Thorsten

+0

Puede agregar más de un componente en un JPanel. – Geo

+0

Lo sé .. Probablemente malinterpreté su respuesta. – Thorsten

3

cuadro de un grupo es sólo un conjunto de widgets agrupados de forma lógica. Esto en el mundo de la oscilación es un JPanel.

Agregue sus widgets a JPanel.

Establezca su tipo de borde en 'Titulated Border' y dé el título, igual que el nombre del 'frame' de VB6.

Voila. Usted tiene su cuadro de grupo.

6

Otros ya han comentado sobre JPanel y usando TitledBorder, está bien.

Sin embargo, al jugar con Swing LayoutManagers, puede resultar molesto que los componentes en diferentes JPanels no se puedan alinear correctamente (cada panel tiene su propio LayoutManager).

Por esta razón, es una buena práctica (ver "JGoodies" en la web para más detalles) en las GUIs de Swing NO usar TitledBorders sino separar grupos de componentes en un JPanel por un JLabel seguido de un JSeparator horizontal.

Ref. "First Aid for Swing"

+1

FYI - su enlace de referencia está roto. –

+0

Gracias por el comentario, el sitio web original fue cambiado el año pasado y no estaba al tanto. Ahora acabo de arreglar el enlace. – jfpoilpret

+1

¿Hay pautas específicas de Oracle o del sistema que respalden esta afirmación? ¿Esa etiqueta + separador debería ser preferible al grupo de boxeo? JGoodies es solo * una * compañía que implementa Java. – Kissaki

2

Aquí hay una cita de los javadocs de JRadioButton desde que sacó los botones de opción.

Implementación de un botón de opción: un elemento que se puede seleccionar o deseleccionar y que muestra su estado al usuario. Se usa con un objeto ButtonGroup para crear un grupo de botones en el que solo se puede seleccionar un botón a la vez. (Cree un objeto ButtonGroup y use su método add para incluir los objetos JRadioButton en el grupo.)

Nota: El objeto ButtonGroup es una agrupación lógica, no una agrupación física. Para crear un panel de botones, aún debe crear un JPanel u objeto-contenedor similar y agregarle un Borde para desconectarlo de los componentes circundantes.

+0

Gracias, pero como correctamente indica, mi intención principal era el aspecto "visual". – Thorsten

Cuestiones relacionadas