how to increase JFrame size according to number of

2020-04-30 02:01发布

问题:

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?

回答1:

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."