1

我使用JXTreeTablefromorg.jdesktop.swingx来显示层次结构数据,所以我有一些父节点和一些附加到它们的子节点。我想要的是renderer对父节点和子节点有所不同。

示例:如果 JXTreeTable 显示父节点,则第一列应呈现为字符串,其他列使用 JCheckBox 否则,如果 JXTreeTable 显示子节点,则每个单元格都应呈现为字符串。

首先,我在 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 从不运行这个方法。

4

0 回答 0