gpt4 book ai didi

Java - 更改每个类的 JTable 渲染器

转载 作者:行者123 更新时间:2023-11-30 05:11:20 27 4
gpt4 key购买 nike

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

我已经为 Calendar 类声明了一个 JTable 并将默认渲染器设置为我自己的渲染器,以便任何 Calendar 都可以提供有意义的表示,而不仅仅是一个 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 ,否则这不会起作用 Here

根据sun的Documentation ,看起来 getColumnClass 应该完全执行我上面给出的示例中覆盖的操作 - 为什么当我覆盖该方法时它会起作用,但当我离开库存实现时却不起作用?

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

最佳答案

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

关于Java - 更改每个类的 JTable 渲染器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3268162/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com