1

私はEclipseアプリケーションを構築しており、F5キーを押したときにアクションを起動するためのショートカットを作成し、Tab/ViewPartにフォーカスがある場合はそれをデフォルトのアクションにしようとしています。

これは不可能であるか、非常に複雑であることを読みました。それを行うための簡単でまっすぐな方法はありますか?

私は試してみました:

Display.getCurrent().addFilter(...)
this.addKeyListener(new KeyAdapter() {...})

..。

コンストラクターでこれを作成するのが私の最善です:

this.getShell().addKeyListener(new KeyAdapter() {
    public void keyPressed(KeyEvent e) {
        if(e.keyCode == SWT.F5) {
            //doAnything()
        }
    }
});

そして、これはロードされたときに機能しませんが、これから別のView/に切り替えると機能しTab始めます。しかし、他の人が焦点を合わせている場合にも機能します(私は望んでいません)。

とにかく、最初に、そして焦点が焦点にあるときだけ、これを機能させる方法はありViewますか?

4

4 に答える 4

2

ハンドラーで作業を定義してから、この例に示すようにキーバインディングを使用する必要があります。ここで良い例を見つけることができます。それがあなたのニーズを解決することを願っています。

于 2012-10-25T18:38:40.477 に答える
2

RetargetableActionsを確認する必要があります。それがEclipseのやり方だと思います。

于 2012-10-25T17:57:49.580 に答える
1

コンポーネントのイベントのリスナーを取得すると、イベントをリッスンします。また、このコンポーネントでイベントが発生した場合は、通知されます。

キーイベントのリスナーを追加するにはViewPart、イベントをリッスンできるコントロールを作成する必要があります。

public class SampleView extends ViewPart {
  /**
   * The ID of the view as specified by the extension.
   */
  public static final String ID = "views.SampleView";

  private Composite mycomposite;

  public void createPartControl(Composite parent) {
    mycomposite = new Composite(parent, SWT.FILL);

//then add listener

    mycomposite.addKeyListener(keyListener);
  }

  private KeyListener keyListener = new KeyAdapter() {

    @Override
    public void keyReleased(KeyEvent e) {
        // TODO Auto-generated method stub              
    }

    @Override
    public void keyPressed(KeyEvent e) {
        showMessage("key pressed: "+ e.keyCode);                
    }
  };

//the rest of focusing and handle event

  private void showMessage(String message) {
    MessageDialog.openInformation(
        mycomposite.getShell(),
        "Sample View",
        message);
  }

  /**
   * Passing the focus request to the viewer's control.
   */
  public void setFocus() {
    mycomposite.setFocus();
  }
}
//the end
于 2012-10-25T18:25:10.730 に答える
1

org.eclipse.ui.bindings拡張機能とを確認する必要があります org.eclipse.ui.contexts

  1. コマンドとそのハンドラーを定義する
  2. コマンドのバインディングを定義する
  3. コンテキストの定義(cxtId)
  4. コンテキストをコマンドに関連付けて、コンテキストがアクティブな場合にのみコマンドを使用できるようにします
  5. ビューまたはフォームを開いたときにコンテキストをアクティブにします。
于 2012-10-25T18:47:31.033 に答える