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
.