Search code examples
javaswingarraylistjtableabstracttablemodel

Populating a JTable using ArrayList<String>


So I try to populate jtable using my arraylist, I also want to keep 3-layer architecture

My DAL I read data from file and try to populate it into table

   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;
        }

    }

My UI

I want to populate table model with arraylist I had before but im not sure how to do it.

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
    }

}

Solution

  • Don't use an ArrayList.

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

    You already have the data in an Array. You can use the addRow(...) method of the DefaultTableModel which will take the data in the array and add the data to the model for you.

    So change your method signature. Instead of returning an ArrayList you should return a DefaultTableModel. Then you can use the model to create your JTable.