2010-05-30 2 views
4

Je me demande si nous pouvons capturer quel bouton est cliqué s'il y a plus d'un bouton.Comment capturer le bouton cliquez sur plus d'un bouton dans AspectJ?

Dans cet exemple, pouvons-nous atteindre // faire quelquechose1 et // faire quelque chose2 avec des jointures?

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 
    } 

}

Répondre

0

Essayez ceci:

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

Je ne crois pas AspectJ est la bonne technologie pour cette tâche.

Je recommande d'utiliser un ActionListener distinct pour chaque bouton, ou de trouver le bouton activé avec la méthode getSource() de ActionEvent.

Cependant, si vous voulez le faire avec AspectJ, voici une 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.. 
} 

La seule solution est d'exécuter un contrôle d'exécution, car les signatures statiques sont similaires pour les deux JButton objets.

J'ai déclaré une condition if() dans le pointcut. Cela nécessite la méthode annotée @Pointcut pour être une méthode statique publique et renvoyer une valeur booléenne.

Questions connexes