怎样在SWT中绑定快捷键,比如CTRL+S、F1、`、enter等,有个SWT窗体,上面有几个输入场,想输入完后直接按enter执行提交事件的内容!

解决方案 »

  1.   

    swt要实现addKeyListener自己绑定,jface有方法直接绑定
      

  2.   

    registerKeyboardAction()
    想更符合Action框架就用
    setInputMap() + getActionMap()
      

  3.   


    我通过addKeyLinstener绑定了键盘监听事件,问题是这个事件需要在控件获得焦点时才能够起作用,而且我想将enter键绑死为提交,如果这样的话,若我想通过Enter键执行提交事件就必须将焦点移到“提交”按钮上,这岂不是很不人性化。
    4L的方法怎么实现,可否具体一些,SWT在设计event中展现的事件基本都会用,但是没有展现出来的高级事件就很少接触,可否贴点代码分析,感谢!
    我是自学的SWT~
      

  4.   

    用Display的addFilter来拦截enter事件就可以了,在这里按下你的按钮,这个是应该是处于swt里事件链的最前端了
    当然Display的addListener也可以
      

  5.   

    这个实现就太简单了, 基本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个, 我已经写了两个了
      

  6.   


    这个是SWING的监听方法,但是我的是SWT的这个不能通用的呀~~~~~~(>_<)~~~~ 
    这个有原因哈,确实没分了,但是我的诚意是绝对不用怀疑滴~(*^__^*) 
      

  7.   


    个人理解,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;
    }
      

  8.   

    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)
      

  9.   

    display.addFilter(SWT.KeyDown, new Listener(){})
    这个方法很有效,调用成功了,谢谢~ (^_^)
    但是遗留下来一个问题:调用:
    button_确定.notifyListeners(SWT.MouseDown, event);方法时将执行“button_确定”按钮的“MouseDown”事件,这行代码在首次调用时没有问题,很正常;
    但是在第二次调用时报了异常:
    org.eclipse.swt.SWTException: Widget is disposed