将arraylist数据添加到JTable

时间:2010-12-30 13:23:24

标签: java swing 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);

3 个答案:

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