Eu tenho essa JFrame
classe Java , na qual desejo usar um boxlayout, mas recebo um erro dizendo java.awt.AWTError: BoxLayout can't be shared
. Já vi outros com esse problema, mas eles o resolveram criando o boxlayout no painel de conteúdo, mas é isso que estou fazendo aqui. Este é meu código:
class EditDialog extends JFrame {
JTextField title = new JTextField();
public editDialog() {
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setTitle("New entity");
getContentPane().setLayout(
new BoxLayout(this, BoxLayout.PAGE_AXIS));
add(title);
pack();
setVisible(true);
}
}
Também encontrei este erro ao fazer isto:
O JPanel ainda não foi inicializado ao passá-lo para o BoxLayout. Então, divida esta linha assim:
Isso vai funcionar.
fonte
Acho que uma coisa importante a destacar das respostas anteriores é que o destino do BoxLayout (o primeiro parâmetro) deve ser o mesmo Container que o método setLayout está sendo chamado, como no exemplo a seguir:
fonte
Se você estiver usando o layout de uma forma
JFrame
semelhante:O controle está realmente sendo adicionado ao
ContentPane
para parecer que está "compartilhado" entre oJFrame
e oContentPane
Em vez disso, faça isso:
fonte
JFrame
s normalmente não o exigem (ao contrário do AWTFrame
). DaJFrame
documentação:As a convenience, the add, remove, and setLayout methods of this class are overridden, so that they delegate calls to the corresponding methods of the ContentPane. For example, you can add a child component to a frame as follows: frame.add(child); And the child will be added to the contentPane. The content pane will always be non-null.
Porframe
se referir a umaJFrame
instância.