Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Mendapatkan Baris Terpilih dengan Cekap daripada JTable Menggunakan AbstractTableModel?

Bagaimanakah Saya Boleh Mendapatkan Baris Terpilih dengan Cekap daripada JTable Menggunakan AbstractTableModel?

DDD
DDDasal
2024-11-20 00:46:02728semak imbas

How Can I Efficiently Get Selected Rows from a JTable Using AbstractTableModel?

Dapatkan Baris Terpilih dengan Cekap dalam JTable dengan AbstractTableModel

Apabila menggunakan JTable dengan AbstractTableModel, mendapatkan semula baris yang dipilih boleh menjadi tugas penting. Walau bagaimanapun, pendekatan konvensional untuk mengulangi semua baris dan menyemak sel terpilih boleh menjadi tidak cekap apabila berurusan dengan set data yang besar.

Untuk menangani cabaran ini, pendekatan yang lebih baik ialah mengemas kini Set baris yang dipilih apabila nilai sel perubahan. Dalam contoh di bawah, kami melaksanakan TableModel yang mengekalkan Set bertanda dan JList yang memaparkan nombor baris yang dipilih:

import java.util.Set;
import java.util.TreeSet;
import javax.swing.JTable;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;

public class CheckModel extends AbstractTableModel {

    private int rows;
    private List<Boolean> rowList;
    private Set<Integer> checked = new TreeSet<>();

    public CheckModel(int rows) {
        this.rows = rows;
        rowList = new ArrayList<>(rows);
        for (int i = 0; i < rows; i++) {
            rowList.add(Boolean.FALSE);
        }
    }

    @Override
    public void setValueAt(Object aValue, int row, int col) {
        boolean b = (Boolean) aValue;
        rowList.set(row, b);
        if (b) {
            checked.add(row);
        } else {
            checked.remove(row);
        }
        fireTableRowsUpdated(row, row);
    }

    public Set<Integer> getCheckedRows() {
        return checked;
    }
}

Dalam model ini, kaedah setValueAt mengemas kini kedua-dua rowList dan Set yang ditandakan. Apabila sel yang dipilih berubah, TableModelListener dimaklumkan dan JList dikemas kini untuk memaparkan baris yang dipilih semasa.

Pendekatan ini meningkatkan prestasi dengan ketara, terutamanya untuk set data yang besar, kerana ia menghapuskan keperluan untuk melintasi semua baris ke tentukan mana yang dipilih. Ia juga membolehkan mendengar perubahan pemilihan yang cekap dan mendapatkan semula baris yang dipilih dengan mudah.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Baris Terpilih dengan Cekap daripada JTable Menggunakan AbstractTableModel?. 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