invalidate()とvalidate()とrevalidate()の違い
各メソッドの働きについて良く混乱するので、まとめます。もっとも、Swingではinvalidate()とvalidate()を直接呼ぶ局面はほとんどないと思います。
invalidate()
- 自分自身と、全ての親コンポーネントをinvalidにする。
- このメソッドはフラグを立てるだけ。
validate()
revalidate()
例
以下のコンポーネント階層があったとして([o] = valid, [x] = invalid)
- rootPane [o]
- scrollPane [o]
- panel1 [o]
- label [o]
- panel2 [o]
- button [o]
- panel1 [o]
- scrollPane [o]
panel2.revalidate()を呼び出すと、その呼び出し直後は以下の状態になる。
- rootPane [x]
- scrollPane [x]
- panel1 [x]
- label [o]
- panel2 [x]
- button [o]
- panel1 [x]
- scrollPane [x]
そして、EDTのイベント消化後に再レイアウトが行われて、以下の状態になる。
- rootPane [x] (invalidフラグが立ったまま)
- scrollPane [o] (isValidateRoot()がtrueを返すので、ここから再レイアウトされる)
- panel1 [o] (再レイアウト)
- label [o]
- panel2 [o] (再レイアウト)
- button [o]
- panel1 [o] (再レイアウト)
- scrollPane [o] (isValidateRoot()がtrueを返すので、ここから再レイアウトされる)