如何删除SwingX AutoCompleteDecorator?

时间:2011-10-26 07:38:44

标签: java jtable swingx

我在DefaultCellEditor的JTextField上使用SwingX AutoCompleteDecorator。但是,我在表的多个列上使用相同的编辑器。列之间的自动完成建议必须不同,严格/非严格遵守也是如此。

到目前为止的代码是:

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文档在该主题上相当稀疏。我发现Decorator似乎在文本字段中添加了FocusListener

有没有人知道如何重置装饰器或者至少找出哪个FocusListener(在装饰器被调用后场上有三个)应该被删除?

谢谢!

0 个答案:

没有答案