2014-05-19 2 views
0

기존 윈도우에 KeyListener를 추가하고 싶습니다. 나는 3 KeyDown의 잡아 싶습니다. 첫 번째 KeyDown에서 나는 Combo에 무엇인가 넣고 싶습니다. 두 번째 KeyDown에서 다른 콤보에 뭔가 넣고 싶습니다. 두 텍스트 상자가 모두 채워지면 다음 KeyDown을 사용하여 OK 단추를 시뮬레이트합니다.SWT 디스플레이에 KeyListener 추가하기

하지만 오류 위젯이 삭제되었습니다. 왜냐하면 나는 필터를 제거해야 할 때를 모른다. 창문을 다시 열면 이런 일이 일어날 것입니다!

내 코드 :

_disp.addFilter(SWT.KeyDown, new Listener() { 

    public void handleEvent(Event e) { 
     if(!_disp.isDisposed()){ 
      _disp.removeFilter(SWT.KeyDown, this); 
     } 

     if (e.keyCode == SWT.CR) { 
      if (_cmbCCID.getText().isEmpty()) { 
       _cmbCCID.setText(_lastFiveCCID[0]); 
      } else if (_cmbDescription.getText().isEmpty()) { 
       _cmbDescription.setText(_lastFiveComment[0]); 
      } else if (!_cmbCCID.getText().isEmpty() && !_cmbDescription.getText().isEmpty()) { 
       _btnOk.notifyListeners(SWT.Selection, new Event()); 
      } 
     } 
    } 
}); 
+0

이 작업은 첫 번째 클릭에만 적용됩니다. 내 윈도우는 다른 모든 KeyDowns를 가져 오지 않습니다. – user3589316

답변

0

첫 번째 키를 누른 후에 필터를 제거하고 있습니다. 다음과 같이 시도하십시오.

public static void main(String[] args) 
{ 
    final Display display = new Display(); 
    Shell shell = new Shell(display); 
    shell.setText("StackOverflow"); 
    shell.setLayout(new FillLayout()); 

    new Text(shell, SWT.NONE); 

    display.addFilter(SWT.KeyDown, new Listener() 
    { 
     int i = 0; 

     @Override 
     public void handleEvent(Event arg0) 
     { 
      if (i < 2) 
       System.out.println("Press " + i); 
      else 
      { 
       System.out.println("Press " + i); 
       System.out.println("Remove"); 
       if (!display.isDisposed()) 
        display.removeFilter(SWT.KeyDown, this); 
      } 

      i++; 
     } 
    }); 

    shell.pack(); 
    shell.open(); 
    while (!shell.isDisposed()) 
    { 
     while (!display.readAndDispatch()) 
     { 
      display.sleep(); 
     } 
    } 
} 

세 번째 키 누르기 이벤트 후에 필터가 제거됩니다.

+0

그러나 1 키를 누른 후 사용자가 cancle하면 동일한 오류가 발생합니까? 이 작업을 수행 할 수있는 다른 옵션이 없습니까? – user3589316

+0

@ user3589316 그런 다음 사용자가 취소를 누를 때 필터를 제거하십시오 ... 또는 여기에서 달성하려는 내용을 정확히 설명하십시오. – Baz

+1

@ user3589316 특정 위젯의 키 누르기를 추적하는 경우 필터가 아닌 '수신기'를 추가하십시오. – Baz