JScrollPaneの内部にGridBagLayoutを持つJPanelがあります。また、JPanel内に「追加」ボタンがあり、これをクリックするとJPanelから削除され、別のコンポーネントの新しいインスタンスがJPanelに追加され、JPanelに追加されます。この種のコンポーネントでは、コンポーネントのリストが増加し、その後に「追加」ボタンが追加されます。JScrollPane内のGridBagLayoutが正しくサイズ変更されない
新しいコンポーネントを追加すると、JPanelは新しいコンポーネントに対応するように伸び、JScrollPaneは期待どおりに動作し、JPanelの全長をスクロールできます。
これは、アドオンがどのように働くかある:
jPanel.remove(addButton);
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = GridBagConstraints.RELATIVE;
jPanel.add(new MyComponent(), c);
jPanel.add(addButton, c);
jPanel.validate();
jPanel.repaint();`
除去が追加されたコンポーネント自身の内側のボタンをクリックすることで動作します。彼らはちょうど良いJPanelから自分自身を削除します。しかし、JPanelは、コンポーネントのリストを再センタリングして、伸ばしたサイズを保持します。
Container parent = myComponent.getParent();
parent.remove(myComponent);
parent.validate();
parent.repaint();`
質問は、コンポーネントを削除するとき、なぜ私のGridBagLayoutのJPanelのは、コンポーネントを追加するときにサイズを変更しませんが、次のとおりです。
これは除去がどのように働くかありますか?あなたがするJScrollPaneを再検証し、再描画する必要が
はどうなりますか? –
[SSCCE](http://sscce.org)に問題を示す質問を投稿すると、より良い回答が早く得られます。 – camickr
ホバークラフトに感謝しました。逃した 'revalidate'。 – naugler