[求助]SWT如何绑定快捷键 怎样在SWT中绑定快捷键,比如CTRL+S、F1、`、enter等,有个SWT窗体,上面有几个输入场,想输入完后直接按enter执行提交事件的内容! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 swt要实现addKeyListener自己绑定,jface有方法直接绑定 registerKeyboardAction()想更符合Action框架就用setInputMap() + getActionMap() 我通过addKeyLinstener绑定了键盘监听事件,问题是这个事件需要在控件获得焦点时才能够起作用,而且我想将enter键绑死为提交,如果这样的话,若我想通过Enter键执行提交事件就必须将焦点移到“提交”按钮上,这岂不是很不人性化。4L的方法怎么实现,可否具体一些,SWT在设计event中展现的事件基本都会用,但是没有展现出来的高级事件就很少接触,可否贴点代码分析,感谢!我是自学的SWT~ 用Display的addFilter来拦截enter事件就可以了,在这里按下你的按钮,这个是应该是处于swt里事件链的最前端了当然Display的addListener也可以 这个实现就太简单了, 基本NB的软件都用我说的那两个方法实现, 全局的呵呵. this为JFrame ActionListener helpAction = new ActionListener(){ public void actionPerformed(ActionEvent evt){ System.out.println("给整个Frame加上了F1事件"); } }; this.getRootPane().registerKeyboardAction(helpAction, KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0, false), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); JButton b = new JButton("Hello"); this.getContentPane().add(b, BorderLayout.SOUTH); b.registerKeyboardAction(new ActionListener(){ public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub System.out.println("按A实现的事件"); } }, KeyStroke.getKeyStroke(KeyEvent.VK_A, 0, false), JComponent.WHEN_IN_FOCUSED_WINDOW);时间关系先写了这个实例, 就是 功能 + 快捷键 + 快捷键触发时要求的条件.. JComponet中就3个, 我已经写了两个了 这个是SWING的监听方法,但是我的是SWT的这个不能通用的呀~~~~~~(>_<)~~~~ 这个有原因哈,确实没分了,但是我的诚意是绝对不用怀疑滴~(*^__^*) 个人理解,Display的事件处于最前端并且优先处理,我通过将Display绑定键盘事件后,仍然没有效果,绑定button,label等控件是可以的,但要获得焦点才有效果。代码如下,是否有问题?public Object open() { createContents(); initContents(); shell.open(); shell.layout(); Display display = getParent().getDisplay(); display.addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event e) { // TODO Auto-generated method stub switch(e.type) { case SWT.Selection: System.out.println("Button pressed!"); break; } } }); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } return result; } addListener貌似不行,应该用addFilter,就像这样display.addFilter(SWT.KeyDown, new Listener(){ public void handleEvent(Event event) { if (event.keyCode == 13) { your_btn.notifyListeners(SWT.Selection, event); } } });其实有更简单的办法啦,原来我也没注意,直接用shell.setDefaultButton(your_btn) display.addFilter(SWT.KeyDown, new Listener(){})这个方法很有效,调用成功了,谢谢~ (^_^)但是遗留下来一个问题:调用:button_确定.notifyListeners(SWT.MouseDown, event);方法时将执行“button_确定”按钮的“MouseDown”事件,这行代码在首次调用时没有问题,很正常;但是在第二次调用时报了异常:org.eclipse.swt.SWTException: Widget is disposed 360度跪求新手入门视频教程,顺便问下关于引用变量 Java 求正弦 float和Float的区别,floatValue()的作用? 求助:如何把得到结果保存到文件里? 谁能帮我看看这个程序哪里错了,帮我改下,谢谢了 如何查找非字母字符的位置或单词匹配问题 C++与JAVA的困惑 找几个例子看看 jni 中如何将一个LONG型数组传入,修改后并传出呢????我很迷惑,..... 请问学习java比较好的中文书籍有哪些,谢谢! Java有没有提供对数据库日志文件操作的API 字符流读文件乱码,救急
想更符合Action框架就用
setInputMap() + getActionMap()
我通过addKeyLinstener绑定了键盘监听事件,问题是这个事件需要在控件获得焦点时才能够起作用,而且我想将enter键绑死为提交,如果这样的话,若我想通过Enter键执行提交事件就必须将焦点移到“提交”按钮上,这岂不是很不人性化。
4L的方法怎么实现,可否具体一些,SWT在设计event中展现的事件基本都会用,但是没有展现出来的高级事件就很少接触,可否贴点代码分析,感谢!
我是自学的SWT~
当然Display的addListener也可以
public void actionPerformed(ActionEvent evt){
System.out.println("给整个Frame加上了F1事件");
}
};
this.getRootPane().registerKeyboardAction(helpAction,
KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0, false),
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
JButton b = new JButton("Hello");
this.getContentPane().add(b, BorderLayout.SOUTH);
b.registerKeyboardAction(new ActionListener(){
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.out.println("按A实现的事件");
}
}, KeyStroke.getKeyStroke(KeyEvent.VK_A, 0, false), JComponent.WHEN_IN_FOCUSED_WINDOW);时间关系先写了这个实例, 就是 功能 + 快捷键 + 快捷键触发时要求的条件.. JComponet中就3个, 我已经写了两个了
这个是SWING的监听方法,但是我的是SWT的这个不能通用的呀~~~~~~(>_<)~~~~
这个有原因哈,确实没分了,但是我的诚意是绝对不用怀疑滴~(*^__^*)
个人理解,Display的事件处于最前端并且优先处理,
我通过将Display绑定键盘事件后,仍然没有效果,绑定button,label等控件是可以的,但要获得焦点才有效果。
代码如下,是否有问题?
public Object open() {
createContents();
initContents();
shell.open();
shell.layout();
Display display = getParent().getDisplay();
display.addListener(SWT.Selection, new Listener() {
@Override
public void handleEvent(Event e) {
// TODO Auto-generated method stub
switch(e.type) {
case SWT.Selection:
System.out.println("Button pressed!");
break;
}
}
});
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
return result;
}
display.addFilter(SWT.KeyDown, new Listener(){ public void handleEvent(Event event) {
if (event.keyCode == 13) {
your_btn.notifyListeners(SWT.Selection, event);
}
}
});
其实有更简单的办法啦,原来我也没注意,直接用
shell.setDefaultButton(your_btn)
这个方法很有效,调用成功了,谢谢~ (^_^)
但是遗留下来一个问题:调用:
button_确定.notifyListeners(SWT.MouseDown, event);方法时将执行“button_确定”按钮的“MouseDown”事件,这行代码在首次调用时没有问题,很正常;
但是在第二次调用时报了异常:
org.eclipse.swt.SWTException: Widget is disposed