O JSEPARator não vai mostrar com Gridbaglayout
-
19-09-2019 - |
Pergunta
Quero adicionar um JSeparator vertical entre dois componentes usando um GridBaglayout. O código que tenho é o seguinte:
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);
}
Mas o JSEPERATOR não aparece, nenhuma idéia?
Obrigado
Solução
Você pode tentar definir a largura preferida para o separador:
sep.setPreferredSize(new Dimension(5,1));
Em seguida, faça com que o GridBaglayout use toda a altura disponível para o separador:
gbc.fill = GridBagConstraints.VERTICAL;
gbc.weighty = 1;
Outras dicas
Tirado de Sun's Guia para JSeparator
:
Na maioria das implementações, um separador vertical tem uma altura preferida de 0, e um separador horizontal tem uma largura preferida de 0. Isso significa que um separador não é visível, a menos que você defina seu tamanho preferido ou o coloque sob o controle de um gerente de layout como BorderLayout ou BoxLayout que o estende para preencher sua área de exibição disponível.
O separador vertical tem um pouco de largura (e a horizontal um pouco de altura), para que você veja algum espaço onde o separador está. No entanto, a linha de divisão real não é desenhada, a menos que a largura e a altura sejam diferentes de zero.
Talvez você deva definir restrições corretas?