JavaSWT:将关键事件从列表应用到文本字段
我正在SWT中制作一个包含文本字段和列表的组件。无论何时输入文本,它都会过滤列表。到目前为止,一切都很好,我只是想添加一些很好的可用性特性 我要做的是监听列表字段中的任何按键事件,如果按下Enter键,我将执行“确定”操作(已完成),否则我希望焦点切换到文本字段并在那里触发按键事件。基本上,如果焦点在列表字段上,并且用户键入了一些内容,我希望它自动键入到文本字段中JavaSWT:将关键事件从列表应用到文本字段,java,user-interface,events,swt,listener,Java,User Interface,Events,Swt,Listener,我正在SWT中制作一个包含文本字段和列表的组件。无论何时输入文本,它都会过滤列表。到目前为止,一切都很好,我只是想添加一些很好的可用性特性 我要做的是监听列表字段中的任何按键事件,如果按下Enter键,我将执行“确定”操作(已完成),否则我希望焦点切换到文本字段并在那里触发按键事件。基本上,如果焦点在列表字段上,并且用户键入了一些内容,我希望它自动键入到文本字段中 响应keyPressed或keyReleased事件可以将焦点设置为文本字段,但我需要以某种方式重复keyEvent,以便实际输入键
响应keyPressed或keyReleased事件可以将焦点设置为文本字段,但我需要以某种方式重复keyEvent,以便实际输入键入的内容。有什么想法吗?我的第一个想法是,可能有一种方法可以将关键事件(或其副本)重新激发到文本字段。但这可能不会产生期望的结果,因为有些关键事件可能不希望从列表转移到文本,例如,按向上和向下箭头键在列表中导航 因此,您应该决定哪些关键事件触发焦点转移。从您的问题中,我了解到您正在实现一个文本过滤器,因此您应该将传输限制为文本字符。知道输入的字符后,可以手动将其附加到筛选文本中(或在文本字段的光标位置插入)。我就是这么做的:
itemList.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent e) {
if (e.keyCode == '\r' || e.keyCode == SWT.KEYPAD_CR) {
okButtonAction();
} else if (e.keyCode == SWT.ARROW_UP || e.keyCode == SWT.ARROW_DOWN || e.keyCode == SWT.ARROW_LEFT || e.keyCode == SWT.ARROW_RIGHT) {
super.keyReleased(e);
} else if (e.character > 0) {
filterInput.setFocus();
Event event = new Event();
event.type = SWT.KeyDown;
event.keyCode = e.keyCode;
event.character = e.character;
Display.getCurrent().post(event);
try {
Thread.sleep(10);
} catch (InterruptedException ie) {
ie.printStackTrace();
}
event.type = SWT.KeyUp;
Display.getCurrent().post(event);
}
}
});
我读到Display.post方法是用来做自动GUI测试的,但它在这里是为我的目的而工作的,所以我会使用它,除非有人能给我一个很好的理由,为什么不呢