Рина Сергеева
Рина Сергеева9. Mai 2018 02:49

So erstellen Sie Leerräume im GridBagLayout-Manager

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.

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
A
ALO1ZE19. Oktober 2024 18:19
Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов5. Oktober 2024 17:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 21:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr9. Februar 2024 05:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 13:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick2. Oktober 2024 01:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 19:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 14:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken