我有一个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);
答案 0 :(得分:3)
与所有Swing组件一样,JTable依赖于MVC模式(在多个级别,但这不是主题)。
你有一个视图(JTable),一个模型(稍后我会回来)和一个控制器(在这里实现为一组事件监听器:每种控件都有一个控制器)。
你拥有的数组可能是一个很好的模型起点。但是,Swing提供了更好的方法来在JTable中注入数据。实际上,JTable使用TableModel
的实现作为模型。希望已经存在一个实现:DefaultTableModel
。
所以,我建议你这样做:创建DefaultTableModel,在其行/列中放入要在表格中显示的所有数据,然后调用JTable#setModel(TableModel)
让thze表显示您的数据。
显然,您很快就会发现DefaultTableModel与您想要做的事情之间存在各种不匹配。然后是时候创建我们自己的表模型了。但这是另一个问题。
此外,不要忘记查看Swing tutorial,处理Swing组件通常是件好事。
答案 1 :(得分:1)
我看不到你在哪里有任何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 );
}
答案 2 :(得分:1)
查看GlazedLists。它们使您可以非常轻松地从列表中创建合适的TableModel对象。
ArrayList< PRIvariable> myList = new ArrayList<PRIvariable>();
... 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<PRIvariable> eventList = GlazedLists.eventList(myList);
EventTableModel<PRIvariable> tableModel = new EventTableModel<PRIvariable>(eventList,propertyNames,columnLabels,writable);
JTable table = new JTable(tableModel);