プログラマメモ2 - programmer no memo2

getRootPaneを使って再描画 2007/12/01

javaです。swingです。getRootPaneです。
正しいかどうかちょっと不安。

こういう問題に出会いました。
Jlistで表示しているデータを変更して、すぐに表示に変更されない。

こういう場合、実は、modelとviewの考えかかたをベースに、イベント、メッセージのやりとりをイメージできればなんとなく理解できるのではないかと思います。



modelが変更された場合、viewに変更した旨を通知しないといけません。そうしないと、viewはデータが変更されたことを知らずに人に変化していないviewを見せ続けてしまいます。

通知してないのだけど、viewで変化したデータを見ることができる場合があります。viewは表示するときにmodel(データ)を参照します。そのタイミングでデータの変更を知ってそのまま表示するから、うまくいきます。

理想は、modelが変更した場合には、変更したというメッセージを伝えて、viewが表示しなおす(update,repaint)することだと思います。ですが、そうなってないプログラムを作成してしまう場合があります。

そういったときは、viewに再描画を依頼してview側から変更されたmodelを参照させてます。

JComponent系クラス.getRootPane().repaint()

を使うと便利な場合があります。

: