9

最終的に表示される値が計算または取得されるまで、アニメーションの進行状況インジケーター (アニメーション GIF、Java2D などでレンダリングされた回転ホイール、ここでは優先しません) を表のセルに表示する方法を探しています。

これまでのところ、表示を高速化する準備がまだ整っていない各セルに静的な「保留中...」テキストを入れただけです。バックグラウンド スレッドからデータが到着したら、それを適切なセルに配置し、テーブルで repaint を呼び出します。

静的ラベルまたは画像ではこれはうまく機能しますが、セルのレンダリングはこれを一種のゴム印としてのみ使用し、セルごとに個別のインスタンスを作成しないため (もちろん、これはパフォーマンスの観点からは良い考えです)、たとえばアニメーション GIF はそうします個々の細胞で「遊ぶ」のではありません。

どうすればそのような効果を達成できますか?単純なテキストよりも「洗練された」UI になります。

4

2 に答える 2

6

まず、Nick Fortescue が持っていたのと同じアイデア (Method2) を使用しました。しかしその直後に偶然出くわした

うさぎの穴のブログ

作成者は、アニメーション化されたアイコン (GIF に基づく) に非常に便利なクラスを提供し、Java2D で描かれた無限の進行状況インジケーター (有名な Mac OS X のような糸車) を提供しています。自分。

しかし、私がこれらを見つけていなかったら、ニックのやり方はそれだったでしょう.

于 2009-02-22T22:41:25.307 に答える
2

あなたが言うように、基本的なJTableレンダリングメカニズムはこれをサポートしていません。CellRendererはセル(または必要に応じてセルの一部)をペイントするために使用され、再ペイントを許可しません。オンデマンドで描画します。

方法1-JLayeredPane

これを行う必要がある場合は、JLayeredPaneを使用して、アニメーション化されたレンダラーをJTableの上に描画します。

でも大変な作業になると思います。特にスクロールペイン内にある場合は、かなり正しく理解する必要があります。封じ込め階層は次のようになります。

JScrollPane->(ビューポート)JLayeredPane-> JTable&JPanel(透明、アニメーション付き)

また、アニメーション用のパネルを配置するのは難しい作業です。JTableの列幅をミラーリングするカスタムレイアウトマネージャーが必要になるか、GridLayoutのようなものを使用する必要があります。実行可能ですが、多くの作業が必要です。

方法2-カスタムCellRendererとSwingタイマーでの再描画

唯一の代替策は、アニメーション化されたセルのリストを保持し、それらに繰り返し再描画を呼び出すスイングタイマーを維持することです。次に、カスタムCellRendererでアニメーションのペイントを行い、ペイントは時間とともに変化します。これは簡単かもしれませんが、CPUを消費せずにフレームレートを正しく取得し、アニメーションの更新に一致するように再描画の更新を取得すると、奇妙な視覚効果が発生する可能性があります

于 2009-02-22T21:24:40.077 に答える