getRootPaneを使って再描画
2007/12/01
java
swing
javaです。swingです。getRootPaneです。
正しいかどうかちょっと不安。
こういう問題に出会いました。
Jlistで表示しているデータを変更して、すぐに表示に変更されない。
こういう場合、実は、modelとviewの考えかかたをベースに、イベント、メッセージのやりとりをイメージできればなんとなく理解できるのではないかと思います。
modelが変更された場合、viewに変更した旨を通知しないといけません。そうしないと、viewはデータが変更されたことを知らずに人に変化していないviewを見せ続けてしまいます。
通知してないのだけど、viewで変化したデータを見ることができる場合があります。viewは表示するときにmodel(データ)を参照します。そのタイミングでデータの変更を知ってそのまま表示するから、うまくいきます。
理想は、modelが変更した場合には、変更したというメッセージを伝えて、viewが表示しなおす(update,repaint)することだと思います。ですが、そうなってないプログラムを作成してしまう場合があります。
そういったときは、viewに再描画を依頼してview側から変更されたmodelを参照させてます。
JComponent系クラス.getRootPane().repaint()
を使うと便利な場合があります。
: