Ich kann JTextField
nicht zu JFrame
hinzufügen. Mein JFrame
enthält ein JLabel
und ein JTextField
.
Zuerst habe ich JLabel
hinzugefügt und es funktioniert. Hier ist der Code.
Dann habe ich JTextField hinzugefügt.
%Vor%Aber dann zeigt es eine Ausgabe wie diese.
Bitte helfen Sie mir bei diesem Problem.Kann ich mehr als eine Komponente zu JFrame hinzufügen? Da ich neu in Java bin, habe ich eine Verwirrung zwischen Frame, ContentPane und Layouts.
Tatsächlich gelingt es Ihnen, JTextField
hinzuzufügen. Das Problem, das Sie haben, stammt vom Layout-Manager, der es über den gesamten Rahmen erstreckt.
Der Inhaltsbereich von JFrame
verwendet standardmäßig einen BorderLayout
-Manager. (Siehe Verwendung von BorderLayout )
In meiner Anwendung endete die Verwendung des MigLayout -Managers immer zuerst Ich möchte mich mit Layout-Managern im Allgemeinen vertraut machen. (Siehe Ein visueller Leitfaden für Layout-Manager )
Ihr ContentPane
hat ein BorderLayout
Standardmäßig wird nur ein einzelnes Element akzeptiert (in der Standardposition - das Zentrum). Nachdem Sie ein zweites Element hinzugefügt haben ( JTextField
), ersetzt es das letzte ( JLabel
).
Wenn Sie Elemente zu Container
hinzufügen, indem Sie das Einzelargument add
verwenden, geben Sie nicht an, an welcher Position Sie sie haben möchten. Der Layout-Manager wählt also eine Position nach Belieben. OTOH, wenn Sie Einschränkungen angeben (mit dem überladen hinzufügen ), dann haben Sie mehr Kontrolle darüber, wo das Element platziert wird. Überprüfen Sie die Dokumente für jeden Layout-Manager, um zu sehen, wie sie funktionieren und welche Einschränkungen sie unterstützt.
Für Ihre aktuelle Situation können Sie ein intermediate JPanel
verwenden (mit FlowLayout
als Standard LayoutManager
- das einfachste IMHO für diejenigen, die noch lernen), anstatt Elemente direkt zum Inhaltsteil hinzuzufügen oder einfach das Layout auf etwas anderes zu ändern.
A JFrame
kann nur eine Komponente haben (es sei denn, Sie verwenden eine BorderLayout
). Die Lösung besteht darin, JPanel
zu verwenden.
Sie fügen die Objekte zu einem JPanel hinzu und fügen dann die JPanel
zur JFrame
hinzu. Sie müssen auch import javax.swing.JPanel;
hinzufügen. Du kannst es so machen:
Das sollte funktionieren.
Tags und Links java swing jframe layout-manager jtextfield