2012-04-09 10 views
1

getValueAt()の問題がなく、完全なAbstractTableModelからプルーンされたAbstractTableModelを派生させる方法はありますか?getValueAt()の問題なしでAbstractTableModelをプルーニングする

私の完全なデータ(userIdsを含む)は、JTable AbstractTableModelにロードされます。しかし、表示のために、特定の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

したいものだけを表示するようにJTable行をフィルタリングするTableRowSorterを使用してください。インデックスで参照する場合は、必ずconvertRowIndexToViewconvertRowIndexToModelに電話してください。

関連する問題