2015-12-12 3 views
0

У меня есть JTable, и в одном столбце у меня есть JComboBox для каждой из строк. Я динамически добавляю строки, когда нажимаю кнопку. Выбор, сделанный в поле со списком, определит, какой расчет выполняется для этой конкретной строки. Для аргументов ради позволяет сказать, что варианты для выпадающего списка являются: вариант 1, вариант 2, вариант 3 и вариант 4.JComboBox запоминает другие выборы

Проблема, которую я имею следующим образом:

Say Я добавил 2 строки и выберите любой вариант из combobox для строки 1, когда я иду, чтобы сделать выделение в поле со списком для строки 2, будет выбран тот же выбор, что и для строки 1. Кажется, что-то вроде памяти. Как я могу отключить это, так что выбор по умолчанию всегда равен -1 (т. Е. Не выбранным параметрам)? Я хотел бы иметь полный контроль над этим.

Вот пример фрагмента кода только с учетом варианта 1:

String labels[] = {"Option 1", "Option 2", "Option 3", "Option4"}; 
     JComboBox comboBox = new JComboBox(labels); 
     comboBox.setSelectedIndex(-1); 


     ItemListener itemListener = new ItemListener() { 
     public void itemStateChanged(ItemEvent itemEvent) { 
     int state = itemEvent.getStateChange(); 
     ItemSelectable is = itemEvent.getItemSelectable(); 

     if (selectedString(is) == "Option 1" & state == ItemEvent.SELECTED){ 


      System.out.println("A");  

     } 

     } 

     }; 

    comboBox.addItemListener(itemListener); 

Большое спасибо за ваше время и помочь :)

+0

Извините код, говорящий ни о чем ..., для лучшей помощи скорее опубликуйте SSCCE/MCVE, короткий, runnable, скомпилированный с жестко запрограммированным значением для JTable/XxxTableModel в локальной переменной – mKorbel

ответ

2

Прежде всего не использовать «==» при сравнении строки. Вместо этого вы должны использовать метод equals(...):

if (someString.equals(anotherString)) 
    // do something 

Однако, это не является причиной проблемы.

Вы неправильно используете JComboBox для JTable. Вы НЕ должны использовать ItemListener (или любой слушатель).

Это поле используется как редактор таблицы. Это означает, что когда вы выбираете значение из поля со списком, обновляется TableModel таблицы. Поэтому, если у вас есть пользовательская логика на основе выбранного значения, вам необходимо переопределить метод setValueAt(...) вашего TableModel.

@Override 
public void setValueAt(Object value, int row, int column) 
{ 
    super.setValueAt(value, row, column); 

    // add your custom logic here 
} 

Как я могу отключить эту функцию, так что выбор по умолчанию всегда -1

Значение, отображаемое в поле со списком берется из TableModel. Поэтому, если вы установите значение по умолчанию равным null, поле со списком не будет иметь выбор при запуске редактирования.

Для получения дополнительной информации и рабочих примеров ознакомьтесь с разделом из учебника Swing по телефону How to Use Tables. Держите ссылку на учебник доступной для будущих ссылок на основы Swing.

+0

Спасибо, что указал мне в правильном направлении. Очень признателен! – volican

Смежные вопросы