Surajとwillcodejavaforfoodは、私を良い方向に導いてくれました。
メソッドで実際に何が行われているのかを確認するとpack()
、これは主に現在のサイズを。によって返されるサイズに設定していることがわかりますgetPreferredSize()
。
これから、私はそのような解決策を作ることができました:
// Creating the panel
JPanel lPanel = new JPanel();
//lPanel.setSize(1000, 1000); //default size, not needed anymore
lPanel.setLayout(new BoxLayout(lPanel, BoxLayout.PAGE_AXIS));
//Adding the content
lPanel.add(new JLabel("Blah"));
// etc...
//Adjust the panel to its preferred size
lPanel.setSize(lPanel.getPreferredSize());
//Call the layout method
//(this will adjust the content components to their correct size and position)
lPanel.doLayout();
この方法は正しく機能し、パネルとそのコンテンツを正しいサイズに調整します(そして、「適切なサイズを見つける方法」という単純な方法で私の質問に答えますgetPreferredSize()
)。
ただし、コンテンツが収まるように初期サイズを十分に大きく設定する必要があります。そうしないと、レイアウトに配置されません。これは少し残念で、実際には「クリーン」ではありませんが、今のところ、それを回避する方法を見つけることができません。
編集:実際には、getPreferredSize()
を呼び出す前であっても正しい値を返すため、デフォルトのサイズは必要ありませんでしdoLayout()
た。そのため、layoutメソッドを呼び出す前に、パネルを適切なサイズに設定できます。