J'ai cette JFrame
classe Java , dans laquelle je veux utiliser un boxlayout, mais j'obtiens une erreur disant java.awt.AWTError: BoxLayout can't be shared
. J'en ai vu d'autres avec ce problème, mais ils l'ont résolu en créant le boxlayout sur le volet de contenu, mais c'est ce que je fais ici. Voici mon code:
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);
}
}
J'ai également trouvé cette erreur en faisant ceci:
Le JPanel n'est pas encore initialisé lors de son passage au BoxLayout. Alors divisez cette ligne comme ceci:
Cela fonctionnera.
la source
Je pense qu'une chose importante à souligner à partir des réponses précédentes est que la cible de BoxLayout (le premier paramètre) doit être le même conteneur que la méthode setLayout est appelée comme dans l'exemple suivant:
la source
Si vous utilisez la mise en page sur un
JFrame
like:Le contrôle est en fait ajouté à la
ContentPane
, il semblera donc `` partagé '' entre leJFrame
et leContentPane
Faites ceci à la place:
la source
JFrame
s n'en ont normalement pas besoin (contrairement à l'AWTFrame
). De laJFrame
documentation: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.
Enframe
ils se réfèrent à uneJFrame
instance.