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

You need to look at extensions org.eclipse.ui.bindings and org.eclipse.ui.contexts.

  1. Define a command and its handler
  2. Define a binding for the command
  3. define context (cxtId)
  4. associate context with command so that command is available only when context is active
  5. Activate context when you open the view or form.
于 2012-10-25T18:47:31.033 回答