JComboBox как CellRenderer не устанавливает правильное значение - PullRequest
0 голосов
/ 17 июня 2011

Я использую JComboBox в качестве CellRenderer в моем JTable.
Все отлично работает, JComboBox отображает правильный элемент для соответствующей строки.

Проблема, над которой я сейчас работаю, заключается в том, что при выбореновое значение в JComboBox (например, строка 9), значение установлено правильно, но когда я пытаюсь изменить значение в следующей строке, JComboBox (например, в строке 10) автоматически устанавливает значение строки ранее.

Я создал класс DropDownCellRenderer, который расширяет JComboBox и реализует TableCellRenderer, я подумал, что этого достаточно, но кажется, что объект DropDownCellRenderer одинаков для каждой строки.

table.getColumnModel().getColumn( 3 ).setCellRenderer( new DropDownCellRenderer() );
table.getColumnModel().getColumn( 3 ).setCellEditor( new DefaultCellEditor( new DropDownCellRenderer() ) );

Как можно избежать, чтобы в каждой строке использовался один и тот же объект?

Ответы [ 2 ]

2 голосов
/ 18 июня 2011

Посмотрел исходный код вашего рендерера.

  1. Не думаю, что вам нужно искать Продукт по названию.value, переданный вам , является Продуктом, который исходит из вашей табличной модели (если она реализована правильно).Просто установите value в качестве выбранного элемента, и он должен работать.

  2. Для правильной работы рендерера измените его цвет переднего плана и фона в соответствии с параметром isSelected.Код должен выглядеть следующим образом:

    if (isSelected) {
        setForeground(table.getSelectionForeground());
        super.setBackground(table.getSelectionBackground());
    } else {
        setForeground(table.getForeground());
        setBackground(table.getBackground());
    }
    
  3. Сделать исходный массив значений аргументом конструктора.Это превратит ваш рендерер в универсальный комбинированный рендерер.

1 голос
/ 17 июня 2011

Звучит так, как будто вы сохраняете и отображаете значения внутри самого поля со списком, а не из модели таблицы. Когда вы устанавливаете значение и сохраняете значение в выпадающем списке, вам необходимо обновить модель

...