我在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来修改某些功能。这使我可以灵活地选择特定单元格来包含组合框,我目前正在尝试将其修改为解决方案。
答案 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变量,对它们执行特定检查,以确保有数据填充和瞧。
解决方案看起来很简单,我觉得现在非常愚蠢......