2011-12-11 8 views
1

私はこのカスタムCellFactoryをtableViewに持っています。スクロールすると、その列は非常に遅いです。これがどうして私はそれを改善することができますか?あなたが実行して開始する必要がありJavafx 2.0テーブルビューでカスタムCellFactoryを使用した低速列

lastTradeColumn.setCellFactory(
    new Callback<TableColumn<Stock, Price>,TableCell<Stock, Price>>(){ 
     @Override public TableCell<Stock, Price> call(TableColumn<Stock, Price> p) { 
     TableCell<Stock, Price> cell = new TableCell<Stock, Price>() { 
      @Override public void updateItem(Price price, boolean empty) { 
       super.updateItem(price, empty); 
       if (price != null) { 
        VBox vbox = new VBox(5); 
        vbox.getChildren().add(new Label("£"+price.toString())); 
        if(price.getOldPrice() > price.getNewPrice()) { 
        vbox.setStyle("-fx-background-color:#EA2A15;"); 
        } 
        else if(price.getOldPrice() < price.getNewPrice()) { 
        vbox.setStyle("-fx-background-color:#9CF311;"); 
        } 
        setGraphic(vbox); 
       } 
      } 
     }; 
     return cell; 
    } 
}); 

答えて

4

2つのことは以下の通りです。むしろ、コールのsetStyle(...)、)...(追加()getStyleClassを呼び出し、その後、外部CSSを使用してより

1)スタイルクラスを定義するファイル。実行時にCSSを解析するのは遅く、回避する必要があります。

2)updateItemが呼び出されるたびに再作成するのではなく、VBoxとLabelを再利用します。これを行うには、VBoxとLabelをupdateItemメソッドの外に移動します(ただし、新しいTableCell <>()ブレース内に保持してください)。

しかし、2)もう少し先に、VBoxまたはラベル。単にセル自体にスタイルクラスを設定し、setText(...)を使用してセルに対してテキストを設定します。

- Jonathan

+0

両方のソリューションが完璧に機能しました。今度は同じ過ちをしているのを見て回ります。ありがとう。 –

関連する問題