我的JavaFX项目有问题.有一刻我无法理解.据我所知,以下代码应该能够处理表的所有滚动事件,这是TableView的一个实例
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;
}
}
}
}
);
Run Code Online (Sandbox Code Playgroud)
每当我启动应用程序时,它只会为可见行正确突出显示行.我发现它是因为
table.lookupAll("TableRow")
Run Code Online (Sandbox Code Playgroud)
为我返回仅17个节点的集合.虽然
table.getItems().size()
Run Code Online (Sandbox Code Playgroud)
显示正确的行数.如果我向下滚动表格,我会看到突出显示未批准的行.我迷失了一点.
所以问题是如何正确处理我的表的滚动事件?我需要处理表的所有行,而不仅仅是可见的.
最后我找到了处理滚动事件的方法,我想分享一下我的经验.使用Scenic View我发现只有当光标在列标题上滚动鼠标滚轮时才会触发TableView setOnScroll事件.但是当光标位于表数据之上时(能够在我的示例中需要),能够处理ScrollEvent,需要使用EventFilter来确定.例如,下面的colde将处理TableView实例的所有滚动事件
table.addEventFilter(ScrollEvent.ANY, new EventHandler<ScrollEvent>() {
@Override
public void handle(ScrollEvent scrollEvent) {
System.out.println("Scrolled.");
}
});
Run Code Online (Sandbox Code Playgroud)
Scenic View也给了我一个关于TableView包含的内容的提示
stage.show()
Run Code Online (Sandbox Code Playgroud)
工作.
Althougth我仍然错误地突出显示行)...
| 归档时间: |
|
| 查看次数: |
6669 次 |
| 最近记录: |