2014-09-25 2 views
0

TreeViewer 또는 TableViewer (또는 모든 컨트롤)의 상황에 맞는 메뉴 항목과 연결된 동작에 키보드 바로 가기 (액셀러레이터)를 정의하는 방법.SWT의 작업에 대한 키보드 바로 가기

나무와 테이블이 서로 다른 종류의 개체가 있으며 "위로 이동", "아래로 이동", "확장"또는 "축소"와 같은 일반적인 동작이 있습니다. 테이블 또는 트리 컨트롤에 대한 컨텍스트 메뉴를 만들었지 만 사용자가 선택 항목을 마우스 오른쪽 단추로 클릭 할 필요없이 (또는 일반적으로 마우스를 사용할 필요없이) 작업을 호출 할 수있게하려고합니다. 예를 들어 "위로 이동"액션은 뷰어가 초점을 맞추고 사용자가 Alt + 을 누를 때 호출해야합니다. 해당 액셀러레이터를 설정하면 작동하지 않습니다. 나는 또한 (편집 메뉴 등) 메인 메뉴 바에 액션을 추가하고 싶지 않습니다.

답변

2

걸릴 당신은 당신의 행동에 Action을 사용하고 있습니다. 이 작업을 처리하는 명령을 지정하는 액션 생성자

전화

setActionDefinitionId("command id"); 

.

확장 점 org.eclipse.ui.commands을 사용하여 plugin.xml에서 명령을 선언하십시오.

org.eclipse.ui.bindings 확장 점을 사용하여 키 시퀀스를 명령에 바인딩하십시오. 그냥 미래 세대를위한

+0

이이없이 할 수 없습니다 :이 StructuredViewer를 래핑 내 클래스의 조각입니다 plugin.xml에 영향을 줍니까? 또한 org.eclipse.ui.keys 확장 지점을 찾을 수 없습니다. org.eclipse.ui.commands에 keyBinding 항목이 있습니다. 대신 사용할 수 있습니까? – Patryk

+0

죄송합니다. org.eclipse.ui.bindings 확장 점이 있어야합니다. 당신은 언제나 테이블에서'KeyDown' 이벤트를 처리하고 단축키를 확인할 수 있습니다 –

1

는 :

나는 그렉의 조언을 따라 뷰어 컨트롤에 KeyListsner을 추가했습니다.

내가 이것에 소요되는 시간의 대부분은 SWT.UPSWT.ARROW_UP가 동일하지 않습니다 것을 깨닫게되었다
private class ViewerWrapper{ 

    private StructuredViewer fViewer; 

    [...] 

    private class ViewerKeyAdapter implements KeyAdapter{ 
     private int fKeyCode; 
     private Action fAction; 
     private int fStateMask; 

     public ViewerKeyAdapter(int keyCode, int stateMask, Action action){ 
      fKeyCode = keyCode; 
      fStateMask = stateMask; 
      fAction = action; 
     } 

     @Override 
     public void keyReleased(KeyEvent e) { 
      if((e.stateMask & fStateMask) != 0 || fStateMask == SWT.NONE){ 
       if(e.keyCode == fKeyCode){ 
        fAction.run(); 
       } 
      } 
     } 
    } 

    [...] 

    public void addKeyListener(int keyCode, int stateMask, Action action){ 
     fViewer.getControl().addKeyListener(new ViewerKeyAdapter(keyCode, modifier, action)); 
    } 
} 

...