从 ArrayList 填充的 JTable

JTable populated from an ArrayList

我想做的是从 ArrayList.

填充 JTable

数组列表是我在下面定义的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
    }

我也不知道如何用 headers 列填充 table。这是我目前所拥有的:

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

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

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

DefaultTableModel modelT = new DefaultTableModel();

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

table_1 = new JTable(modelT, columnNames);

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

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

table 应该添加到 JScrollPane 的视口中。然后 header 将显示为滚动窗格的 header 列。

读取 JTable API。 API 还有一个 link 的 Swing 教程 How to Use Tables 你需要阅读基础知识。

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

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

此外,您是否在 forum/web 中搜索了使用 DefaultTableModel 或 JTable 类 的示例。这些示例将帮助您编写代码。

您可以创建自定义 AbstractTableModel,然后使用该模型创建 JTable。 这是一个 class 处理数组的 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];
 }

}