Самый легкий путь состоит в том, чтобы реализовать Ваше собственное Загрузка TableModel
public class MyModel extends AbstractTableModel {
List rows;
public int getRowCount() {
return rows.size();
}
public int getColumnCount() {
return 4;
}
public Object getValueAt(int row, int column) {
return rows.get(row).getCol(col); //assuming your row "Object" has a getCol()
}
public Class<?> getColumnClass(int col) {
return Boolean.class;
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
rows.get(rowIndex).getCol(columnIndex).setValue(aValue);
}
}
это в Вас JTable. Если Вы не заменили рендерер ячейки по умолчанию для булевской переменной, все Вы, ячейки будут представлены как флажки благодаря Вам реализация getColumnClass (). Весь ввод данных пользователем к этим флажкам собран с нашим setValueAt ().
Необходимо переопределить:
Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
... в TableCellEditor. Значение, переданное в к этому методу, - то, что можно вставить JComboBox. Это означает, что 'значение', для которого конкретная ячейка должна быть чем-то, что может быть переведено в набор. Это мог потенциально просто быть Список объектов, или это мог быть POJO с полями, которые могли быть превращены в JComboBox.
Поэтому просто редактирование MyComboBoxEditor, чтобы переопределить тот метод и изменить Вашу модель для обеспечения Объекта, который на самом деле представляет несколько других объектов.
Эта страница могла бы помочь Вам, хотя кажется, что Вы ограничиваетесь наличием того же поля комбинированного списка во всех ячейках в столбце.
Необходимо создать подкласс JTable для переопределения метода TableCellEditor getCellEditor (международная строка, международный столбец).
Это позволяет Вам установить произвольных редакторов ячейки для любой строки и комбинации столбца. Путь по умолчанию состоит в том, чтобы установить редактора ячейки для всего столбца.
(Можно также установить рендереры отдельной ячейки путем переопределения getCellRenderer.)
Расширьте JTable с помощью этого кода:
@Override
public TableCellEditor getCellEditor(int row, int column) {
Object value = super.getValueAt(row, column);
if(value != null) {
if(value instanceof JComboBox) {
return new DefaultCellEditor((JComboBox)value);
}
return getDefaultEditor(value.getClass());
}
return super.getCellEditor(row, column);
}
Это создаст уникальный редактор ячеек JComboBox для каждого поля со списком, для которого вы получаете значение a.
@Override
public TableCellEditor getCellEditor(int row, int column) {
Object value = super.getValueAt(row, column);
if(value != null) {
if(value instanceof JComboBox) {
return new DefaultCellEditor((JComboBox)value);
}
return getDefaultEditor(value.getClass());
}
return super.getCellEditor(row, column);
}
Затем переопределите метод toString
из JComboBox
.