ボタンをクリックすると色が変わるプログラムがあります。次のコードがあります。
public void actionPerformed(ActionEvent e) {
MyButton btn = (MyButton)e.getSource();
int x = getNew();
if(x == 0) {
btn.setType(0);
btn.setColor(type0);
}
if(x == 1) {
btn.setType(1);
btn.setColor(type1);
}
if(x == 2) {
btn.setType(2);
btn.setColor(type2);
}
}
ボタンをクリックするたびにボタンと新しい色をログに記録したいので、actionPerformed と setColor からパラメーターを公開することを考えました。
actionPerformed から setColor を呼び出すたびに、後者の引数を出力します。新しい色のみのポイントカットとアドバイス:
public aspect Log {
pointcut change(Color c) : withincode(* actionPerformed(..)) && call(* *.setColor(..)) && args(c);
before(Color c) : change(c) {
System.out.println("Chnging the color to " + c.toString());
}
}
できます。しかし、私はイベントも取りたいです (ボタンとその古い色を取ることができます)。どうすればこれを達成できますか? args() では機能しません。actionPerformed() の別のポイントカットを作成する必要がありますか?