org.jdesktop.animation.timing.interpolation.PropertySetterを使ってpainterのプロパティを変化させようとした。
2008/08/17
java
swingx
timingframework
org.jdesktop.swingx.painterを使って色が変化するエフェクトをつけたいので、いろいろ調べています。
timingframeworkを使うと簡単にアニメーションとかできそうなので、試しつつ、org.jdesktop.animation.timing.interpolation.PropertySetterを使ってpainterのプロパティを変化させようとしたのですが、どうも値は変更されているが、画面の再描画がされない。
具体的には、CheckerboardPainterの色をマウスオーバー時に変更したい。
JXPanelにマウスがのっかると色が黒から青へ変化。ぬけるともとの色にもどる。
Animator animator = PropertySetter.createAnimator(1000, checkerboardPainter,
"LightPaint", Color.BLACK, Color.BLUE);
MouseTrigger mouseTrigger = MouseTrigger.addTrigger(panel, animator,
MouseTriggerEvent.ENTER, true);
"LightPaint", Color.BLACK, Color.BLUE);
MouseTrigger mouseTrigger = MouseTrigger.addTrigger(panel, animator,
MouseTriggerEvent.ENTER, true);
上記だとどうもうまくいかない。
windowサイズを変えたりとかするといろが変わってくれたりした。
※osx上で。
で、考えたのは、painter上のpropertyが変更されたというイベントを受け取ったらpanelにrepaintさせるという方法。
checkerboardPainter.addPropertyChangeListener(new PropertyChangeListener(){
public void propertyChange(PropertyChangeEvent evt) {
System.out.println("***");
panel.repaint();
}});
public void propertyChange(PropertyChangeEvent evt) {
System.out.println("***");
panel.repaint();
}});
できたけど、もっといい方法を模索中。
panelにpainterを設定してそのpainterからpanelに対して、repainntを走らせるのもなぁ....
: