如果在AspectJ中有多个按钮,如何捕获按钮?

时间:2010-05-30 18:51:03

标签: java aop aspectj

我想知道如果有多个按钮,我们是否可以捕获点击的按钮。

在这个例子中,我们可以达到//做某事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
   }

}

2 个答案:

答案 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
        }
    }
}