2010-05-30 8 views
4

두 개 이상의 버튼이있는 경우 어떤 버튼을 클릭했는지 파악할 수 있을지 궁금합니다.AspectJ에서 하나 이상의 버튼을 클릭하는 경우 버튼을 클릭하는 방법?

이 예제에서 joinPoints를 사용하여 something1을 수행하고 // something2 부분을 수행 할 수 있습니까?

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

이 시도 :

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

내가 AspectJ를이 작업에 적합한 기술이라고 생각하지 않습니다.

각 버튼에 대해 ActionListener을 별도로 사용하거나 ActionEventgetSource() 방법으로 활성화 된 버튼을 찾는 것이 좋습니다. 정적 서명이 모두 JButton 객체 비슷하기 때문에

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

유일한 해결책은, 런타임 검사를 실행하는 것입니다 : 당신은 AspectJ를 함께 할 좋아하는 경우에

그러나, 여기에 솔루션입니다.

나는 포인트 컷에서 if() 조건을 선언했다. 이렇게하려면 @Pointcut 주석이 달린 메소드가 공용 정적 메소드가되어야하며 부울 값을 리턴해야합니다.

관련 문제