我有一个cardlayout JPanel,里面是一个JScrollPane,里面是一个springlayout JPanel。springlayout JPanel 是与 JPanel 从上到下动态添加的,但是当 JButtons 超出 JPanel 时,JScrollPane 不会容纳额外的内容。此外,尽管添加了内容,但显然 springlayout JPanel 的高度仍然为 0。将 resizable 属性设置为 true 也无济于事。
这是一个代码片段。我省略了卡片布局 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