Java - изменение рендерера JTable для класса - PullRequest
1 голос
/ 16 июля 2010

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

Я объявил JTable и установил рендерер по умолчанию на свой собственный, дляКласс Calendar, чтобы любые Calendar s давали значимое представление, а не просто 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, как это было сделано Здесь

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

Теперь я могу заполнить столбцы с Calendar s, пока они заполняют 0-ю строку, что я и хотел, но что помешало мне сделать это в первойместо

1 Ответ

2 голосов
/ 16 июля 2010

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

...