2014-10-01 2 views
0

CaretListener에서 "si()"메서드를 만들었지 만 전화를 걸 수 없다는 오류 메시지는 "기호를 찾을 수 없습니다"라는 메시지가 표시되어 누군가 내가이 코드를 찾을 수없는 이유를 알 수 있습니다. 방법내 EventListener 메서드에 대한 액세스

public class FoxTable { 


     private boolean TECLADO=false; 

     public FoxTable(){ 
     Accion(); 
     } 


     private void Accion() { 
      CaretListener as=new CaretListener() { 


       @Override public void caretUpdate(CaretEvent e) { 
        TECLADO=true; 
        System.out.println(e.getDot()+" Dot"); 
        System.out.println(e.getMark()+" Mark"); 
       } 

       public boolean si(){ 
        if(TECLADO){TECLADO=false;return true;} 
        return true; 
       } 
      }; 

      KeyAdapter focus=new KeyAdapter() { 

       @Override public void keyPressed(KeyEvent e) { 

        switch(e.getKeyCode()){   

         case 10: 
          e.getComponent().transferFocus(); 
          as.si(); 
          break; 
        }     
       } 
      }; 
    } 
} 

답장과 조언을 주셔서 감사합니다.

답변

3

익명의 KeyAdapter 내부 클래스의 스코어에 'as'인스턴스가 없으므로

'as'인스턴스를 특성 또는 익명의 KeyAdapter 내부 클래스로 전달할 수 있습니다.

편집

그래서, 전달의 내 생각 익명의 내부 클래스 인스턴스 변수가 작동하지 않습니다 '로'다음 스택 오버플로 질문을 들여다 봐도하십시오 Accessing constructor of an anonymous class

대신, si() 메서드를 익명 내부 클래스 인 CaretListener 내부에서 FoxTable 클래스로 이동하는 것이 좋습니다. 그런 다음 두 익명 내부 클래스가 필요에 따라 메서드를 호출 할 수 있습니다. 당신이 당신의 내부 클래스의 SI() 메소드를 가지고있는 경우

public class FoxTable { 

private boolean teclado = false; 

public FoxTable(){ 
    Accion(); 
} 

public boolean si(){ 
    if (teclado) { 
     teclado = false; 
     return true; 
    } 
    return true; 
} 

private void Accion() { 

    CaretListener as = new CaretListener() { 
     public void caretUpdate(CaretEvent e) { 
      teclado = true; 
      System.out.println(e.getDot()+" Dot"); 
      System.out.println(e.getMark()+" Mark"); 
     } 
    }; 

    KeyAdapter focus = new KeyAdapter() { 
     public void keyPressed(KeyEvent e) { 
      switch(e.getKeyCode()){ 
       case 10: 
        e.getComponent().transferFocus(); 
        si(); 
        break; 
      } 
     } 
    }; 
} 

편집 X 2

는 SO, 이것은 내가 그 일을 알고있는 유일한 방법입니다. 익명의 내부 클래스를 사용할 수 없으므로 선언 된 내부 클래스를 사용해야하고 사용하는 두 개의 다른 수신기의 인터페이스를 확장해야합니다.

public class FoxTable { 

    private boolean TECLADO=false; 

    public FoxTable(){ 
     Accion(); 
    } 

    private void Accion() { 
     ExtendedCaretListener as = new ExtendedCaretListener(); 
     KeyAdapter focus = new ExtendedKeyAdapter(as); 
    } 

    public class ExtendedCaretListener implements CaretListener { 
     public void caretUpdate(CaretEvent e) { 
      TECLADO=true; 
      System.out.println(e.getDot()+" Dot"); 
      System.out.println(e.getMark()+" Mark"); 
     } 

     public boolean si(){ 
      if(TECLADO){ 
       TECLADO=false; 
       return true; 
      } 
      return true; 
     } 
    } 

    public class ExtendedKeyAdapter implements KeyAdapter { 

     ExtendedCaretListener as = null; 

     public ExtendedKeyAdapter(ExtendedCaretListener as) { 
      this.as = as; 
     } 

     public void keyPressed(KeyEvent e) { 
      switch(e.getKeyCode()){ 
       case 10: 
        e.getComponent().transferFocus(); 
        as.si(); 
        break; 
      } 
     } 
    } 
} 

아마도 다른 사람이이 작업을 수행하는 다른 방법으로 전화를 걸 수 있습니다.

+0

내 KeyAdapter 내부 클래스의 내부에 넣으면 작동하지 않지만 동일한 문제가 발생합니다. – WearFox

+0

그래서 조금 더 많은 코드가 필요합니다. TECLADO라는 상위 특성에 액세스하려고 시도하는 두 개의 익명 내부 클래스 만 표시합니다. 부모 클래스에서 TECLADO가 어떻게 사용되고 있는지 보여줄 수 있습니까? 우리는 전체 클래스를 필요로하지는 않지만 여전히 컴파일되는 좀 더 많은 코드가 도움이 될 것입니다. – hooknc

+0

ok 여기에 전체 코드가 표시됩니다 – WearFox

관련 문제