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