我正处于 Java 应用程序的早期规划阶段,该应用程序将在带有触摸屏的平台上运行,我希望它能够提供您在手机上看到的那种触摸屏支持 - 特别是快速滑动的能力在列表、树或表视图等控件上滑动,使其快速滚动并保持滚动一段时间,即使在滑动结束后也是如此。我研究了一堆 JavaFX 文档,但我仍然不确定是否提供了这种手势支持。谁能证实是这样吗?你能指出示例代码吗?如果没有,谁能建议一种在 Java 中实现这种行为的替代方法?
ListView如果您只使用标准控件(例如或 ) ,则不需要任何特殊代码TableView,它们将支持开箱即用的惯性滚动行为。
您可以通过以下方式在任何笔记本电脑上尝试:
ListView.示例:ListView 的惯性滚动
这里没有特殊的代码,当给出正确的输入时它“正常工作”。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.stage.Stage;
public class SwipeableListApp extends Application {
private static final int INIT_LINES = 10_000;
@Override
public void start(Stage stage) {
ListView<String> listView = new ListView<>();
for (int i = 0; i < INIT_LINES; i++) {
listView.getItems().add(
"Item " + (i+1)
);
}
stage.setScene(new Scene(listView));
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Run Code Online (Sandbox Code Playgroud)
示例:窗格的惯性滚动
如果您想自定义处理滑动手势,例如您正在创建一个水果忍者(强烈建议浪费时间),那么您可以使用标准 Java 事件处理选项(过滤器和处理程序)来编写自定义代码以对手势事件做出反应在 及其子类中具有惯性支持GestureEvent(如用户 EQvan 在评论中所述)。
在 Mac 上并使用触摸板手势进行测试时:
通过查看输出,您会注意到,在inertia收到滚动完成事件后,滚动事件会继续生成一段时间(事件中设置为 true)。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
public class SwipeablePaneApp extends Application {
@Override
public void start(Stage stage) {
Pane pane = new Pane();
pane.setOnSwipeUp(System.out::println);
pane.setOnSwipeDown(System.out::println);
pane.setOnSwipeLeft(System.out::println);
pane.setOnSwipeRight(System.out::println);
pane.setOnScrollStarted(System.out::println);
pane.setOnScroll(System.out::println);
pane.setOnScrollFinished(System.out::println);
pane.setPrefSize(200, 200);
stage.setScene(new Scene(pane));
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |