我在 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;
}
似乎发生的是,第一次调用 Editor 时,一切正常。在随后的调用中(或者更确切地说,调用除第一次调用之外的任何其他列),例如第 3 列的装饰器被添加到第 2 列的装饰器之上,这并没有多大好处。
SwingX 文档在该主题上相当稀疏。我发现装饰器似乎FocusListener
在文本字段中添加了一个。
有谁知道如何重置装饰器或至少找出应该删除哪个 FocusListener(在调用装饰器后字段上有三个)?
谢谢!