我的JTable声明如下:
String[] cols = {"Name","Location"};
String[][] data = new String[][] {{"Name","Location"}};
JTable table = new JTable(data, cols);因此,我在试图更新JTable的数据时遇到了一个问题……我应该在表中添加一个新行。
data = new String[][] {{"Name","Location"}{"Name1","Location1"}};
DefaultTableModel dm = (DefaultTableModel)(table.getModel());
dm.fireTableDataChanged();由于某些原因,我在这条线上有一个错误:
DefaultTableModel dm = (DefaultTableModel)(table.getModel());显示的错误是..。
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JTable$1 cannot be cast to javax.swing.table.DefaultTableModel
at client.pages.ClientPage.update(ClientPage.java:171)我的ClientPage.java的第171行是上面我说的错误所在的代码行。
有人知道它为什么要这么做吗?
table.getModel(); //Suppose to return TabelModel not JTable发布于 2015-12-02 01:08:42
table.getModel()不是返回JTable,而是在JTable中返回扩展TableModel的匿名类。因此,table.getModel()确实返回了正确的类类型。
但是,出现此错误是因为您试图将这个匿名表模型转换为DefaultTableModel,这是TableModel的另一个子类,但不是table.getModel()返回的类型。
要解决这个问题,只需将表模型视为接口类型TableModel;不要假设它是DefaultTableModel。
发布于 2015-12-02 01:09:00
首先看一看如何使用表和DefaultTabelModel
您应该改变创建表和模型的方式,使之更像.
String[] cols = {"Name","Location"};
String[][] data = new String[][] {{"Name","Location"}};
JTable table = new JTable(new DefaultTableModel(date, cols));JTable(Object[][], Object[])实际上使用了它自己的TableModel实现
接下来,换衣服..。
data = new String[][] {{"Name","Location"}{"Name1","Location1"}};
DefaultTableModel dm = (DefaultTableModel)(table.getModel());
dm.fireTableDataChanged();更像是..。
data = new String[][] {{"Name","Location"}{"Name1","Location1"}};
DefaultTableModel dm = (DefaultTableModel)(table.getModel());
dm.fireTableDataChanged();更像是..。
data = new String[] {"Name1","Location1"};
DefaultTableModel dm = (DefaultTableModel)(table.getModel());
dm.addRow(data);https://stackoverflow.com/questions/34033162
复制相似问题