1

getValueAt()を複雑にすることなく、完全なAbstractTableModelからプルーニングされたAbstractTableModelを派生させる方法はありますか?

私の完全なデータ(userIdsを含む)はJTableAbstractTableModelにロードされます。ただし、表示の目的で、特定のuserIdに関連付けられたデータのプルーニングされたAbstractTableModelを派生させたいと思います。

getValueAtが介入してIndexOutOfBounds例外をスローするため、これは不可能だと思い始めていますか?これらの例外は、プルーニングされたデータが入力されていないために発生するようです。

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);
    }
}
4

1 に答える 1

4

を使用して行TableRowSorterをフィルタリングし、JTable必要な行のみを表示します。次に、インデックスで何かを参照しているときに、必ず呼び出しconvertRowIndexToViewてください。convertRowIndexToModel

于 2012-04-09T08:33:19.053 に答える