我想我解決了我的問題,但我不知道它爲什麼這樣工作,所以我希望有人能解釋它所以我今後不會再犯同樣的錯誤。我不能讓BoxLayout的setPreferredSize()方法以我想要的方式工作
這裏有一個簡單的例子是編譯的我想要做的事:
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,而顯然需要整個屏幕,這是400×300。
感謝@camickr告訴我,我不應該爲我的面板設置首選大小,這幫助我找出問題來自哪裏。
謝謝!這解釋了它! –