Rumah >Java >javaTutorial >Mengapakah GUI AbstractTableModel saya tidak dikemas kini dengan betul apabila data berubah?

Mengapakah GUI AbstractTableModel saya tidak dikemas kini dengan betul apabila data berubah?

DDD
DDDasal
2024-11-27 15:41:14261semak imbas

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

Isu paparan GUI AbstractTableModel

Kelas AbstractTableModel digunakan untuk mewakili data dalam JTable. Ia menyediakan kaedah untuk mendapatkan semula data bagi setiap sel dalam jadual dan untuk menambah atau mengalih keluar baris dan lajur daripada jadual.

Dalam kod yang disediakan, kelas TableModel sedang digunakan untuk memaparkan hasil pangkalan data pertanyaan dalam JTable. Walau bagaimanapun, terdapat dua masalah dengan cara jadual dipaparkan.

  1. Masalah pertama ialah jadual kadangkala tidak dipaparkan dengan betul. Ini kerana kelas TableModel tidak dikemas kini dengan betul apabila data dalam pangkalan data berubah. Untuk membetulkannya, kelas TableModel harus dikemas kini apabila data dalam pangkalan data berubah.
  2. Masalah kedua ialah jadual tidak dikemas kini secara automatik apabila baris dipadamkan. Untuk membetulkannya, kelas TableModel hendaklah dikemas kini apabila baris dipadamkan.

Berikut ialah versi diubah suai bagi kelas TableModel yang membetulkan dua masalah ini:

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

Ini versi diubah suai kelas TableModel termasuk perubahan berikut:

  • Pembina kini mengambil dua hujah: senarai baris dan senarai nama lajur.
  • Kaedah addRow(), removeRow(), dan updateData() telah ditambah untuk membolehkan model jadual dikemas kini.
  • The fireTableRowsInserted( ), kaedah fireTableRowsDeleted(), dan fireTableDataChanged() telah ditambahkan untuk memberitahu JTable bahawa model jadual mempunyai berubah.

Perubahan ini akan membetulkan dua masalah dengan cara jadual dipaparkan.

Atas ialah kandungan terperinci Mengapakah GUI AbstractTableModel saya tidak dikemas kini dengan betul apabila data berubah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn