叶节点未在TreeTable中显示

时间:2016-04-01 11:44:48

标签: java swing jtable jtree jtreetable

我正在研究Swing应用程序的TreeTable组件。我按照TreeTables2

给出的教程

我将一个Message对象传递给我用来创建JTreeTable的PropertiesTableModel,并假设要查看它们,如下图所示。

Tree table design

以下是我的表模型的源代码。

import javax.swing.*;
import java.util.List;

public class PropertiesTableModel extends AbstractTreeTableModel    implements TreeTableModel{

private List<Field> fieldList;
private static int fiedlCount=0;

// Names of the columns.
static protected String[] columnNames= 
new String[]{"Field","Data Type","Value"};
// Types of the columns.
static protected Class[] columnTypes = { TreeTableModel.class,
        ImageIcon.class, Object.class};

public PropertiesTableModel(Message msg){
    super(msg);
    this.fieldList=msg.getListFields();
}

//  The TreeTableNode interface.
@Override
public int getColumnCount() {
    return columnNames.length;
}

@Override
public String getColumnName(int columnIndex){
    return columnNames[columnIndex];
}

@Override
public Class<?> getColumnClass(int columnIndex){
    return columnTypes[columnIndex];
}

public Object getValueAt(Object node,int column) {
    Message msg=(Message)node;

    if (fiedlCount < fieldList.size()){
        Field field = msg.getListFields().get(fiedlCount);
        fiedlCount++;

        if(column==0){
            return field.getFieldDef().getfName();
        }

        if(column==1){
            String dataType=field.getFieldDef().getDataType();
            return PropertiesPanel.getPpIns().getDataTypeIcon(dataType);
        }

        else if (column==2){
            if(field.getFieldDef().getListValue().size()>0){
                return field.getFieldDef().getListValue();
            }
            else{
                return field.getDefaultValue();
            }
        }
    }
    return null;
}
// The TreeModel interface
public int getChildCount(Object node) {
    Object[] children = getChildren(node);
    return (children == null) ? 0 : children.length;
}

public Object getChild(Object node, int i) {
    return getChildren(node)[i];
}

public boolean isLeaf(Object node) {
    return true;
}

protected Object[] getChildren(Object node) {
    return null;
}

}

当我运行应用程序时,只有根节点(消息)出现在表中。

enter output

这是我第一次在摇摆中尝试自定义的Tree表组件,我觉得它有点复杂。有人可以帮我在Tree表中相应地查看数据。或者,如果某人有更好的解决方法而不是采用这种方法来构建比这更容易的树表,请帮助我。

2 个答案:

答案 0 :(得分:0)

调用isLeaf时总是返回true。这意味着你说节点没有子节点。

答案 1 :(得分:0)

我找到了一个关于如何使用JXTreeTable轻松实现树表的好article。由于SwingX已经为此提供了一个组件,因此Swing遵循的方法很简单。我只需要实现一个TreeTableModel来满足我的要求。