你能帮我使这段代码可行吗?我创建了一个表,每次触发函数时都会更改其数据。该代码由三个类组成。
表格模型
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/