Java-每个类更改JTable渲染器
-
16-09-2020 - |
题
我希望有人能在我找到我的解决方案时向我解释一些事情,但我不明白为什么它有效。我想按类类型将默认渲染器设置为整个表,在创建时不知道对象将在其中的位置。
我已经声明了一个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));
}
}
这将不起作用,直到我overrode方法 getColumnClass
正如所做的那样 这里
据孙氏 文件, ,它看起来像 getColumnClass
应该做我上面给出的例子中被重写的东西-为什么当我重写该方法时它可以工作,但当我离开股票实现时却不能工作?
现在我可以用 Calendar
等待他们填补第0行,这是我想要的,但是什么阻止我这样做?
解决方案
JTable从模型中获取列类。答案在于AbstractTableModel的实现,假设这就是您基于表模型的内容。在AbstractTableModel中getColumnClass已经这样实现了: return Object.class;
因此,除非您复盖它,否则列对象将始终作为对象处理。这不是模型会自动处理的事情。你只需要复盖getColumnClass,没有办法解决这个问题。
不隶属于 StackOverflow