我正在构建一个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
?
答案 0 :(得分:2)
你应该看看RetargetableActions。我认为这是Eclipse的做法:
答案 1 :(得分:2)
答案 2 :(得分: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
答案 3 :(得分:1)
您需要查看扩展程序org.eclipse.ui.bindings
和org.eclipse.ui.contexts
。