JScrollPane 内に GridBagLayout を持つ JPanel があります。また、JPanel 内に「追加」ボタンがあり、クリックすると JPanel から削除され、別のコンポーネントの新しいインスタンスが JPanel に追加され、それ自体が JPanel に追加されます。この種のコンポーネントのリストが増え、その後に「追加」ボタンが続きます。
新しいコンポーネントの追加は正常に機能し、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 のサイズが変更されるのに、コンポーネントを削除するときに変更されないのはなぜですか?