AutoCompleteDecorate Override - PullRequest
       14

AutoCompleteDecorate Override

3 голосов
/ 24 января 2012

В моем текущем проекте я использую AutoCompleteDecorate от SwingX. AutoCompleteDecorator.decorate(jComboBox1);

Однако я хочу отменить действие возврата. Первоначально, используя AutoCompleteDecorate .decorate (JComboBox), нажатие клавиши Backspace перемещает выделение в поле со списком влево и не удаляет предыдущий символ. Я хочу реализовать функцию возврата по умолчанию (которая заключается в удалении предыдущего символа), даже если я AutoCompleteDecorate мой JComboBox.

Пожалуйста, помогите мне решить мою проблему. Заранее спасибо.

1 Ответ

4 голосов
/ 24 января 2012

Нетривиально - декоратор проделывает долгий путь для реализации выбора вместо удаления; -)

Сначала вам нужно определить, какое поведение вы хотите. Затем реализуйте Действие, которое соответствует вашим намерениям, и поместите его в ActionMap редактора:

Action myBackspace = ...
ActionMap map = ((JComponent) decorateCombo.getEditor().getEditorComponent())
     .getActionMap();
map.put("nonstrict-backspace", myBackspace);

Это расплывчато, потому что, поскольку я не могу знать, что именно вы хотите, лучше всего взглянуть на источник автозаполнения, чтобы получить представление о том, как реализовать myBackspace

Редактировать

Просто немного проясним неопределенность: моей первой мыслью было просто переустановить привязку возврата по умолчанию, например:

InputMap map = ((JComponent) decorateCombo.getEditor().getEditorComponent())
    .getInputMap();
map.put(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_BACK_SPACE, 0), 
            DefaultEditorKit.deletePrevCharAction);

это, скорее всего, не то, что ожидается: если каретка находится где-то посередине содержимого элемента в редактируемом комбо, то текст от каретки до конца выбирается, следовательно deletePrev удаляет выбранный, а не предыдущий символ , Что может привести к реализации настраиваемого действия: сначала очистите выделение, затем deletePrev, затем проверьте, есть ли новое слово в списке, и повторно выберите (или нет). Трудно сказать, не зная требования.

...