我有一個cardlayout JPanel,裏面是一個JScrollPane,裏面是一個springlayout JPanel。 springlayout JPanel是從上到下動態添加JPanel,但是當JButton超越JPanel時,JScrollPane不支持額外的內容。另外,儘管添加了內容,但顯然彈簧佈局JPanel的高度仍爲0。將可調整大小的屬性設置爲true也不起作用。JScrollPane沒有響應,因爲JPanel沒有調整大小
這是一段代碼片段。我省略了卡片佈局JPanel和代碼切換卡片。
SpringLayout mainlayout = new SpringLayout();
JPanel maincard = new JPanel(mainlayout); // springlayout JPanel
for (int i = 0; i < info.size(); i++) {
GridLayout entryLayout = new GridLayout(1, 1);
JPanel entry = new JPanel(entryLayout);
entry.setSize(800, 30);
JButton name = new JButton();
name.setSize(250, 30);
name.setText(info.get(i).name);
entry.add(name);
mainlayout.putConstraint(SpringLayout.NORTH, entry,
i * 100 + 5,
SpringLayout.NORTH, maincard); // moves JPanel lower and lower
maincard.add(entry);
}
maincard.setSize(width, 30 * (info.size() + 1));
maincard.revalidate();
JScrollPane scroll = new JScrollPane(maincard);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scroll.setSize(200, 200); // this and setPreferredSize don't affect
cardpanel.add(scroll, cardName);
cardpanel.setSize(20, 200); // no effect
'顯然彈簧佈局JPanel的高度依然爲0' - SpringLayout是由於所需的所有約束而使用的更復雜的佈局管理器之一。我的建議是使用另一個佈局管理器。或者如果你真的想使用SpringLayout,那麼你需要閱讀Swing教程中有關[如何使用SpringLayout]的部分(http://docs.oracle.com/javase/tutorial/uiswing/layout/spring.html )瞭解更多信息和工作示例。本教程還包含有關其他標準佈局管理器的部分。 – camickr
是的,我忘了提及我也嘗試了其他佈局。預期的輸出應該是聯繫人列表,其中的條目是JPanel。我試過GridLayout,但我無法控制條目的大小。對於Box/BoxLayout,條目永遠不會超出容器(gridlayout)。 GridBagLayout有同樣的問題。邊框不存在問題(我不需要疊加),並且流程僅用於包裝的水平。 –
GridLayout將不起作用,因爲組件大小適合可用空間。 BoxLayout或GridBagLayout將用於垂直添加組件。 – camickr