wake-up-neo.com

Java Swing JFrame-Layout

Ich habe gerade einen einfachen Code geschrieben, in dem ein Textfeld und eine Schaltfläche im Hauptrahmen erscheinen sollen, aber nach dem Ausführen wird nur das Textfeld angezeigt.

Wenn ich den Code der Schaltfläche nach dem Textfeld schreibe, wird nur die Schaltfläche angezeigt.

Irgendeine Idee warum?

    JFrame mainframe=new JFrame();
    mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mainframe.setBounds(0,0,200,200);
    JButton jb=new JButton();
    jb.setText("Leech");
    mainframe.add(jb);
    JTextField link=new JTextField(50);
    mainframe.add(link);
    mainframe.pack();
    mainframe.setVisible(true);
10
DanMatlin

Fügen Sie Ihre Komponenten zu einem JPanel hinzu und fügen Sie dieses Bedienfeld dann zum Inhaltsbereich von JFrame hinzu.

JFrame window = new JFrame();
JPanel mainframe = new JPanel();

window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setBounds(0,0,200,200);

JButton jb = new JButton();
jb.setText("Leech");

mainframe.add(jb);

JTextField link = new JTextField(50);
mainframe.add(link);

window.getContentPane().add(mainframe);
window.pack();
window.setVisible(true);
5
Ibrahim

Das Standardlayout für eine JFrame ist eine BorderLayout. Das Aufrufen der Methode add für eine Container mit einem solchen Layout entspricht einem Aufruf von add(..., BorderLayout.CENTER). Jeder der Speicherorte der BorderLayout kann nur ein Element enthalten. Also zwei Anrufe tätigen

mainframe.add(jb);
mainframe.add(link);

das Ergebnis ist ein CENTER mit der zuletzt hinzugefügten Komponente. Wenn Sie dies vermeiden möchten, können Sie es entweder an verschiedenen Orten hinzufügen oder einen anderen Layout-Manager (zum Beispiel eine FlowLayout) verwenden, indem Sie JFrame#setLayout aufrufen.

11
Robin

Verwenden Sie anstelle des direkten Hinzufügens von Komponenten zum JFrame ein JPanel als Container mit dem gewünschten LayoutManager .

Hier finden Sie mehrere Tutorials zu Layout-Managern.

Grundsätzlich ist der LayoutManager in Swing für das Layout der untergeordneten Komponenten verantwortlich (Festlegung ihrer Position und Größe). Daher sollte jede Containerkomponente, die Sie in Ihrer App verwenden, mit dem entsprechenden LayoutManager konfiguriert werden.

9
Heisenbug

Sie können auch so etwas wie Flow-Layout verwenden, das das von JPanel verwendete Standardlayout ist. Es wird verwendet, um Komponenten in einer Linie oder einer Reihe anzuordnen. Zum Beispiel von links nach rechts oder von rechts nach links:

enter image description here

Das Flow-Layout ordnet die Komponenten in einer Linie an. Wenn kein Platz mehr vorhanden ist, werden alle verbleibenden Komponenten in die nächste Zeile verschoben. Align-Eigenschaft bestimmt die Ausrichtung der Komponenten wie links, rechts, zentriert usw.

Um es zu verwenden, müssen Sie das JFrame-Layout mithilfe von JFrame.setLayout (Layout) festlegen und das Flow-Layout als Parameter übergeben.

Das folgende Beispiel zeigt Komponenten, die im Flow-Layout angeordnet sind:

package example.com;

import Java.awt.BorderLayout;
import Java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class FlowLayoutExample {

    FlowLayoutExample(){
        JFrame frame = new JFrame("Flow Layout");
        JButton button, button1, button2, button3, button4;
        button = new JButton("button 1");
        button1 = new JButton("button 2");
        button2 = new JButton("button 3");
        button3 = new JButton("button 4");
        button4 = new JButton("button 5");
        frame.add(button);
        frame.add(button1);
        frame.add(button2);
        frame.add(button3);
        frame.add(button4);
        frame.setLayout(new FlowLayout());
        frame.setSize(300,300);  
        frame.setVisible(true);  

    }
    public static void main(String[] args) {
        new FlowLayoutExample();
    }
}

Check out to Weitere Informationen zu JFrame-Layouts .

0
Johnny

Der Standardlayout-Manager von JFrame ist BorderLayout. Wenn Sie das automatische Layout wünschen, können Sie das FlowLayout verwenden:

mainframe.setLayout(new FlowLayout());

Wenn Sie Koordinaten mit der Methode setBounds () angeben möchten, müssen Sie die Einstellung des Layout-Managers in JFrame aufheben:

mainframe.setLayout(null);
jb.setBounds(10,10,100,50);
link.setBounds(10,70,180,100);
0
guest

wenn Sie BorderLayout Documentation sehen mainframe.add (jb); ist gleich mainframe.add (jb, BorderLayout.CENTER); mainframe.add (link); ist gleich mainframe.add (jb, BorderLayout.CENTER);

es wird also nur der letzte angezeigt

0
John Dadi Leop