JSeparator suele mostrar con GridBagLayout
-
19-09-2019 - |
Pregunta
Quiero añadir un JSeparator vertical entre dos componentes utilizando un GridBagLayout. El código que tengo es el siguiente:
public MainWindowBody(){
setLayout(new GridBagLayout());
JPanel leftPanel = new InformationPanel();
JPanel rightPanel = new GameSelectionPanel();
JSeparator sep = new JSeparator(JSeparator.VERTICAL);
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.NORTH;
add(leftPanel,gbc);
gbc.gridx = 1;
gbc.gridy = 0;
gbc.fill = GridBagConstraints.VERTICAL;
add(sep,gbc);
gbc.gridx = 2;
gbc.gridy = 0;
gbc.fill = GridBagConstraints.NONE;
add(rightPanel,gbc);
}
Pero el JSeperator no muestra, alguna idea?
Gracias
Solución
Se podría tratar de establecer el ancho preferido para el separador:
sep.setPreferredSize(new Dimension(5,1));
A continuación, haga GridBagLayout agotar toda la altura disponible para el separador:
gbc.fill = GridBagConstraints.VERTICAL;
gbc.weighty = 1;
Otros consejos
Tomado de de Sun guía para JSeparator
:
En la mayoría de las implementaciones, una línea vertical separador tiene una altura preferida de 0, y un separador horizontal tiene una anchura preferida de 0. Esto significa una separador no es visible a menos que ya sea establecer su tamaño preferido o poner en bajo el control de un diseño gerente o como BorderLayout BoxLayout que se extiende para llenar su área de visualización disponible.
El separador vertical, tiene un poco de ancho (y la horizontal un poco de altura), por lo que debería ver algo de espacio donde el separador es. sin embargo, el línea de división real no se dibuja a menos que el ancho y la altura son ambos distinto de cero.
Tal vez debería establecer restricciones adecuadas?