刷新JTable中的对象[] []后的数据已经改变 [英] Reload JTable's Object[][] after data has changed

查看:126
本文介绍了刷新JTable中的对象[] []后的数据已经改变的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道是否有可能刷新表的GUI当对象[] [] 最初用来填充它已经改变了。

I am wondering if it is possible to refresh a Table's GUI when the Object[][] used to initially populate it has changed.

Object[][] calculationsTableData;
public Interface() {
    ...
    analysisPanel.add(calculationsTable());
    ...
}

JScrollPane calculationsTable() {
    populateCalculationsTableData();
    ...
    calculationsTable = new JTable(calculationsTableData, calculationsColumnNames);
    ...
}

void populateCalculationsTableData(){
    Object[][] temp = new Object[x.numsSize][7];
    for (int i = 0; i < x.numsSize; i++) {
        temp[i][0] = df.format(x.nums[i]);
        ...
    }
    calculationsTableData = temp;
}

populateCalculationsTableData()时,x对象已更改为重新填充被称为 calculationsTableData

重绘()重新验证()方法不会出现有效在这种情况下,并没有做 fireTableDataChanged(),因为这不是一个表的模式。

repaint() and revalidate() methods do not appear to be effective in this scenario and neither does fireTableDataChanged() as this is not a table model.

推荐答案

默认情况下的 JTable中创建<击> 的DefaultTableModel AbstractTableModel上 [ 1 ] 如果执行没有表模型明确地设定。如果表需要更新你有它的模型工作。

By default JTable creates a new instance of DefaultTableModel AbstractTableModel [1] implementation if no table model is explicitely set. If the table needs to be updated you have to work with its model.

设置新的的DefaultTableModel

void populateCalculationsTableData() {
    ...
    calculationsTableData = temp;
    TableModel model = new DefaultTableModel(calculationsTableData, calculationsColumnNames);
    calculationsTable.setModel(model);
}

或者你可以...

使用创建表的DefaultTableModel

TableModel model = new DefaultTableModel(calculationsTableData, calculationsColumnNames);
calculationsTable = new JTable(model);

演员表模型的DefaultTableModel 并设置其数据和列是这样的:

Cast the table model as DefaultTableModel and set its data and columns like this:

void populateCalculationsTableData() {
    ...
    calculationsTableData = temp;
    DefaultTableModel model = (DefaultTableModel)calculationsTable.getModel();
    model.setDataVector(calculationsTableData, calculationsColumnNames);
}

推荐阅读


  • JTable的(对象[] [] rowData,对象[] COLUMNNAMES)

  • 的DefaultTableModel#setDataVector(对象[] [] dataVector中,对象[] columnIdentifiers)

  • 如何使用表

  • Suggested readings

    • JTable(Object[][] rowData, Object[] columnNames)
    • DefaultTableModel#setDataVector(Object[][] dataVector, Object[] columnIdentifiers)
    • How to Use Tables
    • [ 1 ] :经过检查 JTable的(对象[] [] rowData,对象[] COLUMNNAMES)来源$ C ​​$ C我已经意识到,没有的DefaultTableModel 创建而是一个新的匿名内部类从 AbstractTableModel上而是延伸

      [1]: After checking JTable(Object[][] rowData, Object[] columnNames) source code I've realized that no DefaultTableModel is created but a new anonymous inner class extending from AbstractTableModel instead.

      这篇关于刷新JTable中的对象[] []后的数据已经改变的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆