2016-11-30 7 views
0

У меня есть проект с графическим интерфейсом, который показывает 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); 

Теперь я хочу, чтобы создать ArrayListTableModel объект с функциональностью, которая предлагает ArrayList объекты. Вот код:

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); 

рядов Н. ArrayList из Object[] массивов, поэтому rows.get (Arow) возвращает Object[]. Вам необходимо будет сделать что-то вроде:

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

 Смежные вопросы

  • Нет связанных вопросов^_^