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