Ich habe diese Java- JFrame
Klasse, in der ich ein Boxlayout verwenden möchte, aber es wird eine Fehlermeldung angezeigt java.awt.AWTError: BoxLayout can't be shared
. Ich habe andere mit diesem Problem gesehen, aber sie haben es gelöst, indem sie das Boxlayout im Inhaltsbereich erstellt haben, aber genau das mache ich hier. Hier ist mein 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);
}
}
Ich habe auch diesen Fehler gefunden, der Folgendes verursacht:
Das JPanel ist noch nicht initialisiert, wenn es an das BoxLayout übergeben wird. Teilen Sie diese Zeile also folgendermaßen auf:
Das wird funktionieren.
quelle
Ich denke, dass eine wichtige Sache, die aus den vorherigen Antworten hervorgehoben werden muss, ist, dass das Ziel des BoxLayout (der erste Parameter) derselbe Container sein sollte, auf den die setLayout-Methode aufgerufen wird, wie im folgenden Beispiel:
quelle
Wenn Sie das Layout
JFrame
wie folgt verwenden :Das Steuerelement wird tatsächlich zum hinzugefügt,
ContentPane
sodass es so aussieht, als ob es zwischen demJFrame
und dem "geteilt" wirdContentPane
Tun Sie dies stattdessen:
quelle
JFrame
es normalerweise nicht benötigt wird (im Gegensatz zum AWTFrame
). Aus derJFrame
Dokumentation: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.
Indemframe
sie sich auf eineJFrame
Instanz beziehen .