Обновление JComboBox с помощью SwingX AutoCompleteDecorator

Я использую SwingX AutoCompleteDecorator на JComboBox. Все работает нормально, за исключением того, что я хотел бы, чтобы мой пользователь мог изменить имя моего объекта, имя, которое также отображается в поле со списком. Проблема в том, что я могу обновить поле со списком, но отображаемая строка из декоратора автозаполнения остается такой же, как показано на рисунке:   Проблема

Код для обновления поля со списком выглядит так:

try {
   Aannemer a = getNewAannemer();
   MainController.getInstance().updateAannemer(a);
   aannemerBox.revalidate();
   aannemerBox.repaint();
} catch (Exception ex) {
   //...
}

Строка обновляется, когда я повторно выбираю объект из списка. Я также пытался использовать персонализированный рендерер и редактор для поля со списком.

Любые идеи, как я могу также обновить строку, показанную в поле со списком?


person Dennis    schedule 17.10.2014    source источник


Ответы (1)


С текущим кодом трудно сказать, что происходит не так. Следующий код отлично работает для меня

import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
import java.awt.BorderLayout;
import java.awt.EventQueue;

public class AutoCompleteCombobox {

  public static void main( String[] args ) {
    EventQueue.invokeLater( () -> {
      JFrame frame = new JFrame( "TestFrame" );

      JComboBox<String> comboBox = new JComboBox<>(  );
      DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>(  );
      model.addElement( "First" );
      model.addElement( "Second" );
      comboBox.setModel( model );
      comboBox.setEditable( true );

      AutoCompleteDecorator.decorate( comboBox );

      frame.getContentPane().add( comboBox );

      JButton button = new JButton( "Add item" );
      button.addActionListener( e -> {
        String selectedItem = ( String ) comboBox.getSelectedItem();
        if ( comboBox.getSelectedIndex() == -1 ){
          model.addElement( selectedItem );
        }
      } );
      frame.getContentPane().add( button, BorderLayout.SOUTH );

      frame.pack();
      frame.setVisible( true );
      frame.setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE );
    } );
  }
}
  • Автозаполнение работает как положено
  • Я могу вводить новые элементы
  • При использовании кнопки добавления я могу добавить новый элемент, и автозаполнение ведет себя хорошо.

Короче говоря, я не могу воспроизвести вашу проблему. Пожалуйста, опубликуйте фрагмент кода в своем вопросе, который позволяет нам воспроизвести проблему.

person Robin    schedule 17.10.2014