简体   繁体   English

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

[英]How to stop key event propagation on swt

I have text widget and on KeyDown event of that text widget . 我有文本小部件,并且有该文本小部件的KeyDown事件。

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;

        }
    }
});

i need to set Focus on a button widget that has a KeyListener . 我需要将焦点设置在具有KeyListener的按钮小部件上。

the problem is when i press Enterkey on my text widget it also fire the keyReleased event for the button widget. 问题是,当我在文本小部件上按Enterkey时,它还会触发按钮小部件的keyReleased事件。 how can i stop the keyReleased event for the button? 如何停止按钮的keyReleased事件?

myButton.addKeyListener(new KeyListener() {

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

i have tried event.doit = false but it did not work. 我已经尝试过event.doit = false但是没有用。

I recommend you didn't use your own custom Keys class, unless your fields point to the SWT-specific key variables. 我建议您不要使用自己的自定义Keys类,除非您的字段指向SWT特定的键变量。 (eg Keys.ENTER = SWT.TRAVERSE_RETURN ). (例如Keys.ENTER = SWT.TRAVERSE_RETURN )。

As you can see from the SSCCE below, the TraverseListener gets notified first. 从下面的SSCCE中可以看到, TraverseListener首先被通知。 You may cancel your events there. 您可以在那里取消活动。

/**
 * 
 * @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.");
            }
        });
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM