我有TableView
名爲tableVerre
,我希望每行檢查條件(stock
列值),並在滾動時對它們執行一些代碼,以便我寫入這段代碼,但它使程序消耗大量的CPU時間,我不熟悉Lambda表達式,所以是否有更簡單的方法來編寫它? :在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()'比重複更換所有單元要少得多。 –