1

当我找到我的解决方案时,我希望有人可以向我解释一些事情,但我不明白它为什么会起作用。我想按类类型将默认渲染器设置为整个表,在创建时不知道对象将在其中的位置。

我已经为类声明了一个 JTable 并将默认渲染器设置为我自己的渲染器,Calendar这样任何Calendars 都会给出有意义的表示,而不仅仅是toString()它们自己的 a。

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应该完全按照我上面给出的示例中覆盖的内容进行 - 为什么当我覆盖该方法时它会起作用,但在我离开股票实现时却不起作用?

现在我可以用Calendars 填充列,它们填充第 0 行,这是我想要的,但是是什么阻止了我首先这样做?

4

1 回答 1

2

JTable 从模型中获取列类。答案在于 AbstractTableModel 的实现,假设这是您的表模型的基础。在 AbstractTableModel 中 getColumnClass 是这样实现的:return Object.class;因此,除非您覆盖它,否则列对象将始终作为对象处理。这不是模型会自动处理的事情。你只需要覆盖getColumnClass,没有办法。

于 2010-07-16T19:48:46.940 回答