首页 > Java > java教程 > 正文

如何使用 JCheckBox 行选择有效地从 JTable 中获取选定的行?

Susan Sarandon
发布: 2024-11-22 13:03:17
原创
606 人浏览过

How to Efficiently Get Selected Rows from a JTable with JCheckBox Row Selection?

使用选定行跟踪在 JTable 中获取选定行

问题:
从JTable 在第一列中有一个 JCheckBox 用于行选择。对于大量行,顺序遍历变得低效。

传统方法:
顺序迭代所有行以获取选定的行。这种方法在处理数千行时会出现问题。

建议的方法:
基于模型的跟踪:

  • 更新集合每当 JCheckBox 值发生变化时,包含选定的行索引。
  • 表模型上的侦听器类会更新 Set 。基于行选择。

代码示例:

import javax.swing.table.AbstractTableModel;
import java.util.Set;
import java.util.TreeSet;

public class CheckModel extends AbstractTableModel {

    // ...

    private Set<Integer> checked = new TreeSet<>();

    // ...

    @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);
    }
}
登录后复制

其他优化:

  • 使用轻量级数据结构(例如 TreeSet)来存储选定的行索引,以提高效率迭代。
  • 如果内存消耗成为问题,请考虑使用不同的数据结构来存储选定的行。

基于模型的方法的优点:

  • 恒定时间访问所选行,无论总行数如何rows。
  • 无需顺序遍历,使得选择检索高效。

以上是如何使用 JCheckBox 行选择有效地从 JTable 中获取选定的行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板