jxtable.packall()を呼び出す方法はありますか?
-
27-10-2019 - |
質問
多くのデータを表示しています JXTable
から swingx 事業。データを読み込んだ後、電話します packAll()
テーブルでは、20000列と30,000のレコードがあり、5秒以上かかる場合があります。私はこれをスウィングスレッドから呼んでいます。これは、UIがこれらの5秒間ロックされていることを意味します。電話してみました packAll
背景スレッドで、そして私が疑ったように、そうすることは奇妙な副作用を持っています。電話後 packAll()
, 、マウスをテーブルの上にホバリングすると、テーブル内のすべての数値が常に異なる数値に更新されているように見えます。このような大きなテーブルの列を梱包するときに、Jxtableで合理的なユーザーエクスペリエンスを取得する方法はありますか。
解決
このループイン ColumnFactory
あなたを殺しています:
for (int r = 0; r < getRowCount(table); r++) {
Component comp = renderer.getTableCellRendererComponent(table, table
.getValueAt(r, column), false, false, r, column);
width = Math.max(width, comp.getPreferredSize().width);
}
おそらく、列の幅を自分で設定するか、1つの行をロードしてテーブルを詰めて、残りのデータをロードするだけです。
他のヒント
ジェイ、あなたが「優れたアイデア」で正しいとマークした答えのどの部分がわからないかわかりません - それは少なくとも少し不明です。 2つの提案は次のとおりです。
a)自分でそれを行う:いつ、どこで正確にどのように正確にどのように正確かという質問を残してくださいb)2段階の読み込み。 columeFactoryで既に提供されているので、getRowCount(jxtable)のAPIドキュメントをお読みください。
あなたのコンテキストがgetRowCount()の単純なオーバーライドによって解決されるほど均一ではない場合でも、カスタムコラムファクトリーは行く方法です:あなたが選択した測定戦略を実装することができます:-)
@Z7SG:何も「殺す」ものは何もありません - API docを読んだ場合に気づいたかもしれません;-)セルの測定は完全に些細なことではありません。デフォルトの実装はすべてに適合できません。ニーズに合わせて調整します。
乾杯ジャネット
200列と30,000行がレンダリングに時間がかかります。あなたが何か劇的なことをしない限り、あなたは待ち時間を排除できるとは思わない。最善の策は、データがロードされるまでテーブルを表示しないことです。
あなたは200列を持っていると言いますか?私は一度に200すべてが見えるとは思えません。では、最初の10-20列を詰めただけでどうしますか?これにより、時間遅延が1/10または1/20に削減されるはずです。
Jxtableが個々の列を梱包できない場合は、 テーブル列アジャスター これは、通常のJTableで同じ機能を提供すると思います。個々の列を梱包できます。