我的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
答案 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-app和How 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}}