Layout im JPanel

Jellysheep

Erfahrenes Mitglied
Hi,
ich habe ein JPanel in meinem JFrame/JPanel, also kann sich auch mal die Größe ändern.
Ich habe jetzt drei Spalten für eine Eingabe:
1. ein JLabel, das beschreibt, was eingegeben werden soll
2. ein JTextField zur Eingabe
3. ein JLabel für die Einheit (Volt etc.)
und das Ganze mehrmals untereinander.
Wenn sich die Größe ändert, soll sich auch die Breite der JLabels und JTextFields anpassen, aber die Höhe gleich bleiben und es soll auch nichts verschoben werdemn.
Geht das so? Und mit welchem Layoutmanager?
 
So, das GridBagLayout erfüllt soweit meine Wünsche, aber nicht perfekt...
Wie man im Bild sieht, wird überflüssiger Platz nicht genutzt und Textfelder zusammengeschoben... Außerdem wollte ich, dass nach je einem Label, einem Textfeld und dem kleinen Label hintendran ein bisschen Platz zum nächsten Label kommt, wie geht das?
Hier ist mal ein Codeausschnitt:
Java:
setLayout(new GridLayout(1, 5));
        GridBagLayout gbl = new GridBagLayout();
        GridBagConstraints gbc1 = new GridBagConstraints(), gbc2 = new GridBagConstraints(), gbc3 = new GridBagConstraints();
        gbc1.insets = gbc2.insets = gbc3.insets = new Insets(10,10,10,10);
        gbc1.weightx = 100;
        gbc2.weightx = 100;
        gbc3.weightx = 10;
        gbc1.weighty = gbc2.weighty = gbc3.weighty = 100;
        gbc1.fill = gbc2.fill = gbc3.fill = GridBagConstraints.HORIZONTAL;
        gbc1.gridx = 0;
        gbc1.gridwidth = 2;
        gbc1.gridheight = 1;
        gbc1.weighty = 0.9;
        gbc2.gridx = 0;
        gbc2.gridheight = gbc2.gridwidth = 1;
        gbc2.weighty = 0.1;
        gbc3.gridx = 1;
        gbc3.gridheight = gbc3.gridwidth = 1;
        for(int i = 0; i<pc; i++){
            p[i] = new JPanel();
            p[i].setLayout(gbl);
            add(p[i]);
        }
        p[0].setBorder(BorderFactory.createTitledBorder("Energiequelle"));
        gbc1.gridy = 0;
        gbc2.gridy = gbc3.gridy = 1;
        p[0].add(l[++lc] = new JLabel("Spannung:"));
        gbl.setConstraints(l[lc], gbc1);
        p[0].add(tf[++tfc] = new JTextField(""+arg6.sz_spann_v));
        gbl.setConstraints(tf[tfc], gbc2);
        p[0].add(l[++lc] = new JLabel("V"));
        gbl.setConstraints(l[lc], gbc3);
        gbc1.gridy = 3;
        gbc2.gridy = gbc3.gridy = 4;
        p[0].add(l[++lc] = new JLabel("Max. Energie:"));
        gbl.setConstraints(l[lc], gbc1);
        p[0].add(tf[++tfc] = new JTextField(""+arg6.sz_leist_kwp));
        gbl.setConstraints(tf[tfc], gbc2);
        p[0].add(l[++lc] = new JLabel("kWp"));
        gbl.setConstraints(l[lc], gbc3);
        gbc1.gridy = 5;
        gbc2.gridy = gbc3.gridy = 6;
        p[0].add(l[++lc] = new JLabel("Tatsächlicher Wirkungsgrad:"));
        gbl.setConstraints(l[lc], gbc1);
        p[0].add(tf[++tfc] = new JTextField(""+arg6.leistungsgrad_bz_prozent));
        gbl.setConstraints(tf[tfc], gbc2);
        p[0].add(l[++lc] = new JLabel("%"));
        gbl.setConstraints(l[lc], gbc3);
(p[0] ist ein JPanel auf dem JFrame)
 
Mit den Insets gibst du an wieviel Platz LROU gelassen werden soll. Ansonsten bräuchte ich nen Stück lauffähigen Code. So GUI-Krams ist immer schwierig anhand von Code zu erkennen.
 
Zurück