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