Совместное использование JTable и JComboBox

Я пытаюсь создать JTable, в ячейке которого есть JComboBox. Я знаю, что мог бы использовать редактор ячеек, но хитрость в том, что мне нужна разная информация в поле со списком каждой строки. Каждая строка в таблице представляет объект, в этом объекте есть список массивов, и его содержимое этого массива, которое я хочу, в полях со списком. Вот мой мыслительный процесс.

table = new JTable(tableModel);
tableModel = new DefaultTableModel();
forestTable.setModel(tableModelForest);
tmpColum = forestTable.getColumnModel().getColumn(5);
tmpColum.setCellEditor(new DefaultCellEditor(comboBox));
comboBox = new JComboBox<Tree> ();
comboBox.setEditable(false);

Теперь, когда я позже вызываю метод (нажав кнопку), я хочу вставить новую строку с уникальным полем со списком в столбце 5, но я понятия не имею, как это сделать. Я пробовал с.

public void fillTable(String text){
    tableModel.insertRow(tableModel.getRowCount(), "" } );
    tableModel.fireTableRowsInserted(
    tableModel.getRowCount(),
    tableModel.getRowCount());

    comboBox.addItem(text);

}


person Simon Nordahl    schedule 06.03.2013    source источник
comment
Ввод fillTable является строкой, потому что было проще привести пример строкового ввода вместо массивов.   -  person Simon Nordahl    schedule 06.03.2013
comment
Используйте один ComboBoxCellEditor, когда вызывается getTableCellEditorComponent, проверьте индекс строки и перезагрузите ComboBoxModel   -  person MadProgrammer    schedule 06.03.2013


Ответы (1)


Тем не менее, подходящий способ - использовать редактор ячеек.

tmpColum.setCellEditor(new DefaultCellEditor(comboBox) {
    @Override
    public Component getTableCellEditorComponent(JTable table,
                                         Object value,
                                         boolean isSelected,
                                         int row,
                                         int column) {
        JComboBox comboBox = (JComboBox)super.getTableCellEditorComponent(
            table, value, isSelected, row, column);
        // stuff the combobox with values and selection.
        ComboBoxModel cbmodel = getMyCBModel(row); // Or (ComboBoxModel)value
        comboBox.setModel(cbmodel);
        // Or:
        if (value == null)
            comboBox.setSelectedIndex(-1);
        else
            comboBox.setSelectedItem(value);
        return comboBox;
    }
});
person Joop Eggen    schedule 06.03.2013