【问题标题】:JTable populated from an ArrayList从 ArrayList 填充的 JTable
【发布时间】:2018-12-14 10:50:17
【问题描述】:

我要做的是从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
    }

我也不知道如何用列标题填充表格。这是我目前所拥有的:

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

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

【问题讨论】:

  • 你说没有输出是什么意思?运行程序时没有任何反应吗?您的 GUI 中没有表格吗?有桌子,但它是空的?
  • “任何帮助都会很棒!”任何问题都会很棒。你有问题吗? “我也不知道如何用列标题填充表格。” SO 上的每个线程都应包含 一个 明确、具体的问题。 SO 是一个问答网站,而不是帮助台。

标签: java swing arraylist jtable defaulttablemodel


【解决方案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 类的示例。这些示例将帮助您编写代码。

【讨论】:

  • 感谢您的帮助。对于在没有进一步澄清的情况下提出这样一个愚蠢的问题,我深表歉意。这个信息非常有用!周末愉快
【解决方案2】:

您可以创建自定义 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];
 }

}

【讨论】:

    猜你喜欢
    • 2012-01-27
    • 2017-12-29
    • 1970-01-01
    • 2014-09-09
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2012-02-26
    相关资源
    最近更新 更多