猿问

使用抽象表模型获取JTable中选定的行

使用抽象表模型获取JTable中选定的行

我有一个JTable使用AbstractTableModel我有一个JCheckBox在用于选择行的第一列中。现在,我需要从选中的表中获取选中的行。现在,我正按顺序从第一行遍历到最后一行,并获得所选的所有行,如下所示,

List<Integer> selectedRows = new ArrayList<Integer>();for(int i = 0; i < table.getRowCount(); i++) {
     if((Boolean) table.getValuAt(i, 0)) {
         selectedRows.add(i);
     }}

这里的问题是,当我需要获得选定的行时,我需要遍历所有的行。现在我有10到20排。但在未来,我将得到大约5000行。我的问题是,如果有5000行,如果用户只选择5000nd(最后一个记录)行,那么我需要遍历所有5000行才能得到所选的行。我觉得这不是个好办法。

我想实现的一种方法是,将侦听器添加到JCheckBox列,以便在任何时候都有更改。(SELECTED/DESELECTED)然后,我需要更新侦听器类中选定行的数组。在此侦听器类中,当用户选择JCheckBox我需要打电话table.getSelectedRow(..)我需要存储如果JCheckBox被选中。

有没有更好的方法?


忽然笑
浏览 553回答 3
3回答

守候你守候我

我同意克莱奥帕特拉的说法。创建抽象表模型的子类时,将覆盖setValue(Object值、int rowIndex、intcolIndex)。在重写的方法中,只需检查列是否带有复选框,如果是,则适当地更新内部数据结构。您还可以添加一个getCheckedRows()方法,该方法返回一个列表<Integer>,其中包含选中复选框的行。
随时随地看视频慕课网APP

相关分类

Java
我要回答