Ich habe eine TableView
mit dem Namen tableVerre
und ich möchte jede Zeile für ein Kriterium überprüft haben (stock
Spaltenwert) und führen Sie einige Code auf sie als ich scroll, also schrieb ich dieser Code, aber es macht das Programm eine Menge CPU-Zeit zu verbrauchen, ich bin nicht vertraut mit Lambda-Ausdrücke so gibt es eine einfachere Möglichkeit, dies zu schreiben? :ScrollEvent auf TableView dauert zu viel von der CPU-Zeit
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");
}
}
};
});
}
});
Warum ersetzen Sie die 'cellFactory' im Scroll-Handler? Wahrscheinlich werden die Zellen nicht einmal neu erstellt, es sei denn, Sie ändern die Größe der Tabelle ... – fabian
Wo würde ich es hinstellen? Übrigens werden die Zellen neu erstellt, ohne die Tabelle zu verändern. –
Die Zellen werden neu erstellt, wenn Sie eine neue Zellenfabrik (AFAIK) einrichten. Wenn Sie die Zellenfactory nicht ständig ersetzen, werden sie einfach wiederverwendet (die Methode 'updateItem (...)' wird bei vorhandenen Zellen aufgerufen), während der Benutzer scrollt. Offensichtlich ist das Aufrufen von 'updateItem()' viel weniger leistungsintensiv als das wiederholte Ersetzen aller Zellen. –