2016-11-30 14 views
0

DBのデータを持つJTableを示すGUIアプリケーションを使用したプロジェクトがあります。私はDefaultTableModelオブジェクトを使用しています。私のコードは次のとおりです。ArrayListTableModelを使用したJTable

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を使いたいと思います。あなたgetValueAt()方法において

答えて

0

は、この行が間違っている:

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

行がArrayListObject[]のアレイは、したがって、rows.get(aRow)はObject[]を返しています。あなたは次のようなことをする必要があります:

Object[] row=(Object[])rows.get(aRow); 
return row[aColumn]; 
関連する問題