首頁 > Java > java教程 > 如何使用 AbstractTableModel 高效地從 JTable 中取得選定的行?

如何使用 AbstractTableModel 高效地從 JTable 中取得選定的行?

DDD
發布: 2024-11-20 00:46:02
原創
712 人瀏覽過

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

使用AbstractTableModel 在JTable 中高效獲取所選行

將JTable 與AbstractTableModel 一起使用時,檢索所選行可能是一項選取行可能是一項重要任務。然而,在處理大型資料集時,迭代所有行並檢查選定單元格的傳統方法可能會變得效率低下。

為了解決這個挑戰,更好的方法是每當單元格值更新時更新一組選定行變化。在下面的範例中,我們實作了一個TableModel,它維護一個選取的Set 和一個顯示所選行號的JList:

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;
    }
}
登入後複製

在此模型中,setValueAt 方法同時更新rowList 和選取的Set。當選定的儲存格發生變更時,TableModelListener 會收到通知,並且 JList 會更新以顯示目前選定的行。

這種方法顯著提高了效能,特別是對於大型資料集,因為它不需要遍歷所有行來決定選擇哪些。它還可以有效地偵聽選擇變更並輕鬆檢索所選行。

以上是如何使用 AbstractTableModel 高效地從 JTable 中取得選定的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板