Home > Java > javaTutorial > Why is my AbstractTableModel GUI not updating correctly when data changes?

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

DDD
Release: 2024-11-27 15:41:14
Original
245 people have browsed it

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

AbstractTableModel GUI display issue

The AbstractTableModel class is used to represent the data in a JTable. It provides methods to retrieve the data for each cell in the table, and to add or remove rows and columns from the table.

In the provided code, the TableModel class is being used to display the results of a database query in a JTable. However, there are two problems with the way that the table is being displayed.

  1. The first problem is that the table is sometimes not displayed correctly. This is because the TableModel class is not properly updated when the data in the database changes. To fix this, the TableModel class should be updated whenever the data in the database changes.
  2. The second problem is that the table does not automatically update when a row is deleted. To fix this, the TableModel class should be updated whenever a row is deleted.

Here is a modified version of the TableModel class that fixes these two problems:

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();
    }
}
Copy after login

This modified version of the TableModel class includes the following changes:

  • The constructor now takes two arguments: a list of rows and a list of column names.
  • The addRow(), removeRow(), and updateData() methods have been added to allow the table model to be updated.
  • The fireTableRowsInserted(), fireTableRowsDeleted(), and fireTableDataChanged() methods have been added to notify the JTable that the table model has changed.

These changes will fix the two problems with the way that the table is being displayed.

The above is the detailed content of Why is my AbstractTableModel GUI not updating correctly when data changes?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template