Heim >Java >javaLernprogramm >Wie kann ich mithilfe von AbstractTableModel effizient ausgewählte Zeilen aus einer JTable abrufen?

Wie kann ich mithilfe von AbstractTableModel effizient ausgewählte Zeilen aus einer JTable abrufen?

DDD
DDDOriginal
2024-11-20 00:46:02716Durchsuche

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

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn