Как в Java установить редактор ячеек в двух разных столбцах для одного и того же типа данных?

Это мой первый вопрос здесь, так как я немного новичок в Java, поэтому прошу прощения, если это тривиальный вопрос, но мне не удалось найти какую-либо информацию об этом...

Моя проблема: у меня есть Java свинг-форма с Jtable. Я заполнил таблицу tableModel и использовал tableRenderer для отображения того, что хотел.

В таблице 3 столбца:

col-0 = Object

col-1 = Date (just date)

col-2 = Date (just time).

Я успешно установил редактор (jCalendar) для типов дат, но я хочу, чтобы в столбце-1 был JCalendar (что нормально), но в столбце-2 я пытался вставить JSpinner за введение времени.

Есть ли способ иметь разные редакторы ячеек для одного и того же типа данных (в моем случае Дата)?


person Carlos Sousa    schedule 31.07.2015    source источник


Ответы (2)


Есть ли способ иметь разные редакторы ячеек для одного и того же типа данных (в моем случае это дата)?

Вы добавляете редактор в определенный столбец TableColumnModel:

table.getColumnModel().getColumn(???).setCellEditor(???);
person camickr    schedule 31.07.2015

Вы можете переопределить метод getTableCellRendererComponent в своем пользовательском TableRenderer, затем, проверив номер столбца, вы можете выбрать, какой компонент вернуть.

public Component getTableCellRendererComponent(JTable table,
                                               Object value,
                                               boolean isSelected,
                                               boolean hasFocus,
                                               int row,
                                               int column)
{
  if(column == 1){
    return new JCalendar();
  }else if(column == 2){
    return new JSpinner(2015,07,31);
  }else{
    return super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);
  }
}
person storm87    schedule 31.07.2015
comment
Я не думаю, что это подходит для моих нужд. Речь идет о редактировании данных в ячейке, а не об отображении/рендеринге данных. Но все равно спасибо. - person Carlos Sousa; 01.08.2015
comment
Извините, я думал, вы говорите о внешности. В любом случае вы можете следовать той же схеме со своим собственным CellEditor, вам просто нужно заменить getTableCellRendererComponent(..) на getTableCellEditorComponent(..) - person storm87; 01.08.2015