Java 修剪AbstractTableModel而不使用getValueAt()复杂度
有没有一种方法可以从一个完整的AbstractTableModel派生出一个修剪过的AbstractTableModel,而不需要getValueAt复杂化 我的完整数据(包括用户ID)加载到JTable AbstractTableModel中。然而,出于显示的目的,我希望派生一个与特定用户ID相关联的数据的修剪过的AbstractTableModel 我开始认为这是不可能的,因为getValueAt介入并抛出IndexOutOfBounds异常?出现这些异常似乎是因为未填充修剪后的数据Java 修剪AbstractTableModel而不使用getValueAt()复杂度,java,swing,jtable,abstracttablemodel,Java,Swing,Jtable,Abstracttablemodel,有没有一种方法可以从一个完整的AbstractTableModel派生出一个修剪过的AbstractTableModel,而不需要getValueAt复杂化 我的完整数据(包括用户ID)加载到JTable AbstractTableModel中。然而,出于显示的目的,我希望派生一个与特定用户ID相关联的数据的修剪过的AbstractTableModel 我开始认为这是不可能的,因为getValueAt介入并抛出IndexOutOfBounds异常?出现这些异常似乎是因为未填充修剪后的数据 pub
public class PrunedUserIdTableModel extends AbstractTableModel {
TableModel fullModel;
List columnIdentifiers;
List tempDatum;
List tempData; // holds tempDatums
int rowCount; // reports pruned rowCount through getRowCount() method
List prunedData; // intended to hold data of matched userId rows
public PrunedUserIdTableModel(JTable fullTable, String userId) {
fullModel = fullTable.getModel();
columnIdentifiers = new ArrayList();
tempDatum = new ArrayList();
tempData = new ArrayList();
rowCount = 0;
List<Integer> userCount = new ArrayList<>();
// Load columnIdentifiers from fullModel; omitted here
// Go through fullModel searching for rows with matching userIds
for (int i = 0; i < fullModel.getRowCount(); i++) {
for (int k = 0; k < fullModel.getColumnCount(); k++) {
tempDatum.add(fullModel.getValueAt(i,k);
if ((fullModel.getValueAt(i,k).equals(userId)) {
// Matching userId found; record relevant row
userCount.add(g);
}
}
tempData.add(tempDatum);
tempDatum.clear();
}
// Now populate prunedData
for (int j = 0; j < userCount.size(); j++) {
prunedData.add(tempData.get(userCount.get(j)));
rowCount=rowCount+1;
}
fireTableChanged(null);
}
@Override
public int getRowCount() {
return rowCount;
}
@Override
public int getColumnCount() {
return fullModel.getColumnCount();
}
@Override
public int getValueAt(int rowIndex, int columnIndex) {
// THROWS INDEX OUT OF BOUNDS EXCEPTION: Index 0; size 0
List rowList = (List)prunedData.get(rowIndex);
return rowList.get(columnIndex);
}
}
使用TableRowSorter筛选JTable行,以仅显示所需的行。然后,当您通过索引引用某个内容时,请确保调用convertRowIndexToView和convertRowIndexToModel。使用TableRowSorter筛选JTable行,以仅显示您想要的行。然后,当您通过索引引用某个对象时,请确保调用convertRowIndexToView和convertRowIndexToModel