有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何停止swt上的关键事件传播

我有文本小部件和文本小部件的按键事件

myText.addListener(SWT.KeyDown, new Listener() {
    @Override
    public void handleEvent(Event e) {
        if (e.keyCode == Keys.ENTER || e.keyCode == Keys.CARRIAGERETURN) {
            myButton.setFocus();
            e.doit = false;

        }
    }
});

我需要将焦点设置在一个按钮小部件上,它有一个KeyListener

问题是,当我在文本小部件上按Enter键时,它也会触发按钮小部件的keyReleased事件。如何停止按钮的keyReleased事件

myButton.addKeyListener(new KeyListener() {

    public void keyReleased(KeyEvent event) {
 if ( event.keyCode == Keys.ENTER ) {    
            //do Something
        }
    }
});

我试过event.doit = false,但没用


共 (1) 个答案

  1. # 1 楼答案

    我建议您不要使用自己的自定义Keys类,除非您的字段指向特定于SWT的键变量。(例如Keys.ENTER = SWT.TRAVERSE_RETURN

    从下面的SSCCE可以看到,TraverseListener首先得到通知。你可以取消那里的活动

    /**
     * 
     * @author ggrec
     *
     */
    public class KeyTest
    {
    
        // ==================== 3. Static Methods =============================
    
        public static void main(final String[] args)
        {
            new KeyTest();
        }
    
    
        // ==================== 4. Constructors ===============================
    
        private KeyTest()
        {
            final Display display = new Display();
            final Shell shell = new Shell(display);
            shell.setLayout(new GridLayout(1, false));
    
            createContents(shell);
    
            shell.pack();
            shell.open();
            while (!shell.isDisposed())
            {
                if ( !display.readAndDispatch() )
                    display.sleep();
            }
            display.dispose();
        }
    
    
        // ==================== 5. Creators ===================================
    
        private static void createContents(final Composite parent)
        {
            final Text text = new Text(parent, SWT.NONE);
    
            text.addTraverseListener(new TraverseListener()
            {
                @Override public void keyTraversed(final TraverseEvent e)
                {
                    System.out.println("Traversed!");
                }
            });
    
            text.addKeyListener(new KeyListener()
            {
                @Override public void keyReleased(final KeyEvent e)
                {
                    System.out.println("Key released.");
                }
    
                @Override public void keyPressed(final KeyEvent e)
                {
                    System.out.println("Key pressed.");
                }
            });
        }
    }