首页 >Java >java教程 >如何使用 AbstractTableModel 高效地从 JTable 中获取选定的行?

如何使用 AbstractTableModel 高效地从 JTable 中获取选定的行?

DDD
DDD原创
2024-11-20 00:46:02698浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn