Java JTable在运行时更新

Java JTable在运行时更新,java,swing,jtable,Java,Swing,Jtable,有没有办法在运行时更新JTable而不使用构造函数 我有一个JTable,我已经添加到我的JPanel中,但是我希望能够在代码的后面定义列和数据,而不是立即在构造函数方法中定义,有什么方法可以做到这一点吗 JPanel jp = new JPanel(); JTable table = new JTable(); jp.add(table); 另外,是否有一种方法可以将二维数组列表转换为二维对象数组,以便我可以在JTable中使用它?是的,您可以在运行时设置表的内容。看 还有,有没有办法将维度

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

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

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

另外,是否有一种方法可以将二维数组列表转换为二维对象数组,以便我可以在JTable中使用它?

是的,您可以在运行时设置表的内容。看

还有,有没有办法将维度数组列表转换为2 维度对象数组,以便我可以在JTable中使用它


我不确定“维度数组列表”是什么意思,但您可以将数据结构转换为DefaultTableModel之类的标准实现,或者编写一个实现
TableModel
接口的包装类。包装器类将直接从数据结构中读取数据,并通过
TableModel
中定义的方法将其元素公开给
JTable
,是的,您可以在运行时设置表的内容。看

还有,有没有办法将维度数组列表转换为2 维度对象数组,以便我可以在JTable中使用它

我不确定“维度数组列表”是什么意思,但您可以将数据结构转换为DefaultTableModel之类的标准实现,或者编写一个实现
TableModel
接口的包装类。包装器类将直接从数据结构中读取数据,并通过
TableModel
中定义的方法将其元素公开给
JTable

我希望能够在以后的代码中定义列和数据,而不是立即在构造函数方法中定义,有什么方法可以做到这一点吗

JPanel jp = new JPanel();
JTable table = new JTable();
jp.add(table);
使用数据库管理数据。请参阅“默认”实现。您可以随时使用
JTable#setModel
并传递新的
TableModel

JTable table = new JTable();
...
// Some time later
String[] headers = ...
Object[][] data = ...
DefaultTableModel model = new DefaultTableModel();
table.setModel(model);
或者,您可以使用模型创建表,并在任何时候调用模型的方法,如(在
DefaultTableModel
的情况下)、
setColumnIdentifiers
addRow
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);
“还有,有没有办法将多维数组列表转换为二维对象数组,以便在JTable中使用?”

我从未听说过“多维数组列表”这个术语。但是,如果要将
ArrayList
作为一行添加,只需调用
list.toArray
并将一行添加到
DefaultTableModel
。如果是
ArrayList
,则可能需要创建自定义表模型实现。(见下面的链接)

有关更多信息,请参阅:

我希望能够在以后的代码中定义列和数据,而不是立即在构造函数方法中定义,有什么方法可以做到这一点吗

JPanel jp = new JPanel();
JTable table = new JTable();
jp.add(table);
使用数据库管理数据。请参阅“默认”实现。您可以随时使用
JTable#setModel
并传递新的
TableModel

JTable table = new JTable();
...
// Some time later
String[] headers = ...
Object[][] data = ...
DefaultTableModel model = new DefaultTableModel();
table.setModel(model);
或者,您可以使用模型创建表,并在任何时候调用模型的方法,如(在
DefaultTableModel
的情况下)、
setColumnIdentifiers
addRow
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);
“还有,有没有办法将多维数组列表转换为二维对象数组,以便在JTable中使用?”

我从未听说过“多维数组列表”这个术语。但是,如果要将
ArrayList
作为一行添加,只需调用
list.toArray
并将一行添加到
DefaultTableModel
。如果是
ArrayList
,则可能需要创建自定义表模型实现。(见下面的链接)

有关更多信息,请参阅:


您可以在运行时使用
DefaultTableModel
addRow
方法将数据添加到表中。并使用
fireTableDataChanged
通知您的
JTable
更新其UI

您可以在运行时使用
DefaultTableModel
addRow
方法将数据添加到表中。并使用
fireTableDataChanged
通知您的
JTable
更新其UI

“并使用fireTableDataChanged”-不,永远不会。
fireTableXxx
方法不应在模型本身之外使用,模型有责任决定何时发出更改通知“并使用fireTableDataChanged”-不,决不。
fireTableXxx
方法不应在模型本身之外使用,模型有责任决定何时发出变更通知,我的意思是将类似于ArrayList的内容转换为对象[],以便将其放入JTable。(我想说的是“二维数组列表”,没有提到2,但仍然不确定这是否是一个实际术语)。您可以使用
向量
,也可以使用
DefaultTableModel.setDataVector(…)
<代码>向量
的工作原理类似于
数组列表
。使用
add
方法,它是动态的。好的,我用DefaultTableModel尝试了你的方法,看起来效果很好,谢谢。我想问另一个问题,是否可以在表的侧面显示的同一个JTable中有一些内容(例如,行号)?我制作了一个图像试图解释我想要什么。基本上类似于列名的标题,我想要一些可以放置行名的东西。对不起,我的意思是将ArrayList之类的东西转换为对象[][],以便将其放入JTable。(我想说的是“二维数组列表”,没有提到2,但仍然不确定这是否是一个实际术语)。您可以使用
向量
,也可以使用
DefaultTableModel.setDataVector(…)
<代码>向量
的工作原理类似于
数组列表
。信息技术