2016-11-30 30 views
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

回答

0

在你getValueAt()方法,这条线是错误的:

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

行是Object[]ArrayList阵列,因此,rows.get(AROW)返回Object[]。你将不得不这样做:

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