我的JavaFX項目存在問題。有一段時間我無法理解。據我瞭解下面的代碼應該能夠處理表,這是TableView中TableView的JavaFX滾動事件處理
table.setOnScroll(new EventHandler<ScrollEvent>() {
@Override
public void handle(ScrollEvent scrollEvent) {
System.out.println("Hello!");
int i = 0;
int length = table.getItems().size();
for(Node n: table.lookupAll("TableRow")) {
if (n instanceof TableRow) {
TableRow row = (TableRow) n;
if(table.getItems().get(i).getType() == "fwfx") {
row.setStyle("-fx-background-color: forestgreen;");
}
i++;
}
if(i == length) {
break;
}
}
}
}
);
的一個實例,每當我啓動它正確地強調行,只有可見行應用程序的所有滾動事件。我找到了它,因爲
table.lookupAll("TableRow")
爲我返回只有17個節點的集合。雖然
table.getItems().size()
顯示正確的行數。如果我向下滾動表格,則會看到突出顯示的未批准行。我迷失了一下。
所以問題是我如何正確處理我的表的滾動事件?我需要處理表格的所有行,不僅可見。
我沒有得到你想要在這裏實現的。然而,'table.lookupAll(...)'返回的行數是由於TableView類將重複使用節點來渲染行的結果。如果您的表格包含一百萬個項目,則仍然只會創建足夠的節點,以便在屏幕上顯示所有內容。因此,我猜你的'不正確'突出顯示的行是重用的節點,沒有將它們的CSS重置(由你)。 – sarcan
謝謝你的回覆@sarcan!我認爲你對節點的使用是正確的。我試圖通過在用戶滾動鼠標時「刷新」節點來避免它。也許我「刷新了」錯誤的東西...... 只要我找到正確的解決方案,我會在這裏發佈。 – Oleg