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

У меня есть существующее содержимое значений в JComboBox, расположенном в столбце JTable. То, что я пытаюсь сделать, это прочитать значение из существующего объекта и обновить ComboBox, чтобы немедленно показать это значение.

Моей первой попыткой было:

 // Sets up properties ComboBox
    propColumn = table.getColumnModel().getColumn(ENV_PROPERTIES_COLUMN);
    propComboBox = new JComboBox();
    propComboBox.addItem(""); // For initial empty string
    constructEnvProperties();

/**
 * Construct Environment Properties comboBox options
 */

     public void constructEnvProperties(){

           Vector<IWM781EnvProfileProperties> recordSet = dataMapperDatabase.getEnvironmentalProperties();

          // Iterate through vector and update combo box
                    for(int i = 0; i < recordSet.size(); i++){

                       logger.debug("Property: " + recordSet.get(i).getProp781Property());
                       propComboBox.addItem(recordSet.get(i).getProp781Property()); 
    }
}

Теперь, когда я хочу обновить ComboBox до выбранного индекса, я использую код:

if(record.getProp785MapProperty().compareTo("") != 0){

    ComboBoxModel model = propComboBox.getModel(); 
    int size1 = model.getSize();

       for (int i1 = 0; i1 < size1; i1++){

            String comparision = record.getRegv785MapRegister();

              if(comparision.equals(propComboBox.getItemAt(i1)))
                 propComboBox.setSelectedIndex(i1);
       }
 }

propColumn.setCellRenderer(new ComboBoxCellRenderer());
propColumn.setCellEditor(new DefaultCellEditor(propComboBox));  

Когда я отлаживаю это, он работает точно так, как я ожидал, но таблица не обновляется.

Я возился с созданием собственного DefaultCellEditor для изменения некоторых функций. Это позволило мне гибко выбирать определенные ячейки для комбинированных полей, и в настоящее время я пытаюсь изменить это как решение.


person Nathan    schedule 06.01.2014    source источник
comment
Подождите, в чем именно вопрос? А что не работает?   -  person Paul Samsotha    schedule 06.01.2014
comment
Извините, просто прочитайте это, и вопрос не возникнет у вас, я в основном хочу обновить ComboBox в JTable, указав индекс, но после этого таблица не обновляется. Он устанавливает индекс (0) для каждой строки.   -  person Nathan    schedule 06.01.2014


Ответы (1)


Выяснил решение проблемы на случай, если кто-то еще посмотрит на это и подумает, хммм, у меня похожие проблемы. Когда я настроил свою TableModel, я использовал метод:

   /**
   * Insert row into JTable
   * @param rowData
   */
public void insertRow (Object rowData){
    rows.add((Object[]) rowData);   
}

Чтобы добавить строки в JTable.

Когда я вставлял строки в JTable из моего основного, я использовал:

 // Data to be inserted into the JTable     
        String[] data = new String[] {seqID, fieldName, type, size, "", value, "", "",""};
        tableModel.insertRow(data);

Из-за жестко закодированных значений "" поля со списком автоматически назначались пустой строке, которая существовала в поле со списком. Быстрое исправление состояло в том, чтобы создать переменную String для каждого значения поля со списком, выполнить определенные проверки для них, чтобы убедиться, что есть данные для заполнения, и вуаля.

Решение выглядит простым, и теперь я чувствую себя довольно глупо .....

person Nathan    schedule 06.01.2014