Search code examples
javaswingjframewindowjpanel

how to increase JFrame size according to number of JPanel(table) rows in swing


I have swing application which does following:

public void init() {
    jFrame = new JFrame();
...
    jFrame.add(sortingDataInputComponent.asComponent()); 
...
    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jFrame.pack();
    jFrame.setVisible(true);
    jFrame.toFront();
}

there sortingDataInputComponent is JPanel with

jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.Y_AXIS));

inside of which there is another JPanel with

jPanel.setLayout(new GridLayout(0,numberOfColumns));

where

private final int numberOfColumns = 3;

and inner jpanel grows at button press:

    jPanel.add(rowElement.getLabel(), insertionIndex);      
    jPanel.add(rowElement.getField(), insertionIndex + 1);
    jPanel.add(rowElement.getDeleteButton(), insertionIndex + 2);

    rowElements.add(rowElement);

    jPanel.revalidate();
    jPanel.repaint();

but the main windows does not grow with JPanel. It has the same initial size. How to make JFrame grow with the growth of inner JPanels?


Solution

  • Implement the Scrollable interface in the component to which you add rows and override getPreferredScrollableViewportSize() as shown here for JTable and here for JList. Invoking pack() on the enclosing Window will cause it to be "sized to fit the preferred size and layouts of its subcomponents."