从ArrayList填充的JTable

时间:2018-07-05 21:17:52

标签: java swing arraylist jtable defaulttablemodel

我要尝试的是从JTable中填充ArrayList

数组列表是我在下面定义的类型Record

public class Record {

    int Parameter_ID;
    int NDC_Claims;
    int NDC_SUM_Claims;

    public Record(int parameter, int claims, int ndc_sum_claims){
        Parameter_ID = parameter;
        NDC_Claims = claims;
        NDC_SUM_Claims = ndc_sum_claims;

    }

    public Record() {
        // TODO Auto-generated constructor stub
    }

我也不知道如何用列标题填充表格。这是我到目前为止的内容:

DefaultListModel listmodel = new DefaultListModel();
ArrayList<Record> test = new ArrayList<Record>();
DefaultTableModel modelT = new DefaultTableModel();
    Object data1[] = new Object[3];

    for(int i=0;  i<test.size();i++){
        data1[0] = test.get(i).Parameter_ID;
        data1[1] = test.get(i).NDC_SUM_Claims;
        data1[2] = test.get(i).NDC_Claims;
        modelT.addRow(data1);
    }

table_1 = new JTable(modelT, columnNames);
contentPane.add(table_1, BorderLayout.CENTER);
contentPane.add(table_1.getTableHeader(), BorderLayout.NORTH);

什么都没有输出。任何帮助都会很棒!

2 个答案:

答案 0 :(得分:1)

那么您需要先阅读API。如果您不先阅读API,就无法编程。

DefaultTableModel modelT = new DefaultTableModel();

当您阅读API时,该构造函数会做什么?它创建一个具有0行和0列的模型。您将要创建一个3列和0行的模型,以便可以向该模型添加数据行。阅读DefaultTableModel API

table_1 = new JTable(modelT, columnNames);

该陈述有什么作用?我没有看到允许您指定模型和列名称的构造函数,因此您的代码如何编译。您只想使用创建表 该模型。

contentPane.add(table_1, BorderLayout.CENTER);
contentPane.add(table_1.getTableHeader(), BorderLayout.NORTH);

该表应添加到JScrollPane的视口中。然后,标题将显示为滚动窗格的列标题。

阅读JTable API。该API还具有指向How to Use Tables的Swing教程的链接,您需要阅读该链接以获取基本知识。

ArrayList<Record> test = new ArrayList<Record>();

您创建一个空的ArrayList。那么,当您遍历循环时,您期望发生什么?如果ArrayList中没有数据,如何将数据添加到模型中?

此外,您是否在论坛/网络上搜索了使用DefaultTableModel或JTable类的示例。这些示例将帮助您编写代码。

答案 1 :(得分:0)

您可以创建自定义的 AbstractTableModel ,然后使用该模型创建JTable。 这是一个处理数组的ArrayList的类:

import java.util.ArrayList;

import javax.swing.table.AbstractTableModel;

public class DataTableModel<T> extends AbstractTableModel {

/**
 * Benjamin Rathelot
 */
private static final long serialVersionUID = -7361470013779016219L;
private ArrayList<T[]> data = new ArrayList<T[]>();
private String[] tableHeaders;



public DataTableModel(ArrayList<T[]> data, String[] headers) {
    super();
    this.data = data;
    this.tableHeaders = headers;
}

@Override
public int getRowCount() {

    return data.size();
}

@Override
public int getColumnCount() {

    if(data.size()>0) return data.get(0).length;
    return 0;
}

@Override
public Object getValueAt(int arg0, int arg1) { 
    // TODO Auto-generated method stub
    if(data.size()>=arg0) {
        if(data.get(arg0).length>=arg1) {
            return data.get(arg0)[arg1];
        }
    }
    return null;
}

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

}