Java ComboViewer在编辑时做出反应,KeyListener?

时间:2011-12-12 22:56:29

标签: java eclipse swt jface keylistener

我在插件中使用了JFace ComboViewer。作为一个便利功能,我想通过开始输入来改变当前的选择。 为此,我将KeyListener添加到基础组合元素

一旦我开始输入,我得到的是一个事件,但不幸的是我没有得到更改的值,而只是我开始输入之前的那个。

我的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语句,任何进一步输入的字符都会导致选择为空。

那么如何才能获得“当前选择”以及如何获得更改后的值,似乎在keylistener中的反应是提前的,因为我输入的文本字段尚未更新,因此将总是提供旧信息?

也许我理解错了,但我无法想象我能从文本字段中获取最新信息。 有什么建议吗?

2 个答案:

答案 0 :(得分:0)

您应该使用ModifyListener代替并查询组合文本框的当前值,如下所示:

public void modifyText(ModifyEvent e)
{
  String text = ((Combo) e.getSource()).getText();
  ...
}

但这只会给你文本框的内容。在您从其下拉列表中选择元素或使用setSelection(..)以编程方式设置元素之前,组合查看器将不会 - 据我记忆 - 进行任何选择。可见文本基本上只是标签(就组合查看器而言),并且由于标签不必是唯一的,因此它不会尝试查找属于标签的模型元素。因此,当有人在组合的文本框中输入内容时,我不知道您期望组合查看器的选择。你想要达到什么样的行为?

答案 1 :(得分:0)

内容辅助不会更有帮助吗?它的工作原理与Eclipse中的内容辅助完全相同。