BoxLayout を使用してこれを行うことができます。
JPanel verticalPane = new JPanel();
verticalPane.setLayout(new BoxLayout(verticalPane, BoxLayout.Y_AXIS));
JScrollPane pane = new JScrollPane(verticalPane);
//add what you want to verticalPane
verticalPane.add(new JButton("foo"));
verticalPane.add(new JButton("bar"));
もちろん、これは追加された各コンポーネントの推奨サイズを使用します。たとえば JPanel の優先サイズを変更する場合は、それを拡張して getPreferredSize をオーバーライドします。
class MyPanel extends JPanel(){
public Dimension getPreferredSize(){
return new Dimension(100,100);
}
}
注: BoxLayout は getPreferredSize を考慮しますが、他の LayoutManager は考慮しない場合があります。
私の答えを批判してください。完全に正しいかどうかはわかりません。問題を理解しているかどうかを知るために、反対意見を聞きたいと思っています。