我要尝试的是从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);
什么都没有输出。任何帮助都会很棒!
答案 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];
}
}