我在插件中使用了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(..)以编程方式设置一个。可见文本基本上只是标签(就组合查看器而言),并且标签不必是唯一的,因此它不会尝试查找属于标签的模型元素。因此,当有人在组合文本框中键入内容时,我不知道您期望组合查看器的选择如何。您到底想实现哪种行为?

10-07 20:31