私はという名前のを持っています。このコードではプログラムがCPU時間を大量に消費することになりますが、ラムダ式に慣れていないので、これを書くための簡単な方法がありますか? :TableViewでScrollEventを処理するには、あまりにも多くのCPU時間がかかります
tableVerre.addEventFilter(ScrollEvent.ANY, new EventHandler<ScrollEvent>() {
@Override
public void handle(ScrollEvent scrollEvent) {
stock.setCellFactory(column -> {
return new TableCell<VerreFX, Number>() {
@Override
protected void updateItem(Number item, boolean empty) {
super.updateItem(item, empty);
TableRow<VerreFX> currentRow = getTableRow();
if (empty || item == null) {
setText("");
setGraphic(null);
currentRow.setStyle(tableVerre.getStyle());
} else {
setText(getItem().toString());
}
if (!isEmpty()) {
if ((int) item == 0 && st.getVerresBOX()) currentRow.setStyle("-fx-background-color:lightcoral");
}
}
};
});
}
});
なぜスクロールハンドラの 'cellFactory'を置き換えますか?テーブルのサイズを変更しない限り、おそらくセルは再作成されません。 – fabian
どこに置くのですか?テーブルのサイズを変更せずにセルを再作成します。 –
新しいセルファクトリ(AFAIK)を設定すると、セルが再作成されます。セルファクトリを継続的に置き換えない場合、ユーザがスクロールすると、それらは単に再利用されます( 'updateItem(...)'メソッドは既存のセルで呼び出されます)。明らかに、 'updateItem()'を呼び出すだけでは、すべてのセルを繰り返し置き換えるよりもパフォーマンスが大幅に低下します。 –