Update: Как я тестировал мой (возможно, неполный) ответ, я наткнулся на очень хороший С.О. Вопрос, который я думаю, поможет гораздо лучше, чем я мог бы: Putting JComboBox into JTable
Другое обновление: Я снова прочитал ваш вопрос, и я понял, что вы попросили конкретный ряд. Единственный способ, которым я могу думать делать это, чтобы создать пользовательский CellEditor, что-то вроде:
private static class MyCellEditor extends AbstractCellEditor implements TableCellEditor {
DefaultCellEditor other = new DefaultCellEditor(new JTextField());
DefaultCellEditor checkbox = new DefaultCellEditor(new JComboBox(new Object[] {"abc"}));
private DefaultCellEditor lastSelected;
@Override
public Object getCellEditorValue() {
return lastSelected.getCellEditorValue();
}
@Override
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
if(row == 0) {
lastSelected = checkbox;
return checkbox.getTableCellEditorComponent(table, value, isSelected, row, column);
}
lastSelected = other;
return other.getTableCellEditorComponent(table, value, isSelected, row, column);
}
}
В этом примере, обычай CellEditor на самом деле два редактора, и в зависимости от выбираемой строки, конкретный редактор получит вызов (как образно, так и буквально). Я признаю, что lastSelected
казался немного hokey, но я честно не мог найти более простой способ узнать, какое значение редактора нужно вернуть (поскольку getCellEditorValue
не имеет аргументов).
Чтобы сделать ваш стол «правильным», вам, вероятно, придется что-то делать с Renderer (потому что Renderer может или не может знать, чтобы показать выбранное значение JComboBox в качестве начального значения). Это зависит от того, как вы инициализируете данные в фактической таблице.
Для полноты мой первоначальный ответ ниже:
Вы можете добавить компонент JComboBox к ряду с использованием addRow
на TableModel, как показано здесь: How to add row in JTable?
Смотрите также: http://docs.oracle.com/javase/tutorial/uiswing/components/table.html
Я думаю, что основная проблема заключается в том, что вы смешиваете идею редакторов столбцов/R enderers с фактическими данными, которые будут храниться в каждой строке.
этот код может быть помещенный в официальный учебник Оракула, – mKorbel