Java 从向量动态更新JTable<;向量<;字符串>&燃气轮机;
我有一个名为FetchInbox()的函数,它获取电子邮件的标题信息(发件人、主题、发送日期),然后将其添加到字符串向量向量中 我想能够做的是在新电子邮件到来时刷新此表,并通过再次运行FetchInbox()更新表,然后使用它重新填充表 我知道这可以通过使用TableModel实现,但我还没有找到一个使用向量而不是对象[]的示例。如果您有任何帮助,我们将不胜感激。请看一看,这将为您节省大量时间。Java 从向量动态更新JTable<;向量<;字符串>&燃气轮机;,java,swing,vector,Java,Swing,Vector,我有一个名为FetchInbox()的函数,它获取电子邮件的标题信息(发件人、主题、发送日期),然后将其添加到字符串向量向量中 我想能够做的是在新电子邮件到来时刷新此表,并通过再次运行FetchInbox()更新表,然后使用它重新填充表 我知道这可以通过使用TableModel实现,但我还没有找到一个使用向量而不是对象[]的示例。如果您有任何帮助,我们将不胜感激。请看一看,这将为您节省大量时间。 使用它,您可以动态地将JTable绑定到对象列表,这样对象中的任何更改都会反映在表中,反之亦然。De
使用它,您可以动态地将JTable绑定到对象列表,这样对象中的任何更改都会反映在表中,反之亦然。DefaultTableModel具有采用向量而不是对象[]的构造函数和方法 DefaultTableModel的旧版本只使用向量,Object[]参数是在泛型进入Java时添加的新方法
这应该行得通,但@jzd的答案可能正是您想要的,但需要注意的是,根据文档,如果列
向量
的长度与表中所需的列数不匹配,则可能会对其进行截断或填充
import javax.swing.*;
import javax.swing.table.*;
import java.util.*;
class test{
public static void main(String[] _) {
// Test data.
final Vector<Vector<String>> rows = new Vector<Vector<String>>();
for (int i = 0; i < 4; i++) {
Vector<String> row = new Vector<String>();
for (int j = 0; j < 5; j++) {
row.add(String.format("%s, %s", i, j));
}
rows.add(row);
}
// With AbstractTableModel, you only need to implement three methods.
TableModel model = new AbstractTableModel() {
public int getRowCount() {
return rows.size();
}
public int getColumnCount() {
return rows.elementAt(0).size();
}
public Object getValueAt(int row, int column) {
return rows.elementAt(row).elementAt(column);
}
};
// Test the TableModel in a JTable.
JFrame jf = new JFrame("test");
jf.setSize(512, 384);
jf.setContentPane(new JScrollPane(new JTable(model)));
jf.show();
}
}
import javax.swing.*;
导入javax.swing.table.*;
导入java.util.*;
课堂测试{
公共静态void main(字符串[]){
//测试数据。
最终向量行=新向量();
对于(int i=0;i<4;i++){
向量行=新向量();
对于(int j=0;j<5;j++){
添加(字符串格式(“%s,%s”,i,j));
}
行。添加(行);
}
//使用AbstractTableModel,您只需要实现三种方法。
TableModel模型=新的AbstractTableModel(){
public int getRowCount(){
返回rows.size();
}
public int getColumnCount(){
返回rows.elementAt(0.size();
}
公共对象getValueAt(int行,int列){
返回行.elementAt(行).elementAt(列);
}
};
//在JTable中测试TableModel。
JFrame jf=新JFrame(“测试”);
jf.设置大小(512384);
setContentPane(新的JScrollPane(新的JTable(模型));
jf.show();
}
}
当您创建一个表而不向其提供模型时,它将使用DefaultTableModel
作为默认模型。该模型有两个功能:
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.setDataVector(dataVector, comlnIdentifiers);
setDataVector(Vector dataVector,Vector columnIdentifiers)
:其中dataVector
是Vector
的向量(表示表中的数据行),comlumnIdentifiers是包含标识符的Vector
。当您提供向量时,它将显示您的表
addRow(Vector dataRow)
:它将向您的dataVector
添加一个数据行,如上所述
因此,获取模型并调用以下函数非常简单:
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.setDataVector(dataVector, comlnIdentifiers);
在您的上下文中,dataVector
的类型为vector
。但是依赖向量并不是一个好的选择。如果您直接使用对象[]
,则会更加安全有效。DefaultTableModel
也具有与对象数组类似的功能
setDataVector(对象[][]数据向量,对象[]列标识符)
addRow(对象[]行数据)
查看教程页面:了解更多关于表及其模型的操作。我现在遇到的问题是,在使用DefaultTableModel实现它之后,当我调用fireTableDataChanged()时,表不会反映向量向量的变化。这是一个图形化的东西还是我调用了错误的方法?