Javafx 2.0 Slow Column с пользовательской CellFactory в TableView - PullRequest
1 голос
/ 11 декабря 2011

У меня есть этот пользовательский CellFactory в моем tableView. При прокрутке этот столбец работает исключительно медленно. Любая причина, почему это так и как я могу улучшить это.

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;
   }
});

1 Ответ

5 голосов
/ 12 декабря 2011

Вы должны начать с двух вещей:

1) Вместо вызова setStyle (...) вызовите getStyleClass (). Add (...), а затем используйте внешний файл CSS дляопределить классы стилей.Синтаксический анализ CSS во время выполнения является медленным и показа следует избегать.

2) Повторно используйте VBox и Label, а не создавайте его заново каждый раз, когда вызывается updateItem.Сделайте это, переместив VBox и Label за пределы метода updateItem (но держите его в новой скобке TableCell <> ().

Однако .... принимая 2) немного дальше, я сомневаюсь, что вам нуженVBox или ярлык.Просто установите класс стилей на саму ячейку и установите текст напротив ячейки, используя setText (...).

- Jonathan

...