简体   繁体   中英

How to capture button click if more than one button in AspectJ?

I wonder if we can capture that which button is clicked if there are more than one button.

On this example, can we reach //do something1 and //do something2 parts with 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
   }

}

I don't believe AspectJ is the right technology for this task.

I recommend to just use a separate ActionListener for each button, or find the activated button with the ActionEvent 's getSource() method.

However, if you like do it with AspectJ, here's a solution:

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..
}

The only solution is to execute a runtime check, since the static signatures are similar for both JButton objects.

I have declared an if() condition in the pointcut. This requires the @Pointcut annotated method to be a public static method and return a boolean value.

Try this:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM