[求助]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 请教java控制打印机打印的教程 怎么将一串数字拆分成单个数字? qik手机"现场直播"的应用成为现实,国内有没有这样的技术和产品 MM7 报出的 java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 错误怎么解决? 问一个连接数据库效率的问题,可能很多人会碰到 非常奇怪的问题,高手请做答! 求解:如何使java应用只启动一次,如何停掉java应用程序? 关于java 类型初始化问题 请教TOMCAT的中文问题~! 急、急、急!请大侠们帮忙,File对象的问题!!! 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