Tableのスクロールが重い件 (3)

結局、グラフィック(GCクラス)を使ってプログレスバーを描画することにした。TableEditorは、セルの位置にコントロールを描画しているだけで、スクロールするたびに移動させなければならならず、この処理がかなり重いので、もうどうせ棒グラフ書きたいだけだし、ペイントイベントのたびにリアルタイムに表示中のアイテムのプログレスバーを該当カラムに描画するようにした。しかも、これなら好きなようにかけるので、Shareのように半透明っぽい棒グラフでもグラデーションでも可能で、しかもずっと軽いし、そう難しくもない。ただ、アイテムごとに直接書くと、画面を最大化しているときにスクロールやカラムをリサイズすると、ちょっとちらつくので、一度Imageクラスへ書いて、そのあとテーブルへ描画というようなダブルバッファリングをする必要がありそう。

  • 表示中のカラムをまわすのは次のようにするらしい


// Table table;
Rectangle table_rect = table.getClientArea();
int index = table.getTopIndex();
int count = table.getItemCount();
for (; index < count; ++index) {
TableItem item = table.getItem (index);
Rectangle item_rect = item.getBounds (4); // カラム4(テキトウ)

if (! item_rect.intersects (table_rect)) {
break;
}

// ここで処理

}