JXTreeTable中的Renderer单元格,基于java中行的内容

时间:2015-07-30 09:10:27

标签: java swing tablecellrenderer jxtreetable

我正在使用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从不运行这种方法。

0 个答案:

没有答案