Java JXTreeTable不显示我的数据

Java JXTreeTable不显示我的数据,java,swing,swingx,jxtreetable,Java,Swing,Swingx,Jxtreetable,这是我的代码,里面怎么了 DemoJFrame.java 包com.suru; 导入javax.swing.UIManager; 导入org.jdesktop.swingx.treetable.TreeTableModel; 公共类DemoJFrame扩展了javax.swing.JFrame{ 私有javax.swing.JScrollPane-jScrollPane1; 私有org.jdesktop.swingx.JXTreeTable树表; 私有最终树模型gen; 公共DemoJFrame

这是我的代码,里面怎么了

DemoJFrame.java
包com.suru;
导入javax.swing.UIManager;
导入org.jdesktop.swingx.treetable.TreeTableModel;
公共类DemoJFrame扩展了javax.swing.JFrame{
私有javax.swing.JScrollPane-jScrollPane1;
私有org.jdesktop.swingx.JXTreeTable树表;
私有最终树模型gen;
公共DemoJFrame(){
gen=新的TreeTableGen();
初始化组件();
设置大小(600500);
setLocationRelativeTo(此);
}
私有组件(){
jScrollPane1=newjavax.swing.JScrollPane();
treeTable=neworg.jdesktop.swingx.JXTreeTable();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle(“JXTreeTable演示”);
树表。设置树表模型(gen);
jScrollPane1.setViewportView(树型);
getContentPane().add(jScrollPane1,java.awt.BorderLayout.CENTER);
包装();
}
公共静态void main(字符串args[])引发异常{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
invokeLater(new Runnable()){
@凌驾
公开募捐{
新建DemoJFrame().setVisible(true);
}
});
}
}
公共类数据库{
int-id;
字符串数据;
整数金额;
}
公共类主数据库{
int-id;
字符串名;
整数合计;
ArrayList数据库;
}
//MyTableModelGenerator
包com.suru;
导入java.util.ArrayList;
导入org.jdesktop.swingx.treetable.DefaultTreeTableModel;
公共类TreeTableGen扩展了DefaultTreeTableModel{
私有静态最终字符串[]列=新字符串[]{
“ID”、“姓名”、“金额”
};
ArrayList ArrayList;
公有树{
//数据源类
//打印下面的数据
DataSource DataSource=新数据源();
arrayList=dataSource.getMainDataBeans();
for(MainDataBean:arrayList){
System.out.println(bean);
ArrayList-dataBeans=bean.getDataBeans();
for(数据区数据区:数据区){
System.out.println(数据库);
}
System.out.println(“=========================================================================”);
}
}
@凌驾
公共布尔值isCellEditable(对象节点,int列){
返回false;
}
@凌驾
公共布尔isLeaf(对象节点){
返回数据库的节点实例;
}
@凌驾
公共字符串getColumnName(int columnIndex){
返回列[columnIndex];
}
@凌驾
public int getColumnCount(){
返回列的长度;
}
@凌驾
公共对象getValueAt(对象节点,int columnIndex){
if(MainDataBean的节点实例){
MainDataBean数据=(MainDataBean)节点;
如果(columnIndex==0){
返回数据。getId()+“”;
}else if(columnIndex==1){
返回data.getName();
}else if(columnIndex==2){
返回数据。getTotal()+“”;
}否则{
返回“在1处未找到数据”;
}
}else if(数据库的节点实例){
DataBean数据=(DataBean)节点;
如果(columnIndex==0){
返回数据。getId()+“”;
}else if(columnIndex==1){
返回data.getData();
}else if(columnIndex==2){
返回数据。getAmount()+“”;
}否则{
返回“在2处未找到数据”;
}
}否则{
返回null;
}
}
@凌驾
公共对象getChild(对象父对象,int索引){
return((MainDataBean)parent.getDataBeans().get(index);
}
@凌驾
public int getChildCount(对象父对象){
if(MainDataBean的父实例){
return((MainDataBean)parent.getDataBeans().size();
}否则{
返回arrayList.size();
}
}
@凌驾
public int getIndexOfChild(对象父对象、对象子对象){
MainDataBean pa=((MainDataBean)父级);
DataBean ch=((DataBean)子级);
ArrayList-dataBeans=pa.getDataBeans();
for(int i=0;i
我的输出屏幕截图:


您没有将DefaultTreeTableModel传递给根节点

因此,DefaultTreeTableModel正在生成自己的空根节点,然后您也不会向其中添加任何内容

您可以向根节点添加一些内容,也可以添加自己的根节点

DemoJFrame.java

package com.suru;

import javax.swing.UIManager;
import org.jdesktop.swingx.treetable.TreeTableModel;

public class DemoJFrame extends javax.swing.JFrame {

    private javax.swing.JScrollPane jScrollPane1;
    private org.jdesktop.swingx.JXTreeTable treeTable;
    private final TreeTableModel gen;

    public DemoJFrame() {
        gen = new TreeTableGen();
        initComponents();
        setSize(600, 500);
        setLocationRelativeTo(this);
    }

    private void initComponents() {
        jScrollPane1 = new javax.swing.JScrollPane();
        treeTable = new org.jdesktop.swingx.JXTreeTable();
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("JXTreeTable Demo");
        treeTable.setTreeTableModel(gen);
        jScrollPane1.setViewportView(treeTable);
        getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);
        pack();
    }

    public static void main(String args[]) throws Exception {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new DemoJFrame().setVisible(true);
            }
        });
    }
}

public class DataBean {
    int id;
    String data;
    int amount;
}

public class MainDataBean {
    int id;
    String name;
    int total;
    ArrayList<DataBean> dataBeans;
}


//MyTableModelGenerator

package com.suru;

import java.util.ArrayList;
import org.jdesktop.swingx.treetable.DefaultTreeTableModel;

public class TreeTableGen extends DefaultTreeTableModel {

    private static final String[] COLUMNS = new String[]{
        "ID", "Name", "Amount"
    };
    ArrayList<MainDataBean> arrayList;

    public TreeTableGen() {
        // data source class
        // printing data below
        DataSource dataSource = new DataSource();
        arrayList = dataSource.getMainDataBeans();

        for (MainDataBean bean : arrayList) {
            System.out.println(bean);
            ArrayList<DataBean> dataBeans = bean.getDataBeans();
            for (DataBean dataBean : dataBeans) {
                System.out.println(dataBean);
            }
            System.out.println("==========================================");
        }
    }

    @Override
    public boolean isCellEditable(Object node, int column) {
        return false;
    }

    @Override
    public boolean isLeaf(Object node) {
        return node instanceof DataBean;
    }

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

    @Override
    public int getColumnCount() {
        return COLUMNS.length;
    }

    @Override
    public Object getValueAt(Object node, int columnIndex) {
        if (node instanceof MainDataBean) {
            MainDataBean data = (MainDataBean) node;
            if (columnIndex == 0) {
                return data.getId() + "";
            } else if (columnIndex == 1) {
                return data.getName();
            } else if (columnIndex == 2) {
                return data.getTotal() + "";
            } else {
                return "data not found! at 1";
            }
        } else if (node instanceof DataBean) {
            DataBean data = (DataBean) node;
            if (columnIndex == 0) {
                return data.getId() + "";
            } else if (columnIndex == 1) {
                return data.getData();
            } else if (columnIndex == 2) {
                return data.getAmount() + "";
            } else {
                return "data not found! at 2";
            }
        } else {
            return null;
        }
    }

    @Override
    public Object getChild(Object parent, int index) {
        return ((MainDataBean) parent).getDataBeans().get(index);
    }

    @Override
    public int getChildCount(Object parent) {
        if (parent instanceof MainDataBean) {
            return ((MainDataBean) parent).getDataBeans().size();
        } else {
            return arrayList.size();
        }
    }

    @Override
    public int getIndexOfChild(Object parent, Object child) {
        MainDataBean pa = ((MainDataBean) parent);
        DataBean ch = ((DataBean) child);
        ArrayList<DataBean> dataBeans = pa.getDataBeans();
        for (int i = 0; i < dataBeans.size(); i++) {
            DataBean dataBean = dataBeans.get(i);
            if (dataBean.getId() == ch.getId()) {
                return i;
            }
        }
        return -1;
    }

}


my output in console as follows:

MainDataBean{id=1, name=bean1, total=2974}
DataBean{id=10, data=val (1, 0), amount=900}
DataBean{id=11, data=val (1, 1), amount=104}
DataBean{id=12, data=val (1, 2), amount=861}
DataBean{id=13, data=val (1, 3), amount=947}
DataBean{id=14, data=val (1, 4), amount=162}
==========================================
MainDataBean{id=2, name=bean2, total=2215}
DataBean{id=20, data=val (2, 0), amount=141}
DataBean{id=21, data=val (2, 1), amount=196}
DataBean{id=22, data=val (2, 2), amount=769}
DataBean{id=23, data=val (2, 3), amount=146}
DataBean{id=24, data=val (2, 4), amount=963}
==========================================
MainDataBean{id=3, name=bean3, total=2816}
DataBean{id=30, data=val (3, 0), amount=810}
DataBean{id=31, data=val (3, 1), amount=675}
DataBean{id=32, data=val (3, 2), amount=895}
DataBean{id=33, data=val (3, 3), amount=290}
DataBean{id=34, data=val (3, 4), amount=146}
==========================================
MainDataBean{id=4, name=bean4, total=1537}
DataBean{id=40, data=val (4, 0), amount=38}
.....
.....
but it is not reflecting in my frame