これはあなたたちにとって難しいものです:)
基本的に、2つの列を持つGridBagLayoutがあります。各列にスクロールペインでラップされたリストです。スクロールペインは両方向に引き伸ばされます。
このパネルの高さを徐々に下げると(ウィンドウの端をドラッグして)、スクロールペインで「ランダムな」サイズ変更が行われているのがわかります。
最初のHscrollバーが表示されると、2番目の幅が狭くなります
その後、2番目の幅は理由もなく再び縮小されます...
コンポーネントをラップしない場合は、この動作を取得しないでください。
また、右側のリストをツリーに置き換えると、動作が異なります。ウィンドウの高さを380-ich px以下に縮小すると、ツリーのサイズが変更されます...
コンポーネントをラップしない場合、ウィンドウのサイズを変更し続けると、とにかくツリーのサイズが変更されます。
何が起こっているのか分かりますか?
PS:私が構築しようとしている実際のレイアウトは、この例よりも複雑です。それまでの間、SpringLayoutを使用してやりたいことを実行しますが、セットアップには多くの(それほど美しくはない)ことが必要です。
protected static ListModel newListModel(int n) {
DefaultListModel lm = new DefaultListModel();
for (int i = 0; i < n; ++i)
lm.addElement("AAA");
return lm;
}
protected static JComponent createContentPane() {
JPanel pane = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.gridy = 0;
gbc.gridx = 0;
pane.add(new JScrollPane(new JList(newListModel(12))), gbc);
++gbc.gridx;
pane.add(new JScrollPane(new JList(newListModel(4))), gbc);
return pane;
}
public static void main(String[] args) {
JFrame f = new JFrame();
f.getContentPane().add(createContentPane());
f.setSize(800, 400);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
f.setVisible(true);
}