Ja, es gibt da einen Haufen Beispiele. Die gridx
/gridy
sind nicht die Größe, sondern die Koordinaten.
Und üblicherweise übergibt man die Constraints direkt, wenn man die component hinzufügt:
panel.add(button, buttonConstraints);
panel.add(slider, sliderConstraints);
panel.add(textField, textFieldConstraints);
Das kann recht schnell aufwändig und unübersichtlich werden. Ich versuche üblicherweise, Layouts durch verschachtelte BorderLayout
, GridLayout
und manchmal FlowLayout
oder BoxLayout
zu basteln, und meistens klappt das. Der einzige Fall, für den ich GridBagLayout
verwende, ist sowas wie
------------------------------------------------------
| Label | TextField | Button |
------------------------------------------------------
| LabelWithLongText | TextField | Button |
------------------------------------------------------
| Label | TextField | ButtonWithLongText |
------------------------------------------------------
weil man sonst diese Spalten-Ausrichtung nicht hinkriegt. Da hatte ich mir mal eine utility-Methode gebastelt https://github.com/javagl/CommonUI/blob/master/src/main/java/de/javagl/common/ui/GridBagLayouts.java#L52 mit der man mit sowas wie
JPanel panel = new JPanel(new GridBagLayout());
int row = 0;
GridBagLayouts.addRow(panel, row++, 1, label0, textField0, button0);
GridBagLayouts.addRow(panel, row++, 1, label1, textField1, button2);
GridBagLayouts.addRow(panel, row++, 1, label2, textField2, button2);
...
schnell so Zeilen hinzufügen kann.