問題タブ [tablerowsorter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - JTable RowFilter
フィルタリングされていないテーブルに対応する選択のインデックスを取得する方法はありますか?
テーブルがregexFilterを使用してフィルター処理された後。JTable getSelectedRowは、フィルター処理されたテーブルのインデックスを返しますか?
java - RowSorterがアタッチされたDefaultTableModelから行を削除しても、最後の行は削除されません
私はJavaにやや慣れておらず、特にテーブルに慣れていません。特定の1つのタスクで少し問題が発生しています。
DefaultTableModelを拡張するカスタムテーブルモデルを使用するJTableがあり、TableRowSorterをテーブルにアタッチしました。以下のサンプルアプリケーションには2つのボタンがあります。1つは行をテーブルにロードし、もう1つは選択したすべての行をテーブルから削除します。
何らかの理由で、テーブルの最後の行を他の行と一緒に選択した場合、[削除]ボタンをクリックすると、最後の行を除くすべての選択した行が削除されます。他の行の組み合わせは削除でき、正常に機能します。
さらに、最初に列ヘッダーをクリックして行を並べ替えると(行の順序が変更されていない場合でも)、正しく機能します。ロード後にテーブル内の行を明示的に並べ替える行を追加すると、問題は「解消」されますが、私が行っていることが正しくない理由を知りたいのです。
動作を確認するには、[ロード]ボタンをクリックしてテーブルにデータを入力し、テーブル内のすべての行を選択してから、[削除]ボタンをクリックします。最後の行を除くすべての行が削除されます。
printlnの呼び出しが示すように、ループの最初の反復により、選択した行数が2つ減ります。この動作は、テーブルに行がいくつあっても一貫していますが、テーブルの最後の行を選択した場合に限ります。
私はJavaバージョン1.6.0_16を使用しています。私が間違っていることについて何か考えはありますか?
ありがとう、
ジョー
java - Java TableRowSorter を使用した長整数の並べ替え
大きな数を処理するテーブルがあり、それを並べ替えたいと思っています。テーブルには数値の表示に問題はありませんが、TableRowSorter は数値を整数として扱うように見えるため、最大整数値を超えると大きな値が正しくソートされません。TableRowSorter を使用して Long をソートするにはどうすればよいですか?
java - RowFilter を使用した後の JTable の更新
GraphTable (JTable から拡張されたもの) にフィルターをアタッチすることができました。文字「A」で始まるすべての行をフィルター処理するサンプルフィルターを試していました。
include メソッドは、「A」で始まるすべてのエントリに対して false を返し、その他のエントリに対して true を返します。
しかし、この更新は表には反映されていません。((JTable)leftTable).updateUI()
テーブルも((JTable)leftTable).revalidate()
更新されません。これにより、ビューからこれらの行がフィルター処理されると思います。変更がすぐにビューに反映されるようにするにはどうすればよいですか。
親切に指示や提案を教えてください。
swing - TableRowFilter でフィルター処理が行われないのはなぜですか?
TableRowFilter を使用して JTable をフィルタリングしようとしています。簡単な例では機能しますが、実際には機能しないようです。フィルタが呼び出され、ログが出力されますが、まだ行が表示されています。何か案は?
java - Java1.4のTableRowSorterとRowFilter
私は実際に小さな問題の真っ只中にいます。TableRowSorterとRowFilterがJava4に含まれていないことを発見しました。すべてのクライアントがJava1.4.2_08を使用しており、Java6をマシンにインストールするのは不便です。万が一、JDK 1.4.2_08を使用してTableRowSorterクラスとRowFilterクラスを使用できる方法はありますか?助けてください。
swing - モデルに値を追加する TableRowSorter を追加した後、java.lang.IndexOutOfBoundsException: Invalid range
TableRowSorter をテーブルとそれに対応するモデルに追加した後、特に firetabletablerowsinserted に対応する追加を行うと、例外が発生します。GetRowCount() がモデルの範囲を超える値を返していることはテストから明らかです。ただし、ソーターまたはフィルターが追加された後、テーブルに値を追加し続ける方法は意味がありませんか?
例として、テーブルに何かを追加する前に行フィルターを設定し、モデルで次の呼び出しを使用してテーブルに値を追加します。
行数のサイズは 1 で、例外がスローされます。
最初にソーターを追加せずに同じ手順を実行すると、すべて問題ありません。おそらく、ソーターが変更を加えた可能性があることをモデルに通知する必要があると想定し、次のことを試みましたが、それでも例外が返されました。
以下のように fire を呼び出す前に、値がモデルに追加されたことをモデル内のソーターに通知しようとしましたが、同様に失敗します:
最後に、FireTableRowsInsterted(0,0) をハードコーディングしましたが、例外はスローされません。しかし、テーブルには何も追加されませんか? したがって、それは間違いなく OutOfBounds の問題の一種であることはわかっています。私はすべてを見てきましたが、答えを見つけることができないようです。これがどのように機能すると思われるかを誰かが知っているなら、それは非常に役に立ちます。JPanel内でソーターを設定するコードは次のとおりです。
モデルに価値を追加するモデル内のコードは次のとおりです。
java - 非表示の列に基づく JTable の並べ替え
JTable
1 つの非表示の列に基づいて行を並べ替えたいと思います。
このような JTable があるとします
これで、非表示になっている column3 がもう 1 つあり、表示したくありません。ユーザーが Column2 をクリックすると、Column2 ではなく、Column3 (非表示の列) に基づいて行を並べ替える必要があります。
JTableでこれを達成するにはどうすればよいですか?
java - JTableでのdouble値の並べ替え
私はこれに関連するかなりの数の質問を見つけましたが、私の問題に対する簡単な解決策は見つかりませんでした。
JTableでDouble値を正しくソートする方法が見つかりません。
AbstractTableModelを拡張して、クラス配列を受け取り、列ごとに適切な型を返しました。
そして、私のカスタムJTableコンストラクターで:
しかし、行を追加すると次のエラーが発生します。
DecimalFormat.format(Object number, StringBuffer toAppendTo, FieldPosition pos)
Double以外のほとんどの数値タイプを受け入れるメソッドでは失敗します。
Double列に別のクラスを使用してもエラーは発生しませんが、それでもソートは期待どおりに機能しません。さまざまな数値クラスで試しましたが、doubleを正しくソートするものはないようです。
カスタムRowSorter、カスタムCellRenderer、またはその両方を実装する必要があるかどうかはわかりません。
誰かがこれをもっと簡単な方法で修正する方法を教えてもらえますか?
どうもありがとうございました。
編集済み:解決済み
問題がどこにあったかを知るのは非常に恥ずかしいことです。
Object []行を含むArrayListは、getObject(int)またはgetDouble(int)の代わりにgetString(int)を使用してデータベースResultSetから入力されたため、レンダラーは値をDoubleとして使用できませんでした。列クラスとして整数または数値を使用して例外が発生しなかったのは奇妙ですが、とにかく文字列としてソートされていました。ArrayListにはオブジェクトだけが含まれていると確信していたので、間違ったクラスで問題を探していました。
あなたの例をどうもありがとう、それらを見て、私は私のダブルスが実際には文字列であることに気づきました、そしてそれから私は変換が起こっていた場所を見つけることができました。
java - 行をソートした後、Swing JTable で行の色を変更する
ステータス( 、、 )JTable
とともにデータを表示するを使用しています。各ステータス行には異なる色があり、これは のオーバーロードによって実現されます。New
Processed
Closed
prepareRenderer()
JTable
次に、そのテーブルをソートする必要があり、それtable.setAutoCreateRowSorter(true);
を達成するために使用しています。行は適切にソートされますが、行の色は同じままです。この操作の後、ステータス列に基づいてすべての行に色を再適用する必要があります。
それを達成するための最良の方法は何だろうと考えていました。私が考えることができるいくつかの方法があります:
- テーブルを再描画/再検証します。しかし、これを単に行うだけではうまくいかないと思います。
- イベントをキャプチャ
mouseClicked
し、列ヘッダーがクリックされたかどうかを識別し、prepareRenderer()
手動で呼び出してから、再描画/再検証を呼び出します - 次に、ここで質問の1つを読みました.答えの1つは、再描画/再検証を直接呼び出すのではなく、基礎となるデータモデルを変更すると、上記のメソッドが自動的に呼び出されます.
どうすればいいのかわかりません。これを達成するための正しい方法は何ですか?