【问题标题】:Java ComboViewer react on edit, KeyListener?Java ComboViewer 对编辑做出反应,KeyListener?
【发布时间】:2011-12-12 22:56:29
【问题描述】:

我在我的插件中使用了 JFace ComboViewer。作为一项便利功能,我想通过开始输入来更改当前选择。 为此,我向底层 Combo 元素添加了一个 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 中做出反应还为时过早,因为我输入的文本字段尚未更新,因此将总是提供旧信息?

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

【问题讨论】:

    标签: java eclipse swt jface keylistener


    【解决方案1】:

    您应该改用ModifyListener 并像这样查询组合文本框的当前值:

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

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

    【讨论】:

      【解决方案2】:

      内容辅助不是更有帮助吗?它的工作方式与 Eclipse 中的内容辅助完全一样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-29
        • 2021-05-05
        • 1970-01-01
        • 2018-07-23
        • 1970-01-01
        • 2021-02-18
        • 2017-11-08
        • 1970-01-01
        相关资源
        最近更新 更多