Populating大きなテーブルSWT/JFace RCPの応用
-
19-09-2019 - |
質問
ついてはどのように捉えていく表示するには大量の行SWTす。大きなものを上20K行20列あります。ないでしょうかを示す必要がありそのデータなのです。"次はどうなるのかそれを動作させるためにこのときのようにエンドユーザーがな飽きさせない工夫をこらした待ちしております。各行表示のインスタンスオブジェクトで、カラムはその特性(一).代わりにすることも考えたがJFaceコンテンツ/ラベルのプロバイダのパターンが怖いですでもより遅くな打ち、テーブルのデータです。こうしてでは:
Display.getDefault().asyncExec(new Runnable() {
public void run() {
List<MyObject> objects = model.getViewData();
for(MyObject object: objects){
TableItem item = new TableItem(table, SWT.NULL);
item.setImage(0, img1);
item.setBackground(color1);
item.setText(0, object.getProperty0());
item.setText(1, object.getProperty1());
item.setText(2, object.getProperty2());
.....
}
});
図20k記録コンピュータ間は約20秒最大の性能に問題を感じられる窓によるものすごい量のネイティブのウィンドウのメッセージを送信するSWTが新しいテーブル項目の作成と人口のとします。がその場で発音を確認することが大への対処するこ隠する前に、テーブルのpopulating、そのショーが行われます。呼び出すだけで、その表に示す。setVisible(false)の前にループする。setVisible(true)の後にループな魅力-速度が六-七倍!
思化とスピードアップを図っているものです。んのでしょうか。また、どのように思われるでしょうかこのトリックを隠すウィジェットがどのように非windowsの実装SWT(通称Linux)?
解決
SWTそれを実行できます。をご利用の場合SWT.仮想スタイルフラグの項目作成時にスクロールが見えてきます。こちらはどのような:
- テーブルを作成しスタイルズ.仮想
- セットの行の数を表#setItemCount()
- 追加SWT.SetDataリスナーを満TableItemsます。
こちらのコードスニペット:
public static void main( String[] args ) {
Display display = new Display();
Shell shell = new Shell( display );
shell.setLayout( new FillLayout() );
final Table table = new Table( shell, SWT.VIRTUAL );
table.setItemCount( 10000 );
table.addListener( SWT.SetData, new Listener() {
public void handleEvent( Event event ) {
TableItem item = (TableItem)event.item;
item.setText( "Item " + table.indexOf( item ) );
}
} );
shell.setSize( 300, 500 );
shell.open();
while( !shell.isDisposed() ) {
if( !display.readAndDispatch() ) {
display.sleep();
}
}
display.dispose();
}
他のヒント
あなたはテーブル表示に遅延ロードをしたいです。基本的に、あなたは、実際のGUI表の行のほんの一握りを作成し、メモリ内にオフスクリーンのすべてのこれらのオブジェクトを保持します。ユーザーがスクロールとして、あなたは、そのスクロール位置にオブジェクトでこれらの行を再レンダリングします。
を参照してください。この記事で(<強いです>編集:私は意味おっと の強いです>)JFaceの例のための
1 - のsetTextを使用する(文字列[])の代わりのsetText(整数、文字列)の代わりに、いくつか1つのコール
2 - データのロード中にすべての再描画動作を停止する工程の後に前myTable.setRedraw(偽)とmyTable.setRedraw(true)を使用する
。それは!!簡単ですし、パフォーマンスを向上させることができます。
幸運。
私の側に標準今日のPC上で.....未満300ミリ秒で、このI負荷20列の2500行を使用します。