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

我已经声明了一个JTable,并将默认渲染器设置为我自己的渲染器,用于 Calendar 类,使任何 Calendars会给出一个有意义的表示,而不仅仅是一个 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));
    }
}

这将不起作用,直到我overrode方法 getColumnClass 正如所做的那样 这里

据孙氏 文件, ,它看起来像 getColumnClass 应该做我上面给出的例子中被重写的东西-为什么当我重写该方法时它可以工作,但当我离开股票实现时却不能工作?

现在我可以用 Calendar等待他们填补第0行,这是我想要的,但是什么阻止我这样做?

有帮助吗?

解决方案

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top