問題は解決したと思いますが、なぜこのように機能するのかわかりません。今後同じ間違いを繰り返さないように、誰かが説明してくれることを願っています。
私がやろうとしていることをコンパイルできる簡単な例を次に示します。
public class BoxLayoutTest extends JFrame
{
public BoxLayoutTest()
{
setSize(400,300);
JPanel mainPanel = new JPanel(new FlowLayout());
setContentPane(mainPanel);
JPanel subPanel = new JPanel();
subPanel.setLayout(new BoxLayout(subPanel, BoxLayout.PAGE_AXIS));
subPanel.setBackground(Color.BLUE);
JLabel labelTest = new JLabel("This is a test");
subPanel.add(labelTest);
labelTest.setPreferredSize(new Dimension(150, 20));
mainPanel.add(subPanel);
System.out.println(mainPanel.getSize());
}
public static void main( String[] args )
{
BoxLayoutTest testFrame = new BoxLayoutTest();
testFrame.setVisible(true);
}
}
最初は、JLabel を含むパネルが適切なサイズでサイズ変更されないという問題がありました。サブパネルの優先サイズとして mainPanel.getSize() のバリエーションを使用していたためであることがわかりました。この例では、機能する実際の数値を使用しています。
古い方法ではうまくいかなかった理由 (実際に誰かに説明してもらいたいことです) は、SOP の行に見られるように、mainPanel.getSize() が幅と高さ 0 を返す理由です。明らかに 400x300 の画面全体を占めています。
パネルにpreferredSizeを設定すべきではないことを教えてくれた@camickrに感謝します。これは、問題の原因を突き止めるのに役立ちました。