javafxテーブルビューコントロールを使用してテーブルデータを表示しています。今ではデータが非常に巨大で、コントロール内のすべてのデータを表示するとクラッシュします。これを行う方法はありますか、データをキャッシュしてチャンクに表示する必要がありますか?代わりにJTableを使うべきですか?JavaFX TableViewパフォーマンスの問題
答えて
私はあなたの質問を正しく理解しているかどうかはわかりませんが、アイテムの遅延読み込みはどうでしょうか?実際にはexample within the Docs directlyがあります。それはTreeViewのものであり、TableViewのものではありませんが、単純にその考え方を適用することができます。
私のツリービューでは、少なくともこれまでに多くの問題を解決するのに役立つと思っています。
乾杯、 レギーネ
ありがとう、私はそれを通過します... – AsG
私はCellFactoryクラスを使用してテーブルビューにレイジーロードを作った... - 私は私が編集し、それをより理解しやすくすること自由に落ちたよりも、より良い英語で誰を説明しよう!
まず、Beanの必須プロパティを使用して、そのBeanがすでにロードされているかどうかを確認します。このように、私はそれ専用の属性を作成する必要はありません。
第2に、TableViewに「id」プロパティをロードしただけで私のBeanコレクションをロードしました。なぜなら、私のテーブルの表示はすべて空白になります。
最後に、以下のようなCellFactoryを作成して、オブジェクトがロードされているかどうかをチェックします。
namecolumn.setCellFactory(new Callback<TableColumn<PersonBean, String>, TableCell<PersonBean, String>>() {
@Override
public TableCell<PersonBean, String> call(TableColumn<PersonBean, String> param) {
TableCell<PersonBean, String> newtablecell = new TableCell<PersonBean, String>() {
@Override
protected void updateItem(String item, boolean empty) {
// Since I got some strange errors when method getIndex() return greatter value than my collection size, I need to validate before getting the object
if (getIndex() < getItems().size()) {
//Retrieve the collection object
PersonBean personbean = getItems().get(getIndex());
// Name is mandatory, so if it is null my bean was not loaded yet
if (personbean.getName() == null) {
// Call other centralized method to make load, details explained later
loadPersonBean(personbean);
}
// Now I put the value on TableCell. Remember "item" still empty so we need to use Bean
setText(personbean.getName());
setAlignment(Pos.CENTER);
}
}
};
return newtablecell;
}
});
loadPersonBeanのメソッドでは、私はTableView Collectionに含まれるオブジェクトを渡し、DataBaseからロードします。私はテーブルから受け取ったBeanに必要なすべてのデータをコピーします。私は、TableViewでオブジェクトを交換しようとしなかったが、それは同時発生例外が発生する可能性があります。
その他の観察:TableViewは常にCellFactoryを呼び出すために列の順序を尊重しますが、ユーザーが列の順序を入れ替える場合でも順序を尊重するかどうかはテストしませんでした。だから私はすべての列にコードの "LazyLoadCheck"部分を持つCellFactoryを追加することを好む。
希望私は助けに十分な私の自己を作った!ご質問が残っている場合は、コメントと私はより良い説明をしようとします。
- 1. tableView JavaFx
- 2. JavaFXでtableviewとtablecolumnsを使用する際の問題
- 3. のtableView問題
- 4. JavaFX、TableView、JPA
- 5. TableViewリロードの問題
- 6. TableViewセルフレームの問題
- 7. JavaFX ProgressBarの問題
- 8. tableview delete行の問題
- 9. パフォーマンスの問題
- 10. JavaFX TableView Column Width \ Contents auto-truncating
- 11. javafx tableview auto最後にスクロール
- 12. xslパフォーマンスの問題
- 13. WPFパフォーマンスの問題
- 14. ModalPopupExtenderパフォーマンスの問題
- 15. エンティティフレームワークのパフォーマンス問題
- 16. パフォーマンスの問題JOGL
- 17. パフォーマンスの問題KineticJS
- 18. DbContext.Entryパフォーマンスの問題
- 19. Opencartパフォーマンスの問題
- 20. DrawingContext.DrawLineパフォーマンスの問題
- 21. パフォーマンスの問題が
- 22. コルドバアンドロイドスクロール/パフォーマンスの問題
- 23. TableViewセルの出現の問題
- 24. TableView JavaFxの文字列へのブール
- 25. タスクからのtableviewのJavaFX Updateプログレスバー
- 26. TableViewでの迅速な問題
- 27. JavaFX TableViewの頻繁な更新
- 28. ウェブアプリケーションのパフォーマンスの問題
- 29. PLINQのパフォーマンスの問題
- 30. ビルド間のパフォーマンスの問題
テーブルビューのページ付けを実装し、データをチャンクにロードします。 –
JavaやJavaFxでこれを行うライブラリやapiはすでに開発されていますか? – AsG
Swingにはサードパーティ製のapiがあるかもしれませんが、AFAIKにはJavaFX用にnoがあります。実際にはあなたの環境によって異なります。たとえば、JPAにはページ単位のクエリなどがあります。ビュー部分は実装するのが難しくありません。 –