Java - Изменяющий рендерер JTable в классе

Я надеялся, что кто-то мог объяснить что-то мне, когда я нашел свое решение, но я не понимаю, почему оно работает. Я хотел установить рендерер по умолчанию Типом класса к целой таблице, не знающей при создании, где объекты будут в нем.

Я объявил JTable и установил рендерер по умолчанию на это мое собственное, для Calendar класс так, чтобы любой Calendars дал бы значимое представление, не просто a toString() из себя.

JTable table = new JTable();
table.setDefaultRenderer(Calendar.class, new MyRenderer());

public class MyRenderer extends DefaultTableCellRenderer{
    public MyRenderer() { super(); }
    @Override
    public void setValue(Object value){
            setText(makeCalendarToDate((GregorianCalendar)value));
    }
}

Это не работало бы, пока я не переопределил метод getColumnClass как был сделан Здесь

Согласно Документации солнца, это похоже getColumnClass должен сделать точно, что было переопределено в примере, который я дал выше - почему он работает, когда я переопределяю тот метод, но не, когда я оставляю реализацию запаса?

Теперь я могу заполнить столбец Calendars ожидание они заполняют 0th строку, которая является тем, что я хотел, но что препятствовало тому, чтобы я делал это во-первых?

1
задан Ryan 16 July 2010 в 19:34
поделиться

1 ответ

JTable получает класс столбца из модели. Ответ заключается в реализации AbstractTableModel, предполагая, что это то, на чем вы основываете свою табличную модель. В AbstractTableModel getColumnClass реализован следующим образом: return Object.class; Таким образом, если вы не переопределите его, объекты столбца всегда будут обрабатываться как Object. Модель не справится с этим автоматически. Вам просто нужно переопределить getColumnClass, этого нет.

2
ответ дан 2 September 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: