Nicht in der Lage, zum hinzufügen von JTextField auf JFrame
Ich bin nicht in der Lage, die JTextField
zu JFrame
. Meine JFrame
enthält eine JLabel
und ein JTextField
.
Zuerst habe ich die JLabel
, und es funktioniert. Hier ist der code.
private static void createandshowGUI()
{
JFrame frame =new JFrame("HelloSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setBackground(Color.red);
frame.setSize(200,200);
JLabel label=new JLabel("New To Java!!");
frame.getContentPane().add(label);
frame.setVisible(true);
}
public static void main(String[] args) {
createandshowGUI();} //and it shows the output like below .
Dann habe ich die JTextField .
JLabel label=new JLabel("New To Java!!");
frame.getContentPane().add(label);
JTextField jtf=new JTextField();
frame.getContentPane().add(jtf);
frame.setVisible(true);
Aber es zeigt dann eine Ausgabe wie diese.
Bitte jemand mir helfen, dieses Problem.Kann ich mehr als eine Komponente zu JFrame?Als ich bin neu in Java, ich bin eine Verwirrung zwischen Rahmen,ContentPane und Layouts.
- +1 für die hervorragend strukturierte Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eigentlich sind Sie erfolgreich, indem die
JTextField
. Das problem ergibt sich aus der layout-manager, die sich über den gesamten Rahmen.Inhaltsfenster der
JFrame
verwendet eineBorderLayout
manager standardmäßig. (Siehe die How to Use BorderLayout)In meiner Anwendung eine immer landeten mit dem MigLayout manager, aber zuerst möchten Sie vielleicht machen Sie sich mit layout-Managern im Allgemeinen. (Siehe A Visual Guide to Layout Managers)
Ihre
ContentPane
hat eineBorderLayout
standardmäßig, die akzeptiert nur ein einzelnes element (in der Standard-position - die Mitte). Nachdem Sie Hinzugefügt, einem zweiten element (JTextField
), es ersetzt die Letzte (dieJLabel
).Beim hinzufügen von Elementen zu einem
Container
mit Hilfe der single-argumentadd
bist du nicht angeben, in welcher position Sie wollen, dass Sie, so dass der layout-manager wählt eine position auf. OTOH, wenn Sie Einschränkungen angeben (mit dem überlastet hinzufügen) dann haben Sie mehr Kontrolle darüber, wo das element platziert werden soll. Überprüfen Sie die Dokumentation für die einzelnen layout-manager, um zu sehen, wie Sie funktionieren und welche Grenzen Sie unterstützt.Für Ihre aktuelle situation, Sie können verwenden Sie ein intermediate
JPanel
(dieFlowLayout
als StandardLayoutManager
- die einfachste IMHO für die, die noch lernen), anstatt das hinzufügen von Elementen direkt auf den content-Bereich, oder ändern Sie einfach das layout auf etwas anderes.Einen
JFrame
kann nur eine Komponente (es sei denn, Sie verwenden, dass es eineBorderLayout
). Die Lösung ist die Verwendung einesJPanel
.Sie fügen die Objekte auf einem JPanel und fügen Sie dann die
JPanel
zu denJFrame
. Sie müssen hinzufügenimport javax.swing.JPanel;
zu. Sie können es tun, so etwas wie dieses:Sollte diese Arbeit.