调用getModel()时JTable返回JTable

时间:2015-12-02 01:03:39

标签: java swing jtable

我的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

2 个答案:

答案 0 :(得分:4)

table.getModel()没有返回JTable,它会在JTable中返回TableModel table.getModel()。因此,DefaultTableModel确实返回了正确的类类型。

但是,会发生错误,因为您尝试将此匿名表模型强制转换为TableModel,这是table.getModel()的另一个子类,但不是TableModel返回的类型。

要解决此问题,只需将表模型视为接口类型DefaultTableModel;不要认为它是pygame.Surface

答案 1 :(得分:3)

首先看一下https://developers.google.com/api-client-library/php/auth/web-appHow to Use Tables

您应该将创建表格和模型的方式更改为更像......

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

更像是......

{{1}}