【发布时间】:2022-01-03 15:58:47
【问题描述】:
我正在编写一个 JavaFX 程序,其中包含一个名为“table”的 TableView 和两个名为“previous”和“next”的按钮。
下面是部分代码:
previous.setOnAction(event -> {
table.getSelectionModel().selectPrevious();
});
next.setOnAction(event -> {
table.getSelectionModel().selectNext();
});
但是,如果我一直按下按钮,表格将不会自动滚动以保持所选项目可见。所以我修改了这样的代码:
previous.setOnAction(event -> {
table.getSelectionModel().selectPrevious();
table.scrollTo(table.getSelectionModel().getSelectedItem());
});
next.setOnAction(event -> {
table.getSelectionModel().selectNext();
table.scrollTo(table.getSelectionModel().getSelectedItem());
});
但它会始终尝试将所选项目保持在可见区域的顶部。如果我一直按“下一步”。选定的项目将停留在顶部而不是底部。
我想模仿 tableview 的自然行为,如果我在键盘上按下或按下选定的内容,tableview 将自动滚动以保持所选项目可见。
我应该如何修改代码以使按下按钮时自动滚动更自然?
谢谢
【问题讨论】:
-
尝试创建上下按键事件并在桌上触发它们。
-
你能详细说明一下吗?
-
不是在这个时候,这就是为什么我发表评论而不是 anser。
-
控制 scrollTo 的确切行为是一个长期开放的 rfe bugs.openjdk.java.net/browse/JDK-8091220 - 在得到支持之前,您可以尝试一个自定义皮肤,它公开 onSelectNext (和类似的)以用于自定义表和用那个。另一种选择可能是查找可见单元格的数量(virtualFlow 具有查找第一个/最后一个可见单元格的公共方法)并进行一些计算以找到 scrollTo 的索引,以便您想要在底部的单元格就在里面。一切都不好,但可行;)