Java ComboViewer реагирует на редактирование, KeyListener? - PullRequest
2 голосов
/ 13 декабря 2011

Я использую JFace ComboViewer в своем плагине.Для удобства я бы хотел изменить текущий выбор, просто начав печатать.Для этого я добавил KeyListener в базовый Combo Element

. Я получаю событие, как только начинаю печатать, но, к сожалению, я не получаю измененное значение, а только то, которое было до того, как я начал печатать.

Мой кейлист, имеющий ссылку на 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, любой следующий типизированный символ вызываетвыделение должно быть пустым.

Итак, как мне всегда получить «текущий выбор» и как я могу получить измененное значение, похоже, что реагировать в кейлисте - это рано, потому что текстовое поле, которое я набираюin еще не обновлен и, таким образом, всегда будет предоставлять старую информацию?

Может быть, я что-то понял неправильно, но я не мог себе представить, что мне так трудно получить актуальную информацию из текстового поля.Любые советы?

Ответы [ 2 ]

0 голосов
/ 03 февраля 2012

Разве помощь в содержании не будет более полезной? Он работает точно так же, как помощник по содержимому в Eclipse.

0 голосов
/ 13 декабря 2011

Вместо этого следует использовать ModifyListener и запросить текущее значение текстового поля со списком следующим образом:

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

Но это даст вам только содержимое текстового поля. Насколько я помню, комбо-просмотрщик не будет иметь никакого выбора, пока вы не выберете элемент из его выпадающего списка или не установите его программно с помощью setSelection(..). Видимый текст - это в основном только метка (что касается средства просмотра комбинированного списка), и поскольку метки не обязательно должны быть уникальными, он не будет пытаться найти элемент модели, который принадлежит метке. Так что я не знаю, что вы ожидаете от выбора зрителя со списком, пока кто-то печатает в текстовом поле со списком. Какого поведения вы пытаетесь достичь?

...