2010-11-18 5 views
2

final로 호출하지 않고 actionlistener에 변수를 전달할 수있는 방법이 있습니까? 나는이 두 점을 일종의 시간 초과 된 방법으로 사용하고 싶습니다 ... Thread.sleep()을 시도했지만 어떤 이유로 프로그램의 나머지 부분과 잘 맞지 않습니다. 이것은 내가 실제로 사용하고 싶은 형식이지만, 작동시키지 못할 수도 있다는 것을 알고 있습니다. 나는 모든 조언을 제공합니다. 감사! 변수를 Java ActionListener에 전달 하시겠습니까?

(이 바보 같은 질문 경우 내가 대답을 보았다했지만 하나를 찾을 수가 없어, 미안 해요.) 당신은 몇 가지를 할 수

public void timedMain(Point current, Point wanted){ 
      ActionListener taskPerformer = new ActionListener(){ 
       public void actionPerformed(ActionEvent evt){ 
        System.out.println(wanted+" "+current);}}; 
        actiontimer = new Timer(delay, taskPerformer); 
        actiontimer.start();} 

답변

4

매개 변수를 final로 선언하지 않아도됩니다. 그래서

public void timedMain(Point current, Point wanted) { 
     final Point c = current; 
     final Point w = wanted; 
     ActionListener taskPerformer = new ActionListener(){ 
      public void actionPerformed(ActionEvent evt){ 
       System.out.println(w + " " + c);}}; 
       actiontimer = new Timer(delay, taskPerformer); 
       actiontimer.start();} 

아니면 current의 유형을 변경할 수 있으며, wanted 그들은 Point 홀더 변경할 수 있었고, 홀더의 현재 값에서 actionPerformed 방법 모양을 가지고있다.

내부 클래스를 선언 할 방법이 없으므로 둘러싼 메서드 범위에서 변수에 대한 변경 사항을 볼 수 있습니다.

+0

이 코드 스 니펫을 사용하려는 경우에 잘 작동하는 것 같습니다. 시기 적절한 답변을 주셔서 감사합니다. – whuff739

1

  • 당신은 (개인 정적) 내부 클래스에 익명 액션 청취자를 촉진하고, 생성자에 인수를 전달할 수

  • 익명 액션 리를 내장 함수를 정의 할 수

    코드에서 인라인하지 말고 그 함수에 대한 매개 변수를 최종적으로 만드십시오.

그래도 '최종'으로 표시하는 데 문제가 있습니까?

+0

적시에 답변 해 주셔서 감사합니다 ... 익명의 액션 리스너를 들여다 보지 않았습니다. – whuff739

+0

'taskPerformer'는 익명 액션 수신기입니다. 즉, '새로운 ActionListner() {...}로 갈 때 정의 된 ActionListner의 새 하위 클래스가 있으며 하위 클래스에는 (소스 코드) 이름이 없습니다. –

관련 문제