Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Mendapatkan Baris Terpilih dengan Cekap daripada JTable Menggunakan 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!