有没有办法在运行时更新JTable而不使用构造函数?
我有一个JTable,我已经添加到我的JPanel但是我希望能够在代码中稍后定义列和数据,而不是立即在构造函数方法中,有没有办法做到这一点?
JPanel jp = new JPanel();
JTable table = new JTable();
jp.add(table);
另外,有没有办法将二维数组列表转换为二维对象数组,以便在JTable中使用它?
答案 0 :(得分:3)
我希望能够在代码中稍后定义列和数据,而不是在构造函数方法中立即定义,有没有办法做到这一点?
使用TableModel
管理数据。请参阅“默认”实施DefaultTableModel
。您可以随时使用JTable#setModel
并传递新的TableModel
。
JTable table = new JTable();
...
// Some time later
String[] headers = ...
Object[][] data = ...
DefaultTableModel model = new DefaultTableModel();
table.setModel(model);
或者您可以使用模型创建表格,并在任何时间调用模型的方法,例如(在DefaultTableModel
),setColumnIdentifiers
,addRow
,{{ 1}}
setDataVector
“另外,有没有办法将维度数组列表转换为2维对象数组,以便在JTable中使用它?”
我从未听过“维数列表”这个词。但是,如果您要在行中添加String[] headers = ...
DefaultTableModel model = new DefaultTableModel(headers, 0);
JTable table = new JTable(model);
...
// Some time later
Object[] row = ...
DefaultTableModel model = (DefaultTableModel)table.getModel();
model.addRow(row);
String[] newHeaders = ...
model.setColumnIdentifiers(newHeaders);
,只需致电ArrayList<String>
并向list.toArray
添加一行即可。如果它是DefaultTableModel
,您可能需要创建自定义表模型实现。 (见下面的链接)
有关详细信息,请参阅
答案 1 :(得分:1)
是的,您可以在运行时设置表的内容。见JTable.setModel(TableModel)
另外,有没有办法将维数组列表转换为2 维对象数组,所以我可以在JTable中使用它吗?
我不确定你的意思是&#34;维数组列表&#34;但您可以将数据结构转换为标准TableModel
实现,如DefaultTableModel,或者编写实现TableModel
接口的包装类。包装器类将直接从您的数据结构中读取数据,并通过JTable
中定义的方法将其元素公开给TableModel
。
答案 2 :(得分:0)
您可以使用addRow
DefaultTableModel
方法在运行时向表中添加数据。并使用fireTableDataChanged
通知您的JTable
更新其UI。 Document here