Как удалить SwingX AutoCompleteDecorator? - PullRequest
2 голосов
/ 26 октября 2011

Я использую SwingX AutoCompleteDecorator в JTextField DefaultCellEditor. Тем не менее, я использую один и тот же редактор для нескольких столбцов таблицы. Предложения автозаполнения должны различаться между столбцами, так же как и строгое / не строгое соблюдение.

Код до сих пор:

class MyEditor extends DefaultCellEditor {

public MyEditor() {
  super(new JTextField());
}

public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
  JTextField field = (JTextField) super.getTableCellEditorComponent(table, value, isSelected, row, column);

  List<String> suggestions = this.getSuggestions(column, value);

  if (column == 2) {
    AutoCompleteDecorator.decorate(field, suggestions, true);
  }

  if (column == 3) {
    AutoCompleteDecorator.decorate(field, suggestions, false);
  }

  return field;
}

Похоже, что при первом вызове редактора все работает нормально. При последующих вызовах (или, точнее, вызовах в любом другом столбце, кроме первого вызова), декоратор, скажем, для столбца 3, добавляется поверх декоратора для столбца 2, что не очень хорошо.

Документация по SwingX довольно скудна по этой теме. Я обнаружил, что Декоратор, кажется, добавляет FocusListener к текстовому полю.

Кто-нибудь знает, как сбросить декоратор или хотя бы узнать, какой FocusListener (их три на поле после вызова декоратора) следует удалить?

Спасибо!

...