我想知道如果有多个按钮,我们是否可以捕获点击的按钮。
在这个例子中,我们可以达到//做某事1和//用joinPoints做一些事情吗?
public class Test {
public Test() {
JButton j1 = new JButton("button1");
j1.addActionListener(this);
JButton j2 = new JButton("button2");
j2.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
//if the button1 clicked
//do something1
//if the button2 clicked
//do something2
}
}
答案 0 :(得分:1)
我不认为AspectJ是适合这项任务的正确技术。
我建议您为每个按钮使用单独的ActionListener
,或者使用ActionEvent
的{{1}}方法找到激活的按钮。
但是,如果您喜欢使用AspectJ,这是一个解决方案:
getSource()
唯一的解决方案是执行运行时检查,因为public static JButton j1;
@Pointcut("execution(* *.actionPerformed(*)) && args(actionEvent) && if()")
public static boolean button1Pointcut(ActionEvent actionEvent) {
return (actionEvent.getSource() == j1);
}
@Before("button1Pointcut(actionEvent)")
public void beforeButton1Pointcut(ActionEvent actionEvent) {
// logic before the actionPerformed() method is executed for the j1 button..
}
个对象的静态签名类似。
我在切入点中声明了JButton
条件。这要求if()
带注释的方法是公共静态方法并返回布尔值。
答案 1 :(得分:0)
试试这个:
public class Test {
JButton j1;
JButton j2;
public Test() {
//...
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == j1) {
// do sth
}
if (e.getSource() == j2) {
// do sth
}
}
}