Java – JPanel size by inner components

javaswinguser-interface

Is it possible to tell JPanel to set its size to fit all components that it contains? Something like pack() for JFrame.

edit: The trick with preferredSize didn't help. I've got JSplitPane, where in one part there is GridBagLayout with many labels (see screenshot) and labels overlap each other.

screenshot http://foto.darth.cz/pictures/screen.png

Best Solution

After looking at the source code for pack(), I came up with:

    panel.setPreferredSize(panel.getPreferredSize());

This forces the panel to recalculate its preferred size based on the preferred sizes of its subcomponenents.

You may or may not have to call validate() afterward; in my tiny example, it seemed to make no difference, but the Javadoc says:

The validate method is used to cause a container to lay out its subcomponents again. It should be invoked when this container's subcomponents are modified (added to or removed from the container, or layout-related information changed) after the container has been displayed.

So I guess it depends on why you're having to repack your JPanel.

Related Question