【问题标题】:JTable with ArrayListTableModel带有 ArrayListTableModel 的 JTable
【发布时间】:2016-11-30 14:21:15
【问题描述】:

我有一个带有 GUI 应用程序的项目,它显示了 JTable,其中包含来自 DB 的数据。我正在使用DefaultTableModel 对象。我的代码是:

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

}

}

当我尝试在 main 方法中使用这个类时,我收到了异常:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: 
    [Ljava.lang.Object; cannot be cast to java.util.ArrayList

我想替换 DefaultTableModel 并使用 ArrayListTableModel

【问题讨论】:

    标签: java swing jtable classcastexception defaulttablemodel


    【解决方案1】:

    在您的getValueAt() 方法中,这一行是错误的:

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

    rows 是 Object[] 数组中的 ArrayList,因此,rows.get(aRow) 返回 Object[]。您必须执行以下操作:

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

    【讨论】:

      猜你喜欢
      • 2011-11-17
      • 1970-01-01
      • 2013-10-29
      • 1970-01-01
      • 2019-06-13
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多