java 如何在SWT/JFace中处理每个ViewPart或Form的KeyEvent?

yizd12fk  于 2023-11-15  发布在  Java
关注(0)|答案(4)|浏览(133)

我正在构建一个Eclipse应用程序,我试图在按F5时创建一个启动操作的快捷方式,并使其成为Tab/ViewPart具有焦点时的默认操作。
我读到过这是不可能的,或者是非常复杂的。有没有简单/直接的方法来做到这一点?
我试过:

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

字符串
...
在constructor中做这个是我最好的:

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


这在加载时不工作,但如果我从这个切换到另一个View/Tab开始工作。但当其他人有焦点时(我不想要),它也工作。
有没有办法让这个工作在一开始,只有当重点是在View

9vw9lbht

9vw9lbht1#

你应该看看RetargetableActions。我认为这是Eclipse的做法:

rpppsulh

rpppsulh2#

您需要查看扩展名org.eclipse.ui.bindingsorg.eclipse.ui.contexts
1.定义命令及其处理程序
1.定义命令的绑定
1.定义上下文(cxtId)
1.将上下文与命令相关联,以便命令仅在上下文处于活动状态时可用
1.打开视图或窗体时激活上下文。

km0tfn4u

km0tfn4u3#

如果你得到了组件的事件监听器,它会监听事件。如果这个组件发生了事件,它会得到通知。
要在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

字符串

cld4siwp

cld4siwp4#

你应该在handler中定义工作,然后应该使用这个例子中给出的键绑定。你可以找到一个很好的例子here。希望它能解决你的需要。

相关问题