0

ボタンをクリックすると色が変わるプログラムがあります。次のコードがあります。

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() の別のポイントカットを作成する必要がありますか?

4

1 に答える 1

0

2 つのポイントカットと 2 つのアドバイスで問題を解決しました。を使用して、actionPerformed からパラメーターを取得する別のポインカットを作成しましたexecution。これは 2 番目のポイントカットとアドバイスです。

pointcut change2(ActionEvent e) : execution(* *.actionPerformed(..)) && args(e);

before(ActionEvent e) : change2(e) {
    System.out.print("Changing from " + ((MyButton)e.getSource()).getColor().toString());
}   
于 2013-06-13T21:27:06.977 に答える