Dot NET
Dot NET

Reputation: 4897

How to make the vertical gap in a BoxLayout smaller?

I've got the following form which uses a vertical BoxLayout and FlowLayout JPanels for rows:

enter image description here

How can I make the huge gap between each row smaller? This is my code:

Upvotes: 3

Views: 12559

Answers (3)

Zweibieren
Zweibieren

Reputation: 412

What you need is greedy glue. Unless the glue is greedy it and its siblings all receive a portion of any extra space. A glue is a Box.Filler object and has a method changeShape to reset its size constraints. To make it greedy, set the preferred size to Integer.MAX_VALUE:

    Box.Filler glue = Box.createVerticalGlue();
    glue.changeShape(glue.getMinimumSize(), 
                    new Dimension(0, Short.MAX_VALUE), // make glue greedy
                    glue.getMaximumSize());

Add this glue element as the last item in your outer box.

Upvotes: 4

camickr
camickr

Reputation: 324128

The problem is that the BoxLayout respects the maximum size of the components. Since panels don't have a maximum size each panel increases in height to take up the available space.

Another solution is to determine the maximum size of each panel after you add the components to the panel:

pnlName.setMaximumSize( pnlName.getPreferredSize() );
pnlSurname.setMaximumSize( pnlSurname.getPreferredSize() );
pnlAge.setMaximumSize( pnlAge.getPreferredSize() );

Upvotes: 13

ben75
ben75

Reputation: 28706

You can use glue (invisible component) to fill free space. See this doc

Instead of a box layout, you can also use a VerticalLayout. Unfortunatelly, it doesn't exist in swing api, but there are lot of free implementation of such layout available.

for instance : http://www.java2s.com/Code/Java/Swing-JFC/AverticallayoutmanagersimilartojavaawtFlowLayout.htm

Upvotes: 5

Related Questions