Suche…


Syntax

  • frame.setLayout (new GridBagLayout ()); // Setze GridBagLayout als Frame
  • pane.setLayout (new GridBagLayout ()); // Setze GridBagLayout für Panel
  • JPanel-Fenster = neues JPanel (neues GridBagLayout ()); // Setze GridBagLayout für Panel
  • GridBagConstraints c = new GridBagConstraints () // Initialisiert eine GridBagConstraint

Wie funktioniert GridBagLayout?

Layouts werden immer dann verwendet, wenn Ihre Komponenten nicht nur nebeneinander angezeigt werden sollen. Das GridBagLayout ist nützlich, da es Ihr Fenster in Zeilen und Spalten unterteilt und Sie entscheiden, in welche Zeile und Spalte Komponenten eingefügt werden sollen und wie viele Zeilen und Spalten die Komponente groß ist.

Nehmen wir dieses Fenster als Beispiel. Gitterlinien wurden markiert, um das Layout anzuzeigen.

GridBagLayout visualisiert

Hier habe ich 6 Komponenten erstellt, die mit einem GridBagLayout angelegt wurden.

Komponente Position Größe
JLabel : "Meine erstaunliche Swing-Anwendung" 0, 0 3, 1
JButton : "Button A" 0, 1 1, 1
JButton : "Button B" 1, 1 1, 1
JButton : "Button C" 2, 1 1, 1
JSlider 0, 2 3, 1
JScrollBar 0, 3 3, 1

Beachten Sie, dass sich Position 0, 0 oben links befindet: Die Werte für x (Spalte) nehmen von links nach rechts zu, die Werte für y (Zeile) steigen von oben nach unten.

Um mit dem Auslegen von Komponenten in einem GridBagLayout zu beginnen, legen Sie zunächst das Layout Ihres JFrame oder Inhaltsbereichs fest.

frame.setLayout(new GridBagLayout());
//OR
pane.setLayout(new GridBagLayout());
//OR
JPanel pane = new JPanel(new GridBagLayout()); //Add the layout when creating your content pane

Beachten Sie, dass Sie niemals die Größe des Rasters definieren. Dies geschieht automatisch, wenn Sie Ihre Komponenten hinzufügen.

Anschließend müssen Sie ein GridBagConstraints Objekt erstellen.

GridBagConstraints c = new GridBagConstraints();

Um sicherzustellen, dass Ihre Komponenten die Größe des Fensters ausfüllen, möchten Sie möglicherweise die Gewichtung aller Komponenten auf 1 setzen. Mit der Gewichtung wird festgelegt, wie der Abstand zwischen Spalten und Zeilen aufgeteilt wird.

c.weightx = 1;
c.weighty = 1;

Möglicherweise möchten Sie auch sicherstellen, dass Komponenten so viel horizontalen Platz wie möglich beanspruchen.

c.fill = GridBagConstraints.HORIZONTAL;

Sie können auch andere Fülloptionen einstellen, wenn Sie möchten.

GridBagConstraints.NONE //Don't fill components at all
GridBagConstraints.HORIZONTAL //Fill components horizontally
GridBagConstraints.VERTICAL //Fill components vertically
GridBagConstraints.BOTH //Fill components horizontally and vertically

Beim Erstellen von Komponenten müssen Sie festlegen, wo sich das Raster befinden soll und wie viele Raster-Kacheln es verwenden soll. Um beispielsweise eine Schaltfläche in der 3. Zeile in der 2. Spalte zu platzieren und einen Raster von 5 x 5 zu beanspruchen, gehen Sie wie folgt vor. Beachten Sie, dass das Raster bei 0, 0 und nicht bei 1, 1 beginnt.

JButton button = new JButton("Fancy Button!");
c.gridx = 2;
c.gridy = 1;
c.gridwidth = 5;
c.gridheight = 5;
pane.add(buttonA, c);

Denken Sie beim Hinzufügen von Komponenten an Ihr Fenster daran, die Einschränkungen als Parameter zu übergeben. Dies ist in der letzten Zeile des obigen Codebeispiels zu sehen.

Sie können dieselben GridBagConstraints für jede Komponente wiederverwenden. GridBagConstraints sie nach dem Hinzufügen einer Komponente ändern, wird die zuvor hinzugefügte Komponente nicht geändert.

Beispiel

Hier ist der Code für das Beispiel am Anfang dieses Abschnitts.

JFrame frame = new JFrame("Super Awesome Window Title!"); //Create the JFrame and give it a title
frame.setSize(512, 256); //512 x 256px size
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //Quit the application when the JFrame is closed

JPanel pane = new JPanel(new GridBagLayout()); //Create a pane to house all content, and give it a GridBagLayout
frame.setContentPane(pane);

GridBagConstraints c = new GridBagConstraints();
c.weightx = 1;
c.weighty = 1;
c.fill = GridBagConstraints.HORIZONTAL;

JLabel headerLabel = new JLabel("My Amazing Swing Application");
c.gridx = 0;
c.gridwidth = 3;
c.gridy = 0;
pane.add(headerLabel, c);

JButton buttonA = new JButton("Button A");
c.gridx = 0;
c.gridwidth = 1;
c.gridy = 1;
pane.add(buttonA, c);

JButton buttonB = new JButton("Button B");
c.gridx = 1;
c.gridwidth = 1;
c.gridy = 1;
pane.add(buttonB, c);

JButton buttonC = new JButton("Button C");
c.gridx = 2;
c.gridwidth = 1;
c.gridy = 1;
pane.add(buttonC, c);

JSlider slider = new JSlider(0, 100);
c.gridx = 0;
c.gridwidth = 3;
c.gridy = 2;
pane.add(slider, c);

JScrollBar scrollBar = new JScrollBar(JScrollBar.HORIZONTAL, 20, 20, 0, 100);
c.gridx = 0;
c.gridwidth = 3;
c.gridy = 3;
pane.add(scrollBar, c);

frame.setVisible(true); //Show the window

Beispiel GridBagLayout



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow