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
。