У меня есть List
(List<MyBean>
). Затем я использовал его для заполнения 2D array
. Для этого я использовал следующие шаги.Как загрузить этот ArrayList в JTable
MyBean.java
public class MyBean{
private int id;
private String name;
private String address;
/**
* @return the id
*/
public int getId()
{
return id;
}
/**
* @param id the id to set
*/
public void setId(int id)
{
this.id = id;
}
/**
* @return the name
*/
public String getName()
{
return name;
}
/**
* @param name the name to set
*/
public void setName(String name)
{
this.name = name;
}
/**
* @return the address
*/
public String getAddress()
{
return address;
}
/**
* @param address the address to set
*/
public void setAddress(String address)
{
this.address = address;
}
}
public void myMethod(List<MyBean> list){
List<Object> objects = new ArrayList<>();
for (Object object : list){
objects.add(object != null ? object : null);
}
Object rowData1[][] = new Object[objects.size()][];
for (int i = 0; i < objects.size(); i++){
List<Object> row = (ArrayList<Object>)(Object)objects.get(i);
rowData1[i] = row.toArray(new Object[row.size()]);
}
Object columnNames1[] ={"HEADER 1", "HEADER 2", "HEADER 3"};
}
Когда я бегу исполнить этот код, я получил следующие исключения.
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException:
MyBean cannot be cast to java.util.ArrayList
Исключение составляет на этой линии
List<Object> row = (ArrayList<Object>)(Object)objects.get(i);
Я использую это 2D массив для следующих целей.
JTable table1 = new TableWithRowHeader(rowData1, columnNames1);
table1.getColumnModel().getColumn(0).setPreferredWidth(120);
JScrollPane scrollPane1 = new JScrollPane(table1);
scrollPane1.setColumnHeaderView(null);
JPanel jPanel = new JPanel();
jPanel.setLayout(new BorderLayout());
JButton button = new JButton("Add Button");
button.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent ae){
JDialog dialog = new JDialog();
dialog.setTitle("terance");
dialog.setSize(600, 500);
dialog.setLocationRelativeTo(null);
dialog.setVisible(true);
}
});
jPanel.removeAll();
jPanel.add(button, BorderLayout.EAST);
jPanel.revalidate();
JFrame frame = new JFrame("Testing");
frame.setLayout(new BorderLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(jPanel, BorderLayout.NORTH);
frame.add(scrollPane1);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
Вот пример эскиза для окончательного результата.
Как я мог обработать исключение?
Есть идеи?
спасибо.
Почему вы используете двойное литье? '(ArrayList
Первый раз для объекта, а затем для списка объектов. Я ошибаюсь ? – Barrier
Все объекты Java относятся к классу 'Object'. Кастинг к нему бессмысленен, а литье дважды бессмысленно, потому что самый левый бросок имеет преимущество –