JTable 在调用 getModel() 时返回 JTable
JTable returning JTable when calling getModel()
我的 JTable 是这样声明的:
String[] cols = {"Name","Location"};
String[][] data = new String[][] {{"Name","Location"}};
JTable table = new JTable(data, cols);
所以我在尝试更新 JTable
的数据时遇到了一个问题...我想在 table 中添加一个新行。这是我的代码:
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 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
table.getModel()
没有返回 JTable
,它返回 JTable
中扩展 TableModel
的 anonymous class。因此,table.getModel()
确实返回了正确的 class 类型。
但是,错误发生是因为您尝试将此匿名 table 模型转换为 DefaultTableModel
,这是 TableModel
的另一个子 class,但不是table.getModel()
.
返回的类型
要解决此问题,只需将 table 模型视为接口类型 TableModel
;不要假设它是 DefaultTableModel
.
先看看 How to Use Tables and the JavaDocs for DefaultTabelModel
您应该将创建 table 和模型的方式更改为更类似于...
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);
我的 JTable 是这样声明的:
String[] cols = {"Name","Location"};
String[][] data = new String[][] {{"Name","Location"}};
JTable table = new JTable(data, cols);
所以我在尝试更新 JTable
的数据时遇到了一个问题...我想在 table 中添加一个新行。这是我的代码:
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 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
table.getModel()
没有返回 JTable
,它返回 JTable
中扩展 TableModel
的 anonymous class。因此,table.getModel()
确实返回了正确的 class 类型。
但是,错误发生是因为您尝试将此匿名 table 模型转换为 DefaultTableModel
,这是 TableModel
的另一个子 class,但不是table.getModel()
.
要解决此问题,只需将 table 模型视为接口类型 TableModel
;不要假设它是 DefaultTableModel
.
先看看 How to Use Tables and the JavaDocs for DefaultTabelModel
您应该将创建 table 和模型的方式更改为更类似于...
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);