4

複数のボタンがある場合、どのボタンがクリックされたかをキャプチャできるのだろうか。

この例では、//do something1 と //do something2 の部分に 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
   }

}

4

2 に答える 2

1

AspectJ がこのタスクに適したテクノロジであるとは思えません。

ボタンごとに別々の を使用するか、のメソッドActionListenerでアクティブ化されたボタンを見つけることをお勧めします。ActionEventgetSource()

ただし、AspectJ を使用したい場合は、次の解決策があります。

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()ポイントカットで条件を宣言しました。これには、@Pointcut注釈付きメソッドが public static メソッドであり、ブール値を返す必要があります。

于 2010-05-30T20:19:41.050 に答える
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
        }
    }
}
于 2010-05-30T19:04:33.393 に答える