JTable 在 运行 时间更新

JTable updating in run time

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

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

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

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

是的,您可以在运行时设置 table 的内容。见 JTable.setModel(TableModel)

Also, is there a way to convert a dimensional array list into a 2 dimensional object array so I can use it in the JTable?

我不确定你所说的 "dimensional array list" 是什么意思,但你可以将数据结构转换为标准 TableModel 实现,如 DefaultTableModel ,或者编写一个包装器 class 来实现TableModel 界面。包装器 class 将直接从您的数据结构中读取数据,并通过 TableModel.

中定义的方法将其元素公开给 JTable

I want to be able to define the columns and data at a later point in the code instead of immediately in the constructor method, is there a way to do this?

使用 TableModel To manage the data. See the "default" implementation DefaultTableModel。您可以随时使用 JTable#setModel 并传递新的 TableModel

JTable table = new JTable();
...
// Some time later
String[] headers = ...
Object[][] data = ...
DefaultTableModel model = new DefaultTableModel();
table.setModel(model);

或者您可以使用模型创建 table,并在任何时候调用模型的方法,例如(在 DefaultTableModel 的情况下)、setColumnIdentifiersaddRow, setDataVector

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

"Also, is there a way to convert a dimensional array list into a 2 dimensional object array so I can use it in the JTable?"

我从没听过这个词"dimensional array list"。但是如果你想添加一个 ArrayList<String> 作为一行,你可以简单地调用 list.toArray 并向 DefaultTableModel 添加一行。如果是 ArrayList<YourType>,您可能需要创建自定义 table 模型实现。 (见下面的link)

查看更多信息:

您可以在运行时使用 DefaultTableModeladdRow 方法向 table 添加数据。并使用 fireTableDataChanged 通知您的 JTable 更新它的 UI。 Document here