0

我正在研究 Swing 应用程序的 TreeTable 组件。我按照TreeTables2给出的教程进行操作

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

树桌设计

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

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;
}

}

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

输入输出

这是我第一次在 swing 中尝试自定义 Tree table 组件,感觉有点复杂。有人可以帮我在树表中相应地查看数据。或者,如果有人有比这种方法更好的解决方法以便比这更容易构建树表,请帮助我。

4

2 回答 2

0

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

于 2016-04-04T04:23:36.143 回答
0

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

于 2016-04-01T12:00:17.433 回答