06/12/21 22:51:29
>>289
どうもありがと。
JPanel にボタンを2つ貼り付けて、押されたから片方を remove するサンプルを作って試してみた。
revalidate() しないと、ボタンが削除されたのに、レイアウトが変更されないね。
これはたぶん、revalidate()を自動的に呼ぶのが、
レイアウトに影響を受けたコンポーネントが呼ぶからだと思う。
つまり、removeされた本人は revalidate() を自動的に呼ぶが、もうremoveされていて親がいないので、すぐにreturnされる。
なので、親のコンポーネントの方で revalidate() してあげる必要がある。
ちなみにオレがrevalidate() を使う必要があったのは、JTextArea に行番号を表示させる時。
JScrollPane上に表示されていない行が増えた場合に、増えた行の行番号が正しく表示されなかった。
これは上のレスで書いた通り、新しく増えた領域が再描画する領域として認識されていないからだと思う。
まぁ長々と書いたが、オレははっきり理解していないのだが。。。。