[英]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.