我在插件中使用了JFace ComboViewer。作为一项便利功能,我想仅通过开始输入来更改当前选择。
为此,我向基础Combo元素添加了KeyListener
我开始输入后会得到一个事件,但是不幸的是我没有得到更改后的值,而只有开始输入之前的那个。
我的侦听器,具有ComboViewer当前以这种方式做出反应的参考:
@Override
public void keyPressed(KeyEvent e) {
ISelection selection = combo.getSelection(); //combo is the ComboViewer
if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
IStructuredSelection strucSel = (IStructuredSelection) selection;
node = (TreeNode) strucSel.getFirstElement();
...}
我键入的第一个字符实际上是通过if语句输入的,任何其他键入的字符都会导致选择为空。
因此,如何始终获得“当前选择”以及如何获得更改的值,似乎在键侦听器中的反应是早期的,因为我输入的文本字段尚未更新,因此将始终提供旧的信息?
也许我理解错了,但是我无法想象我很难从文本字段中获取最新信息。
有什么建议吗?
最佳答案
您应该改用ModifyListener
并查询组合文本框的当前值,如下所示:
public void modifyText(ModifyEvent e)
{
String text = ((Combo) e.getSource()).getText();
...
}
但这只会给您文本框的内容。就我所知,组合查看器将没有任何选择,除非您从其下拉列表中选择一个元素,或者使用
setSelection(..)
以编程方式设置一个。可见文本基本上只是标签(就组合查看器而言),并且标签不必是唯一的,因此它不会尝试查找属于标签的模型元素。因此,当有人在组合文本框中键入内容时,我不知道您期望组合查看器的选择如何。您到底想实现哪种行为?