0
我有一個GUI應用程序顯示JTable
來自數據庫的項目。我正在使用DefaultTableModel
對象。我的代碼是:JTable與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);
現在,我要與提供ArrayList
對象的功能創建一個ArrayListTableModel
對象。下面是代碼:
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);
}
}
當我嘗試在主要方法使用這個類,我收到異常:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException:
[Ljava.lang.Object; cannot be cast to java.util.ArrayList
我想更換DefaultTableModel
和使用ArrayListTableModel
。