java - 每次执行函数时都会完全更新 JTable 数据

标签 java swing events jtable tablemodel

你能帮我使这段代码可行吗?我创建了一个表,每次触发函数时都会更改其数据。该代码由三个类组成。

表格模型

public class MyTableModel extends AbstractTableModel {


private static final long serialVersionUID = 1L;

private static String[] header = {"A", "B","C", "so on"};


public MyTableModel(){

}

RecordingList data = new RecordingList();

public void addData(RecordingList dataIn) {
    data=dataIn;
    this.fireTableDataChanged();

    }

@Override
public int getColumnCount() {
    return header.length; //length;
}

@Override
public int getRowCount() {
    return data.size();

}

@Override
public String getColumnName(int col) {
    return header[col];
}

@Override
public String getValueAt(int row, int col)
{
    Object[] rowSelected = data.getRecordingRow(row);

    return rowSelected[col].toString();

}

}

JTable

 public class DynamicTable extends JTable implements TableModelListener{

/**
 * 
 */
MyTableModel model;

private static final long serialVersionUID = 1L;

public DynamicTable() {

    model = new MyTableModel();
    initialize();

}

void initialize(){


        setFillsViewportHeight(true);
        setModel(model);
        getModel().addTableModelListener(this);
        setForeground(Color.BLACK);
        setShowGrid(true);
        setShowVerticalLines(true);
        setBackground(Color.WHITE);

        try {
            // 1.6+
            setAutoCreateRowSorter(true);
        } catch(Exception continuewithNoSort) {
    }
}
public void tableChanged(TableModelEvent e) {

    TableModel newModel = (TableModel)e.getSource();
    model=(MyTableModel)newModel;
    setModel(model);

    // Do something with the data...
}
}

最后我实现了第三个类,需要更新表和模型

这显然是一个非常错误的方法,我把它放在这里是为了让您了解我想要实现的目标:

   RecordingList recordingList = cr.getResultQuery();

            MyTableModel newModel = new MyTableModel();
            newModel.addData(recordingList);

            TableModelEvent event= new TableModelEvent(newModel);

            DynamicTable dt =new DynamicTable() ;
            dt.tableChanged(event);

最佳答案

您将创建新的 MyTableModel 对象,然后只需使用它来设置当前显示的 JTable 模型。就是这样。关键是获取对当前显示的 JTable 的引用,这完全取决于您的代码结构以及您在何处传递的引用。

我不确定您想通过 TableModelEvent 实现什么目的,但这不是必需的。

如果这个答案不够,那么您将需要创建并发布您的 minimal, compilable, runnable example program以便我们更好地了解您的问题。

关于java - 每次执行函数时都会完全更新 JTable 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21882288/

相关文章:

java - InvokeLater() - 一次就够了吗?

java - 删除 JTable 中选定的列表元素

Java,添加变量时 while 循环崩溃 --> 白色,无响应的 JFrame

android - 如何在 Android 中处理来电事件

java - Java 中的事件处理(JTree + JButton)

java - 支柱 : Setting Default Value for Radio Button without using List or ArrayList

java - Android : using java socket. 来自 Android 应用程序中 Gottox 的 io 客户端

java - 使用加密数据创建自定义文件格式

java - 通用方法的问题

javascript - 移动窗口时激活/停用事件