JTable在运行时更新

时间:2015-03-06 01:07:01

标签: java swing jtable

有没有办法在运行时更新JTable而不使用构造函数?

我有一个JTable,我已经添加到我的JPanel但是我希望能够在代码中稍后定义列和数据,而不是立即在构造函数方法中,有没有办法做到这一点?

JPanel jp = new JPanel();
JTable table = new JTable();
jp.add(table);

另外,有没有办法将二维数组列表转换为二维对象数组,以便在JTable中使用它?

3 个答案:

答案 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),setColumnIdentifiersaddRow,{{ 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