могу ли я добавить поле со списком в определенную ячейку JTable?
Вопрос
Я хочу добавить поле со списком в ячейку JTable.
model=new DefaultTableModel(data,col);
JTableHeader head=new JTableHeader();
head.setBackground(Color.BLUE);
table=new JTable(model);
table.add(head);
JComboBox combo = new JComboBox();
combo.addItem("Names");
combo.addItem("Antony");
combo.addItem("Victor");
combo.addItem("Ramkumar");
table.add(combo);
Но я не могу получить поле со списком в ячейке.Можно ли установить поле со списком?
Решение
Вам необходимо установить TableCellEditor для JTable.Лучше поискать в учебниках по Java, но вот краткое объяснение.
JTable использует для работы три основных класса:
1) Модель таблицы:его функция состоит в том, чтобы сказать, сколько строк и столбцов имеет таблица, и обслуживать данные таблицы. Основные методы — getValue(row,col) и setValue(value, row,col).И запускайте события, чтобы уведомить о перерисовке JTable.
2) TableCellRenderer:его основная цель - отрисовать компоненты в ячейках JTable.Эти компоненты окрашены только:НЕ РАБОТА!если вы нарисуете JComboBox, он не будет отключен, если вы нажмете на него, или если вы нарисуете JCheckbox, он не будет выбран/отменен выбор.
3) Редактор TableCell:его основная цель - нарисовать компонент внутри JTableCell для редактирования значения ячейки.Он получает события и решает, когда начать редактирование, затем вызывается метод getTableCellEditorComponent для возврата компонента редактора.Возвращаемый компонент должен запускать события, чтобы TableCellEditor знал, когда остановить редактирование, получить значение и использовать его для вызова TableModel.setvalue...или отменить редактирование.
Чтобы отобразить JComboBox в JTable, вам необходимо создать собственный TableCellEditor, а это непростая задача, если вы не делали этого раньше.
Другие советы
Взгляни на этоУчебник по Java и найдите на этой странице «Использование поля со списком в качестве редактора».
Попробуй это:у меня это работает... щелкните ячейку, чтобы увидеть поле со списком.
private void comboloader() {
try {
TableColumn gradeColumn = jTable1.getColumnModel().getColumn(0);
JComboBox comboBox = new JComboBox();
comboBox.removeAllItems();
try {
comboBox.addItem("Item 1");
comboBox.addItem("Item 2");
comboBox.addItem("Item 3");
} catch (NullPointerException e) {
} catch (Exception e) {
e.printStackTrace();
}
gradeColumn.setCellEditor(new DefaultCellEditor(comboBox));
} catch (Exception e) {
}
}