首页 >Java >java教程 >为什么当数据更改时我的 AbstractTableModel GUI 无法正确更新?

为什么当数据更改时我的 AbstractTableModel GUI 无法正确更新?

DDD
DDD原创
2024-11-27 15:41:14316浏览

Why is my AbstractTableModel GUI not updating correctly when data changes?

AbstractTableModel GUI 显示问题

AbstractTableModel 类用于表示 JTable 中的数据。它提供了检索表中每个单元格数据的方法,以及从表中添加或删除行和列的方法。

在提供的代码中,TableModel 类用于显示数据库的结果在 JTable 中查询。但是,表格的显示方式存在两个问题。

  1. 第一个问题是表格有时无法正确显示。这是因为当数据库中的数据发生更改时,TableModel 类没有正确更新。为了解决这个问题,只要数据库中的数据发生变化,TableModel 类就应该更新。
  2. 第二个问题是当删除一行时表不会自动更新。要解决此问题,每次删除行时都应更新 TableModel 类。

这是修复这两个问题的 TableModel 类的修改版本:

import java.util.List;
import javax.swing.table.AbstractTableModel;

public class TableModel extends AbstractTableModel {

    private List<String[]> data;
    private String[] columnNames;

    public TableModel(List<String[]> data, String[] columnNames) {
        this.data = data;
        this.columnNames = columnNames;
    }

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

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

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return data.get(rowIndex)[columnIndex];
    }

    @Override
    public String getColumnName(int columnIndex) {
        return columnNames[columnIndex];
    }

    public void addRow(String[] rowData) {
        data.add(rowData);
        fireTableRowsInserted(data.size() - 1, data.size() - 1);
    }

    public void removeRow(int rowIndex) {
        data.remove(rowIndex);
        fireTableRowsDeleted(rowIndex, rowIndex);
    }

    public void updateData(List<String[]> newData) {
        data = newData;
        fireTableDataChanged();
    }
}

This TableModel 类的修改版本包括以下更改:

  • 构造函数现在采用两个参数:行列表和列列表
  • 添加了 addRow()、removeRow() 和 updateData() 方法,以允许更新表模型。
  • fireTableRowsInserted()、fireTableRowsDeleted() 和添加了 fireTableDataChanged() 方法来通知 JTable 表模型已更改已更改。

这些更改将解决表格显示方式的两个问题。

以上是为什么当数据更改时我的 AbstractTableModel GUI 无法正确更新?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn