我正在研究 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 组件,感觉有点复杂。有人可以帮我在树表中相应地查看数据。或者,如果有人有比这种方法更好的解决方法以便比这更容易构建树表,请帮助我。