首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JTable在调用getModel()时返回JTable

JTable在调用getModel()时返回JTable
EN

Stack Overflow用户
提问于 2015-12-02 01:03:38
回答 2查看 6.8K关注 0票数 0

我的JTable声明如下:

代码语言:javascript
复制
String[] cols = {"Name","Location"};
String[][] data = new String[][] {{"Name","Location"}};
JTable table = new JTable(data, cols);

因此,我在试图更新JTable的数据时遇到了一个问题……我应该在表中添加一个新行。

代码语言:javascript
复制
data = new String[][] {{"Name","Location"}{"Name1","Location1"}};
DefaultTableModel dm = (DefaultTableModel)(table.getModel());
dm.fireTableDataChanged();

由于某些原因,我在这条线上有一个错误:

代码语言:javascript
复制
DefaultTableModel dm = (DefaultTableModel)(table.getModel());

显示的错误是..。

代码语言:javascript
复制
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行是上面我说的错误所在的代码行。

有人知道它为什么要这么做吗?

代码语言:javascript
复制
table.getModel(); //Suppose to return TabelModel not JTable
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-02 01:08:42

table.getModel()不是返回JTable,而是在JTable中返回扩展TableModel匿名类。因此,table.getModel()确实返回了正确的类类型。

但是,出现此错误是因为您试图将这个匿名表模型转换为DefaultTableModel,这是TableModel的另一个子类,但不是table.getModel()返回的类型。

要解决这个问题,只需将表模型视为接口类型TableModel;不要假设它是DefaultTableModel

票数 4
EN

Stack Overflow用户

发布于 2015-12-02 01:09:00

首先看一看如何使用表DefaultTabelModel

您应该改变创建表和模型的方式,使之更像.

代码语言:javascript
复制
String[] cols = {"Name","Location"};
String[][] data = new String[][] {{"Name","Location"}};
JTable table = new JTable(new DefaultTableModel(date, cols));

JTable(Object[][], Object[])实际上使用了它自己的TableModel实现

接下来,换衣服..。

代码语言:javascript
复制
data = new String[][] {{"Name","Location"}{"Name1","Location1"}};
DefaultTableModel dm = (DefaultTableModel)(table.getModel());
dm.fireTableDataChanged();

更像是..。

代码语言:javascript
复制
data = new String[][] {{"Name","Location"}{"Name1","Location1"}};
DefaultTableModel dm = (DefaultTableModel)(table.getModel());
dm.fireTableDataChanged();

更像是..。

代码语言:javascript
复制
data = new String[] {"Name1","Location1"};
DefaultTableModel dm = (DefaultTableModel)(table.getModel());
dm.addRow(data);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34033162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档