我正在使用JXTreeTable
中的org.jdesktop.swingx
来显示层次结构数据,所以我有一些父节点和一些附加到它们的子节点。
我想要的是为父节点和子节点设置不同的renderer
。
示例:如果JXTreeTable显示父节点,则第一列应呈现为String,其他带JjeckBox,如果JXTreeTable显示子节点,则应将每个单元呈现为String。
首先,我写了myTreeTableModel,它扩展了AbstractTreeTableModel
这段代码:
@Override
public Class<?> getColumnClass(int column) {
if (column == 0)
return String.class;
return Boolean.class;
}
在父节点中一切正常,但是这显示了一个空的JCheckBox,即使在我希望有一个空白单元格的子节点中也是如此。在方法null
中返回getValueAt(....)
并不能解决问题。所以,我想使用Renderer类,但我不知道从哪里开始。我写了一个像这样的伪渲染器:
private class CustomCellRender implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
setOpaque(true);
JComponent component = null;
if (value instanceof Parent_Node) {
if (column == 0)
component = new JLabel();
else
component = new JCheckBox();
} else if (value instanceof Child_Node) {
component = new JLabel();
}
return component;
}
}
我将其设置为:
myTreeTable.setDefaultRenderer(Object.class, new CustomCellRender());
有谁可以告诉我哪里错了或给我一些解决这个问题的技巧?谢谢你的时间。
编辑:我尝试在方法System.out.println(...)
中插入测试getTableCellRendererComponent
,但它从未被调用过。所以JTreeTable从不运行这种方法。