2016-11-30 1 views
0

J'ai un projet avec une application graphique qui montre un JTable avec des données de DB. J'utilise l'objet DefaultTableModel. Mon code est:JTable avec ArrayListTableModel

Facade facade = new Facade(); 
      ArrayList<Suppliers> suppliers = facade.getAllSuppliers(); 

      JFrame frame = new JFrame("JTable Data"); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.setSize(300, 600); 

      Container content = frame.getContentPane(); 
      content.setLayout(new BorderLayout()); 

      JTable table = new JTable(); 
      ArrayList<Object[]> list = new ArrayList<Object[]>(); 
      for(int i = 0; i < suppliers.size(); i++) 
      { 
       list.add(new Object[] 
         { 
           suppliers.get(i).getId(), 
           suppliers.get(i).getName(), 
           suppliers.get(i).getStreet(), 
           suppliers.get(i).getCity(), 
           suppliers.get(i).getState(), 
           suppliers.get(i).getZip(), 
         }); 
      } 
      table.setModel(new DefaultTableModel(list.toArray(new Object[][]{}), 
        new String[]{"id", "name", "street", "city", "state", "zip"})); 

      JScrollPane scrollList = new JScrollPane(table); 
      content.add(scrollList, BorderLayout.CENTER); 

      frame.setVisible(true); 
     } 
    }; 
    EventQueue.invokeLater(runner); 

Maintenant, je veux créer un objet ArrayListTableModel avec la fonctionnalité qui offre ArrayList objets. Voici le code:

public class ArrayListTableModel extends AbstractTableModel { 
private ArrayList rows; 

private String[] columnNames = {}; 

/** 

* 

* @param columnNames 

* @param rows 

*/ 

public ArrayListTableModel(String[] columnNames, ArrayList rows) { 

    this.columnNames = columnNames; 

    this.rows = rows; 

} 

@Override 

public String getColumnName(int column) { 

    if (columnNames[column] != null) { 

     return columnNames[column]; 

    } else { 

     return ""; 

    } 

} 

@Override 

public int getRowCount() { 

    return rows.size(); 

} 

@Override 

public int getColumnCount() { 

    return columnNames.length; 

} 

@Override 

public Object getValueAt(int aRow, int aColumn) { 

    ArrayList row = (ArrayList) rows.get(aRow); 

    return row.get(aColumn); 

} 

}

Lorsque je tente d'utiliser cette classe dans la principale méthode, je reçois l'exception:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: 
    [Ljava.lang.Object; cannot be cast to java.util.ArrayList 

Je voudrais remplacer DefaultTableModel et utiliser ArrayListTableModel.

Répondre

0

Dans votre méthode getValueAt(), cette ligne est faux:

ArrayList row=(ArrayList) rows.get(aRow); 

lignes est un ArrayList de Object[] tableaux, donc, retourne rows.get (aRow) Object[]. Vous devrez faire quelque chose comme:

Object[] row=(Object[])rows.get(aRow); 
return row[aColumn];