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. 这是第二个切入点和建议:

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 回答