我有一个程序,当点击一个按钮时,它会改变它的颜色。我有以下代码:
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()编写另一个切入点吗?
答案 0 :(得分:0)
我用2分和2条建议解决了这个问题。我做了另一个切入点,使用execution
从actionPerformed获取参数。这是第二个问题和建议:
pointcut change2(ActionEvent e) : execution(* *.actionPerformed(..)) && args(e);
before(ActionEvent e) : change2(e) {
System.out.print("Changing from " + ((MyButton)e.getSource()).getColor().toString());
}