2011-12-05 1 views
0

ページングを実装するためにカスタムAbstractTableModelのJTableを実現しました。 私はページあたり5個のアイテムを表示したいのですが、問題があります:表示するアイテムがN個(5の倍数でN個)あればOKですが、たとえば14個の要素を表示すると、私は例外を得る。問題は、各セルの値を取得する方法が外れてしまうことです。特に問題は実際にマルチページJTable:行よりも少ない項目を表示することは不可能

public Object getValueAt(int row, int col) { 
    int realRow = row + (pageOffset * pageSize); 
    return data[realRow].getValueAt(col); 
} 

方法である、我々は(0〜4)、5行と14の要素を持っているが、明らかに我々は最後の要素を取得しようとすると、我々はやる:realRow = 4 + (2*5)と明確に私が持っています行14の要素がありません。 この問題をどうやって解決できますか? 14回目のファイルに達したら、私のプログラムで値を取得するのを止める方法を教えてください。出来ますか?

+0

に急がと思います:あなたのコードで、pageOffsetとpageSizeは何ですか?これらは標準のtableModelフィールドではありません。したがって、それらが何であるかを知ることで、あなたの問題を理解するのに役立ちます。 – Colby

+0

pageOffsetはページ番号です(0〜4のアイテムの場合はpageOffset = 0、5〜9のアイテムの場合は1、10〜14のアイテムの場合は2) pageSizeはページあたりの要素の数です(この場合、5に等しくなります) – Michele

答えて

1

ただ、その許容最大値をピン:

realRow = Math.min(realRow, getRowCount()); 

補遺:次のようにexample citedで、getValueAt()を実装:

// Work only on the visible part of the table. 
public Object getValueAt(int row, int col) { 
    int realRow = row + (pageOffset * pageSize); 
    if (realRow < data.length) { 
     return data[realRow].getValueAt(col); 
    } else { 
     return null; 
    } 
} 

BasicArrowButtonを考えます。

+0

しかし、彼女は存在しない行の値を取得しますが、それは実際には例外を超えた改善ではありません。これは、不適切に開発されたモデルである問題を隠すだけです。 – Colby

+0

引用した例に基づいて更新します。 – trashgod

1

モデルのgetRowCountメソッドが、インラインで実行されていることを確認してください。 getRowCountメソッドは、存在しない行に対してgetValueAtを呼び出さないように、表の許容数を戻す必要があります。行14がない場合は、行数がそれほど大きくないはずです。

+0

私のgetRowCountは です返すMath.min(pageSize、data.length); ' – Michele

+0

' 'data'フィールドは、複数のページにわたるテーブル全体のデータか、または各ページごとに' data'ですか? – Colby

+0

データフィールドは、複数のページにわたるテーブル全体のデータです – Michele

1

は私がいないeasy job、私は、多分もっとeasiesの方法は、このcodeを実施しているが、実際の効果のためにあなたがJScrollBarsをロックする必要があり、aephyr's codeを見てsuggesstingおそらく、あなたは明確にすることができますNEVER

+0

あなたは正しいです。良い例。 – trashgod

+0

私はあなたが投稿したリンクをすでに見てきましたが、実際にはそのうちの2番目のリンクを使用しています。しかし、それは各ページに表示される要素の数に対して完全に割り切れる(0のまま) – Michele