[JAVA] GridBagLayout maakt JLabels 1pixel breed

Pagina: 1
Acties:

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 07:40

Kaastosti

Vrolijkheid alom!

Topicstarter
Na een paar combinaties van layout managers geprobeert te hebben viel mijn oog op de GridBagLayout. Da's voor de dingen die ik er mee wil de handigste manager, aangezien je redelijk vrij bent in hoe je het inricht. Het leek me ook goed te doen, aangezien je gewoon met een soort raster werkt en daar a-la colspan en rowspan in html, nu ook dit soort eigenschappen mee kunt geven aan andere elementen.

Wat ik probeer te doen is een mooi lijstje te maken waarbij ik elke keer een label en een textfield achter elkaar zet. In dit geval een JLabel "Lengte:" en een JTextField er achter. Dat ging best aardig, maar nu ik overal netjes coordinaten op heb gegeven voor de elementen worden alle JTextFields geminimaliseert naar 1 pixel breedte.

Als ik de labels uit de code sloop, worden de textfields ook weer normale breedte, ik zie alleen totaal niet waarom. Hier onder zie je het resultaat van de code als ik 'm nu uitvoer, met daaronder de code die er voor zou moeten zorgen dat lengte, breedte en diepte in rij 1 komen, en oppervlakte en inhoud in rij 2. Mijn vraag is dan ook hoe dit komt en nog beter, hoe ik er voor kan zorgen dat die dingen wel gewoon netjes ugh pixels breed worden.

Afbeeldingslocatie: http://members.ams.chello.nl/e.venema4/images/got/gridbaglayout.jpg

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
        setLayout( new GridBagLayout() );
        GridBagConstraints c = new GridBagConstraints();
        
        label_lengte = new JLabel( "Lengte:" );
        c.gridx = 0;
        c.gridy = 0;
        add( label_lengte, c );
        
        label_breedte = new JLabel( "Breedte:" );
        c.gridx = 0;
        c.gridy = 1;
        add( label_breedte, c );
        
        label_diepte = new JLabel( "Diepte:" );
        c.gridx = 0;
        c.gridy = 2;
        add( label_diepte, c );
        
        label_oppervlakte = new JLabel( "Oppervlakte:" );
        c.gridx = 2;
        c.gridy = 0;
        add( label_oppervlakte, c );
        
        label_inhoud = new JLabel( "Inhoud:" );
        c.gridx = 2;
        c.gridy = 1;
        add( label_inhoud, c );
        
        text_lengte = new JTextField( 8 );
        c.gridx = 1;
        c.gridy = 0;
        add( text_lengte, c );
        
        text_breedte = new JTextField( 8 );
        c.gridx = 1;
        c.gridy = 1;
        add( text_breedte, c );
        
        text_diepte = new JTextField( 8 );
        c.gridx = 1;
        c.gridy = 2;
        add( text_diepte, c);
        
        text_oppervlakte = new JTextField( 8 );
        c.gridx = 3;
        c.gridy = 0;
        add( text_oppervlakte, c );
        
        text_inhoud = new JTextField( 8 );
        c.gridx = 3;
        c.gridy = 1;
        add( text_inhoud, c );

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 16:28

Robtimus

me Robtimus no like you

Afbeeldingslocatie: http://www.robspoor.demon.nl/Panel.jpg

Dit krijg ik nadat ik jouw code heb gepaste in een text editor (kleine aanpassing om het compilend te krijgen):
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import java.awt.*;
import javax.swing.*;

public class Test extends JPanel
{
    public Test()
    {
        setLayout( new GridBagLayout() );
        GridBagConstraints c = new GridBagConstraints();

        JLabel label_lengte = new JLabel( "Lengte:" );
        c.gridx = 0;
        c.gridy = 0;
        add( label_lengte, c );

        JLabel label_breedte = new JLabel( "Breedte:" );
        c.gridx = 0;
        c.gridy = 1;
        add( label_breedte, c );

        JLabel label_diepte = new JLabel( "Diepte:" );
        c.gridx = 0;
        c.gridy = 2;
        add( label_diepte, c );

        JLabel label_oppervlakte = new JLabel( "Oppervlakte:" );
        c.gridx = 2;
        c.gridy = 0;
        add( label_oppervlakte, c );

        JLabel label_inhoud = new JLabel( "Inhoud:" );
        c.gridx = 2;
        c.gridy = 1;
        add( label_inhoud, c );

        JTextField text_lengte = new JTextField( 8 );
        c.gridx = 1;
        c.gridy = 0;
        add( text_lengte, c );

        JTextField text_breedte = new JTextField( 8 );
        c.gridx = 1;
        c.gridy = 1;
        add( text_breedte, c );

        JTextField text_diepte = new JTextField( 8 );
        c.gridx = 1;
        c.gridy = 2;
        add( text_diepte, c);

        JTextField text_oppervlakte = new JTextField( 8 );
        c.gridx = 3;
        c.gridy = 0;
        add( text_oppervlakte, c );

        JTextField text_inhoud = new JTextField( 8 );
        c.gridx = 3;
        c.gridy = 1;
        add( text_inhoud, c );
    }

    public static void main(String[] args)
    {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new Test());
        frame.pack();
        frame.setVisible(true);
    }
}
Het zou ook goed moeten gaan omdat je je textfields creeert met 8 kolommen. Als je die overal had weggelaten zou de preferred size van die textfields een stuk kleiner zijn, en dan krijg je wat je nu krijgt.

Maar misschien is het een idee te kijken naar de Forms library van JGoodies, ongeveer even krachtig maar een stuk gemakkelijker.

Edit:
Afbeeldingslocatie: http://www.robspoor.demon.nl/Panel2.jpg
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import java.awt.*;
import javax.swing.*;
import com.jgoodies.forms.layout.*;

public class Test2 extends JPanel
{
    public Test2()
    {
        CellConstraints c = new CellConstraints();
        FormLayout layout = new FormLayout(
            "pref, 1dlu, pref, 1dlu, pref, 1dlu, pref",
            "pref, 1dlu, pref, 1dlu, pref"
        );
        setLayout(layout);

        JLabel label_lengte = new JLabel( "Lengte:" );
        add( label_lengte, c.xy(1, 1) );

        JLabel label_breedte = new JLabel( "Breedte:" );
        add( label_breedte, c.xy(1, 3) );

        JLabel label_diepte = new JLabel( "Diepte:" );
        add( label_diepte, c.xy(1, 5) );

        JLabel label_oppervlakte = new JLabel( "Oppervlakte:" );
        add( label_oppervlakte, c.xy(5, 1) );

        JLabel label_inhoud = new JLabel( "Inhoud:" );
        add( label_inhoud, c.xy(5, 3) );

        JTextField text_lengte = new JTextField( 8 );
        add( text_lengte, c.xy(3, 1) );

        JTextField text_breedte = new JTextField( 8 );
        add( text_breedte, c.xy(3, 3) );

        JTextField text_diepte = new JTextField( 8 );
        add( text_diepte, c.xy(3, 5) );

        JTextField text_oppervlakte = new JTextField( 8 );
        add( text_oppervlakte, c.xy(7, 1) );

        JTextField text_inhoud = new JTextField( 8 );
        add( text_inhoud, c.xy(7, 3) );
    }

    public static void main(String[] args)
    {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new Test2());
        frame.pack();
        frame.setVisible(true);
    }
}
Zoals je ziet is het vrijwel identiek maar voor meer ingewikkelde user interfaces een stuk eenvoudiger met dezelfde kracht.

[ Voor 29% gewijzigd door Robtimus op 30-07-2005 15:47 ]

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 07:40

Kaastosti

Vrolijkheid alom!

Topicstarter
Hmm dat ziet er inderdaad wel netjes uit :) Wel raar dat mijn code het in een ander programma wel gewoon goed doet. Althans, doet wat ik er van verwacht. Bedankt voor het idee! :)

Okee dan het werkt :P

[ Voor 125% gewijzigd door Kaastosti op 31-07-2005 16:22 ]

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.