2

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 のドキュメントは、そのトピックに関してかなりまばらです。FocusListenerデコレータがテキストフィールドに a を追加しているように見えることがわかりました。

デコレータをリセットする方法、または少なくともどの FocusListener (デコレータが呼び出された後にフィールドに 3 つある) を削除する方法を知っている人はいますか?

ありがとう!

4

0 に答える 0