更新组合框以在JTable中显示特定索引

时间:2014-01-06 13:40:13

标签: java jtable jcombobox tablecelleditor cellrenderer

我在JTable列中的JComboBox中存在值的现有内容。我想要做的是从现有对象读取值并更新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来修改某些功能。这使我可以灵活地选择特定单元格来包含组合框,我目前正在尝试将其修改为解决方案。

1 个答案:

答案 0 :(得分: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变量,对它们执行特定检查,以确保有数据填充和瞧。

解决方案看起来很简单,我觉得现在非常愚蠢......