私はカードレイアウトJPANelを持っています。その中にはJScrollPaneがあり、その中にバネレイアウトのJPanelがあります。 springlayout JPanelは、JPanelを上から下に動的に追加しますが、JButtonがJPanelを超えた場合、JScrollPaneは余分なコンテンツに対応しません。また、コンテンツが追加されても、バネレイアウトのJPanelの高さは0のままです。 resizableプロパティを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
'明らかにspringlayout JPanelの高さは0のままです - SpringLayoutは必要なすべての制約のために使用するより複雑なレイアウトマネージャの1つです。私の提案は、別のレイアウトマネージャを使用することです。 SpringLayoutを本当に使いたいのであれば、[SpringLayoutの使い方](http://docs.oracle.com/javase/tutorial/uiswing/layout/spring.html)のSwingチュートリアルのセクションを読む必要があります。 )を参照してください。このチュートリアルには、他の標準レイアウトマネージャのセクションも含まれています。 – camickr
はい、他のレイアウトも試したことを忘れてしまいました。期待される出力は連絡先リストのようなもので、JPanelsというエントリがあります。私はGridLayoutを試しましたが、エントリのサイズを制御することはできません。 Box/BoxLayoutでは、項目はコンテナを超えて決して移動しません(gridlayoutも)。 GridBagLayoutにも同じ問題があります。境界線は問題外です(オーバーレイする必要はありません)。フローはラッピングのみで水平にします。 –
コンポーネントは使用可能なスペースに収まるようにサイズが設定されているため、GridLayoutは機能しません。 BoxLayoutまたはGridBagLayoutは、コンポーネントを垂直方向に追加するために機能します。 – camickr