将arraylist数据添加到JTable

我有一个ArreayList,它包含PRIvariable(类的名称)类数据。 下面显示了我的java代码部分。 所以现在我想将这个Arraylist数据放到Jtable中。 我怎样才能做到这一点。 在这里,我已经将pri.dateText , pri.sum , pri.count添加到ar(arraylist)

 PRIvariable pri=new PRIvariable(); while (reader.ready()) { String line = reader.readLine(); String[] values = line.split(","); if(values[2].equals(pri.incDate)){ if(values[4].equals("KI")){ pri.dateText=values[2]+" "+values[4]; pri.count=pri.count+1; pri.sum = pri.sum+Integer.parseInt(values[7]); } } } System.out.println(pri.dateText+" "+pri.sum+" "+pri.count); ar.add(pri); 

像所有Swing组件一样,JTable依赖于MVC模式(在多个级别,但这不是主题)。

你有一个视图(JTable),一个模型(稍后我会回来)和一个控制器(在这里实现为一组事件监听器:每种控件一个控制器)。

你拥有的数组可能是一个很好的模型起点。 但是,Swing提供了更好的方法来在JTable中注入数据。 实际上,JTable使用TableModel作为模型实现。 希望已经存在一个实现: DefaultTableModel

所以,我建议你这样做:创建DefaultTableModel,在其行/列中放入要在表中显示的所有数据,然后调用JTable#setModel(TableModel)让thze表显示您的数据。

显然,你很快就会发现DefaultTableModel和你想要做的事情之间存在各种不匹配。 然后,您将有时间创建我们自己的表模型。 但这是另一个问题。

此外,不要忘记看看Swing教程 ,在处理Swing组件时通常是一件好事。

我没有看到你在哪里有ArrayList。

首先,您创建一个PRI变量对象。 然后,当您从文件中读取一行数据时,您将继续循环。 对于每行数据,您将其拆分为单个令牌,然后将一些令牌数据添加到PRI变量ojbect。 问题是你只有一个PRIVariable对象。 因此,每次读取新的数据行时,都会更改PRI变量对象的值。 在所有循环之后,将这个单个PRI变量对象添加到ArrayList中,但是在ArrayList中只有一个对象。

更简单的解决方案是在获取数据时更新TableModel。 就像是:

 DefaultTableModel model = new DefaultTableModel(...); JTable table = new JTable( model ); ... ... while (reader.ready()) { String line = reader.readLine(); String[] values = line.split(","); String[] row = new String[3]; row[0] = values[?]; row[1] = values[?]; row[2] = values[?]; model.addRow( row ); } 

看看GlazedLists 。 它们使您可以非常轻松地从列表中创建合适的TableModel对象。

 ArrayList< PRIvariable> myList = new ArrayList(); ... fill up the list ... // This assumes your object has a getName() and getAge() methods String[] propertyNames = {"name","age"}; String[] columnLabels = {"Name","Age"}; // Are these columns editable? boolean[] writeable = {false, false}; EventList eventList = GlazedLists.eventList(myList); EventTableModel tableModel = new EventTableModel(eventList,propertyNames,columnLabels,writable); JTable table = new JTable(tableModel);