使用ComboBox更新JTable中的特定单元格

时间:2013-11-29 12:07:36

标签: java swing jtable jcombobox tablecelleditor

我正在使用DOM Parser读取数据以更新JTable。我有一个列(ValidValues),可能不一定位于XML中。

但是,如果在从XML读入时找到此标记,我会获取该值并从SQL查询中使用它来返回可用记录的向量。

然后,我希望使用特定的组合框填充JTable,该组合框在读取标记的正确行上返回。 E.G我可能不会读取标签,直到从XML文档中读入第17行。

我已经在相同的代码中完成了两个类似的JCombo盒子,但它们保持不变,所以它们没有问题。

由于这在单元格之间发生了变化,我不确定如何继续,我查看了Oracle教程,但它们似乎只是演示了如何更改一列。进一步的研究也没有发现与这个领域有关。

通过vector更新常量JComboBox的代码:

        propColumn = table.getColumnModel().getColumn(ENV_PROPERTIES_COLUMN);
        propComboBox = new JComboBox();
        propComboBox.addItem("");
        constructEnvProperties();
        propColumn.setCellEditor(new DefaultCellEditor(propComboBox));

public void constructEnvProperties(){

    IWM781EnvProfilePropertiesCtl ctl = new IWM781EnvProfilePropertiesCtl();

    Vector<IWM781EnvProfileProperties> recordSet = ctl.getRecordSet("TestEnvXXX", con);

    for(int i = 0; i < recordSet.size(); i++){
        logger.debug(recordSet.get(i).getProp781Property());
        propComboBox.addItem(recordSet.get(i).getProp781Property());    
    }
}

尝试使用变体组合框:

if(tableEntryElement.getElementsByTagName("ValidValues").item(0) != null){

     // Build combo box based on <SystemCode> tag
    logger.debug(tableEntryElement.getElementsByTagName("ValidValues").item(0).getTextContent());

        TableColumn optionColumn = table.getColumnModel().getColumn(OPTION_COLUMN);

        JComboBox optionComboBox = new JComboBox();
        optionComboBox.addItem("");
        constructOptions(tableEntryElement);
        optionColumn.setCellEditor(new DefaultCellEditor(optionComboBox));  
    }

我知道这里的问题是:

     TableColumn optionColumn =  table.getColumnModel().getColumn(OPTION_COLUMN);

因为它引用了整个专栏,但任何想法都会受到高度赞赏。

我还简要阅读了TableColumn的API,我仍在其中,看看我是否能找到引用该列行的方法。

提前致谢

1 个答案:

答案 0 :(得分:2)

听起来有些行可能有不同的JComboBox值。您可以利用TableComboBoxByRow中显示的方法,该方法会覆盖getCellEditor(),为某些行提供所需的editor