In meinem Programm habe ich mich entschieden, die GUI-Elemente mit dem Layout-Manager GridBagLayout anzuordnen. Es ist der vielseitigste Layout-Manager. Es ordnet die Elemente tabellarisch an, aber jede Zelle kann eine beliebige Größe, Breite, Höhe usw. haben.
Die Methode zum Anordnen der Elemente dieses Managers kann wie folgt dargestellt werden:
Im Zuge der Arbeit mit diesem Layout-Manager hatte ich eine Frage, wie man einen Abstand zwischen Elementen machen kann, für die ich im Moment mehrere Möglichkeiten anbieten kann, dieses Problem zu lösen.
Zunächst einmal hat ein auf einem Panel platziertes Element standardmäßig eine Breite und Höhe von 1 Zelle.
Das JTextField-Element aus dem obigen Bild kann wie folgt definiert werden:
JTextField textField = new JTextField(); constraints.gridwidth = 2;
- constraints.gridwidth - verantwortlich für die Anzahl der horizontal belegten Zellen;
- constraints.gridheight - jeweils für die Anzahl der vertikal besetzten Zellen;
- constraints.gridx und constraints.gridy - sind verantwortlich für den Platz entlang der X- oder Y-Achse, den das Objekt einnimmt.
Machen Sie ein Leerzeichen zwischen Elementen in derselben Zeile
Um Leerzeichen zu implementieren, kam ich als erstes auf die Idee, dass Sie das erste Element einfach auf gridx = 0 und das andere gridx = 2 setzen können (das 1. überspringen). Dies funktioniert aber nur, wenn diese Reihe nicht die erste ist und davor bereits Objekte platziert wurden, deren Gesamt- oder Einzelbreite 3 oder mehr betrug. Ungefähr so:
In anderen Fällen können Sie, um Platz zwischen Elementen in derselben Zeile zu schaffen, Box.createHorizontalStrut (50) verwenden, wodurch ein unsichtbares Element der angegebenen Größe erstellt wird.
JButton button = new JButton("Старт"); constraints.gridx = 0; gblWidgetPanel.setConstraints(button, constraints); widgetPanel.add(button); constraints.gridx = 1; widgetPanel.add(Box.createHorizontalStrut(50),constraints); button = new JButton("Стоп"); constraints.gridx = 2; gblWidgetPanel.setConstraints(button, constraints); widgetPanel.add(button);
Verwenden von Box. createVerticalStrut(int) In ähnlicher Weise können Sie ein Leerzeichen zwischen Elementzeichenfolgen erstellen.
Nächster Weg: Verwenden von constraints.weighty und constaints.weightx.
Wenn das resultierende Layout aller Elemente vertikal oder horizontal kleiner ist als die Fläche, die sie ausfüllen sollen, wird der gesamte freie Platz entsprechend ihrer Gewichtung auf die Zeilen- oder Spaltenelemente verteilt. Genauso wird die Gewichtung in constraints.weighty und constaints.weightx. gesetzt. Sie wird in Verhältnissen ab 100% gesetzt. (zum Beispiel: 0,5 = 50 %). Wenn es auf Null gesetzt wird, erhält dieses Element keinen zusätzlichen Platz. Standardmäßig sind die Werte aller Tabellenzellen Null. Das heißt, es wird ungenutzter Platz zwischen dem oberen und unteren Rand der Tabelle vorhanden sein.
Beispiel:
JLabel label = new JLabel("Нео, какую таблетку выбираешь ?"); constraints.gridwidth = 1; // сколько ячеек занимает объект constraints.gridy = 0; // какая по счету ячейка по вертикали constraints.weighty = 0.5; // 50% свободного пространства gblWidgetPanel.setConstraints(label, constraints); widgetPanel.add(label); JButton button = new JButton("Красную"); constraints.gridy = 1; constraints.weighty = 0.25; // 25% свободного пространства gblWidgetPanel.setConstraints(button, constraints); widgetPanel.add(button); JButton button = new JButton("Синюю"); constraints.gridy = 2; constraints.weighty = 0.25; // 25% свободного пространства gblWidgetPanel.setConstraints(button, constraints); widgetPanel.add(button);
Und der letzte Weg für heute: mit EmptyBorder
Ermöglicht dem Benutzer das Erstellen eines leeren transparenten Rahmens für GUI-Elemente.
public EmptyBorder(int top, int left, int bottom, int right)
label = new JLabel("Три"); constraints.gridy = 0; // какая по счету ячейка по вертикали label.setBorder(BorderFactory.createEmptyBorder(10, 90, 0, 0)); gblWidgetPanel.setConstraints(label, constraints); widgetPanel.add(label); label = new JLabel("Два"); constraints.gridy = 1; // какая по счету ячейка по вертикали label.setBorder(BorderFactory.createEmptyBorder(10, 60, 0, 0)); gblWidgetPanel.setConstraints(label, constraints); widgetPanel.add(label); label = new JLabel("Один"); constraints.gridy = 2; // какая по счету ячейка по вертикали constraints.gridx = 0; label.setBorder(BorderFactory.createEmptyBorder(10, 30, 10, 0)); gblWidgetPanel.setConstraints(label, constraints); widgetPanel.add(label); label = new JLabel("Поднимемся по ступенькам карьерной лестницы ?"); label.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); constraints.gridy = 3; // какая по счету ячейка по вертикали gblWidgetPanel.setConstraints(label, constraints); widgetPanel.add(label);
Insgesamt
Der Artikel stellte 3 Möglichkeiten vor, mit dem GridBagLayout-Layout-Assistenten Leerzeichen zwischen Elementen zu erstellen:
Kasten. createHorizontalStrut (int) und Box. createVerticalStrut(int)
constraints.weighty und constaints.weightx
Leerer Rand
Jeder von ihnen ist in einer bestimmten Situation nützlich. Welche Sie wählen, bleibt Ihnen überlassen. Möglicherweise gibt es andere Möglichkeiten, die in diesem Artikel nicht behandelt werden.