Effizientes Abrufen ausgewählter Zeilen in JTable mit AbstractTableModel
Bei Verwendung einer JTable mit AbstractTableModel kann das Abrufen der ausgewählten Zeilen eine wichtige Aufgabe sein. Der herkömmliche Ansatz, alle Zeilen zu durchlaufen und nach ausgewählten Zellen zu suchen, kann jedoch bei großen Datensätzen ineffizient werden.
Um dieser Herausforderung zu begegnen, besteht ein besserer Ansatz darin, einen Satz ausgewählter Zeilen zu aktualisieren, wann immer ein Zellenwert vorliegt Änderungen. Im folgenden Beispiel implementieren wir ein TableModel, das ein geprüftes Set verwaltet, und eine JList, die die ausgewählten Zeilennummern anzeigt:
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; } }
In diesem Modell aktualisiert die setValueAt-Methode sowohl die Zeilenliste als auch das geprüfte Set. Wenn sich eine ausgewählte Zelle ändert, wird ein TableModelListener benachrichtigt und die JList wird aktualisiert, um die aktuell ausgewählten Zeilen anzuzeigen.
Dieser Ansatz verbessert die Leistung erheblich, insbesondere bei großen Datensätzen, da die Notwendigkeit entfällt, alle Zeilen zu durchlaufen bestimmen, welche ausgewählt werden. Es ermöglicht außerdem ein effizientes Abhören von Auswahländerungen und ein einfaches Abrufen der ausgewählten Zeilen.
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von AbstractTableModel effizient ausgewählte Zeilen aus einer JTable abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!