从向量<vector <string>&gt; </vector <string>动态更新JTable

时间:2013-11-19 13:52:33

标签: java swing vector

我有一个名为FetchInbox()的函数,它获取电子邮件的标题信息(发件人,主题,发送日期),然后将其添加到字符串向量向量中。

我希望能够做的是在新电子邮件进入时刷新此表并通过首先再次运行FetchInbox()然后使用此表重新填充表来更新表。

我知道这可以使用TableModel完成,但我还没有找到使用Vectors而不是Object [] []的示例。对此有任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:3)

DefaultTableModel具有构造函数和方法,它们使用Vectors而不是Object [] s。

旧版本的DefaultTableModel只使用了Vectors,Object []参数是在Generics来到Java时添加的新方法。

http://docs.oracle.com/javase/tutorial/uiswing/components/table.html

答案 1 :(得分:3)

当你创建一个没有提供model的表时,它将是DefaultTableModel,因为它是默认模型。该模型有两个功能:

  1. setDataVector(Vector dataVector, Vector columnIdentifiers):其中dataVectorVector的{​​{1}}(代表表的数据行),而comlumnIdentifiers是包含标识符的Vector 。当您提供Vector时,它将显示您的表格。

  2. Vector:它会按照上面的定义向您的addRow(Vector dataRow)添加数据行。

  3. 因此获取模型并调用这些函数非常简单:

    dataVector

    在您的上下文中, DefaultTableModel model = (DefaultTableModel) table.getModel(); model.setDataVector(dataVector, comlnIdentifiers); 的类型为dataVector。但取决于vector<vector<string> >并不是一个好的选择。如果您直接使用Vector,它会更加安全有效。 Object[]也具有与Object数组类似的功能。

    1. DefaultTableModel
    2. setDataVector(Object[][] dataVector, Object[] columnIdentifiers)
    3. 查看教程页面:How to Use Table,了解更多可以使用表及其模型的内容。

答案 2 :(得分:2)

这应该可行,但是@jzd的答案可能就是你想要的,但需要注意的是,根据文档,如果Vector列的长度与列数不匹配,则列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(); } } 可能会被截断或填充你想要在你的桌子上。

{{1}}

答案 3 :(得分:1)

看一下GlazedLists - 它会为你节省大量时间。 使用它,您可以动态地将JTable绑定到对象列表,以便对象中的任何更改都反映在表中,反之亦然。