JTextField kann nicht zu JFrame hinzugefügt werden

8

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.

%Vor%

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.

    
Sam 02.03.2013, 09:21
quelle

3 Antworten

8

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 )

    
Daniel Rikowski 02.03.2013, 09:25
quelle
3

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.

    
mgibsonbr 02.03.2013 09:25
quelle
-1

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:

%Vor%

Das sollte funktionieren.

    
Jop V. 02.03.2013 10:17
quelle