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