使用ArrayList <string> </string>填充JTable

时间:2014-03-06 04:37:02

标签: java swing arraylist jtable abstracttablemodel

所以我尝试使用我的arraylist填充jtable,我也想保留3层架构

我的DAL 我从文件中读取数据并尝试将其填充到表中

   public class E {
         public  ArrayList<String> getinformationforthetable() {
        Scanner s = null;
          ArrayList<String> data = new  ArrayList<String>();
        try {
            s = new Scanner(new File("songs.txt"));
            while (s.hasNextLine()) {
            String line = s.nextLine();
            if (line.startsWith("")) {
                String[] atoms = line.split("[#]");
                 ArrayList<String> row = new  ArrayList<String>();
                row.add(atoms[0]);
                row.add(atoms[1]);
                        row.add(atoms[2]);
                        row.add(atoms[3]);
                        row.add(atoms[4]);
                        row.add(atoms[5]);
                data.addAll(row);
            }
            }
        }
        catch(IOException e) {
            e.printStackTrace();    
        }
        finally {
            if (s != null) {
            s.close();
            }
        }
        return data;
        }

    }

我的用户界面

我想用之前的arraylist填充表模型,但我不知道该怎么做。

public class setTableModel extends AbstractTableModel{
   private static final String[] COLUMN_HEADERS =
    {
        "Title", "Artist", "Gengre", "Quality", "Duration","Favorite"
    };
    private static final Class[] COLUMN_TYPES =
    {
       String.class, String.class,String.class,String.class, Integer.class, Boolean.class
    };
    @Override
    public int getRowCount() {
        return COLUMN_HEADERS.length;
    }

    @Override
    public int getColumnCount() {
       return null;
       //todo
    }

    @Override
    public Object getValueAt(int i, int i1) {
       return null;
      //todo
    }

}

3 个答案:

答案 0 :(得分:4)

不要使用ArrayList。

String[] atoms = line.split("[#]");
//ArrayList<String> row = new  ArrayList<String>();
model.addRow( atoms );

您已经拥有数组中的数据。您可以使用DefaultTableModel的addRow(...)方法,该方法将获取数组中的数据并将数据添加到模型中。

因此请更改您的方法签名。而不是返回ArrayList,您应该返回DefaultTableModel。然后,您可以使用该模型来创建JTable。

答案 1 :(得分:3)

我可以看到你遇到的一个问题是ArrayList的结构。它只是一维的。 JTable / TableModel中的数据需要为二维rows/columns

如果您让getinformationforthetable()返回ArrayList<ArrayList<String>>,那么您就可以更轻松地填充表格。

你也可以extends DefaultTableModel。我没有看到AbstractTableModel添加任何特殊功能。然后,您可以使用addRow的{​​{1}}方法添加行。像这样的东西

DefaultTableModel

或者甚至根本不延伸DefaultTableModel model = new MyDefaultTableModel(); E e = new E(); ArrayList<ArrayList<String>> list = e.getinformationforthetable(); for (ArrayList<String> row : list) { model.addRow(row.toArray()); } table.setModel(model); 。您可以覆盖它的DefaultTableModel,类似这样的

getColumnClass()

答案 2 :(得分:2)

在您的示例中,您需要setTableModel(您应该将其重命名为SetTableModel以与Java样式保持一致)以维护数据。目前,您将数据保存在E中。

您可以向SetTableModel addRow(String)添加方法,该方法可以执行split并将数据保存在SetTableModel内。

然后,当您覆盖getValueAt(int row, int column)时,您将从本地数据中提取。

此外,getColumnCount()return COLUMN_HEADERS.lengthgetRowCount()应返回本地数据中维护的行数。