Обновление определенной ячейки в JTable с помощью ComboBox

Я читаю данные с помощью DOM Parser для обновления файла JTable. У меня есть столбец (ValidValues), который не обязательно находится в XML.

Однако, если этот тег находится при чтении из XML, я беру значение и использую его для запроса SQL, чтобы вернуть вектор доступных записей.

Затем я хочу заполнить JTable специальным полем со списком значений, возвращенных в правильной строке, в которой был прочитан тег. Например, я не могу прочитать тег, пока 17-я строка не будет прочитана из XML-документа.

Я уже выполнил два похожих блока JCombo в одном и том же коде, но они остаются постоянными, поэтому с ними нет проблем.

Поскольку это меняется между ячейками, я не знаю, как действовать дальше, я просмотрел учебники Oracle, но они, похоже, демонстрируют только то, как можно изменить один столбец. Дальнейшие исследования также не обнаружили ничего, относящегося к этой области.

Код константы 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);

поскольку это ссылка на всю колонку, но любые идеи будут очень признательны.

Я также кратко прочитал API для TableColumn, над которым я все еще работаю, чтобы посмотреть, смогу ли я найти способ сослаться на строку столбца.

заранее спасибо


person Nathan    schedule 29.11.2013    source источник


Ответы (1)


Похоже, что некоторые строки могут иметь разные значения JComboBox. Вы можете использовать подход, показанный в TableComboBoxByRow, который переопределяет getCellEditor() для предоставления желаемого редактор для определенных строк.

person trashgod    schedule 29.11.2013
comment
Великолепно, большое спасибо за вашу помощь, переопределение getCellEditor дает больше свободы, чтобы конкретно определить, как вы хотите, чтобы ячейки были установлены - person Nathan; 29.11.2013
comment
Отлично; поскольку вы используете синтаксический анализатор DOM, рассмотрите возможность включения Document в конкретную реализацию AbstractTableModel. - person trashgod; 29.11.2013
comment
Простите меня, но что вы хотите этим сказать? Я реализовал свою собственную настраиваемую модель таблицы, которая расширяет AbstratDataModel, и использую ее с моим JTable, но ни в коем случае не ссылаюсь на нее в Document. - person Nathan; 29.11.2013
comment
Я думал о чем-то вроде этого, в котором TableModel обращается к частной структуре данных для выполнения своего контракта. - person trashgod; 29.11.2013
comment
Я завершил сам проект, поэтому могу вернуться к его поправкам и попытаться реализовать его таким образом. - person Nathan; 29.11.2013