如何区分javafx中表格行的单击或双击

2023-12-24

我正在尝试在 javafx 中创建一个表,允许用户单击一行以转到一页或双击该行以转到另一页。问题在于应用程序注册了单击事件,但没有等待查看是否有另一个双击。有没有办法让程序等待,看看是否有另一次点击?

到目前为止我所拥有的看起来类似于

TableView searchResults;
ObservableList<MovieRow> rows = FXCollections.observableArrayList();

private TableColumn<MovieRow, String> title;
title.setCellValueFactory(new PropertyValueFactory<>("mTitle"));

rows.add(new MovieRow("The cat in the hat"));

searchResults.setItems(rows);

searchResults.setRowFactory(tv -> {
    TableRow<MovieRow> row = new TableRow<>();
    row.setOnMouseClicked(event -> {
        MovieRow tempResult = row.getItem();

        if (event.getClickCount() == 1) {
            System.out.println(tempResult.getMTitle + " was clicked once");
        }else{
            System.out.println(tempResult.getMTitle + " was clicked twice");
        }
    });
    return row;
});

public class MovieRow{
    private String mTitle;
    
    public MovieRow(String title){
           mTitle = title;
    }

    public String getMTitle() {
            return mTitle;
    }
}

实际产量

single click: The cat in the hat was clicked once
double click: The cat in the hat was clicked once

期望的输出

single click: The cat in the hat was clicked once
double click: The cat in the hat was clicked twice

我只找到了自行处理双击或自行单击的结果,但没有同时处理两者,所以我不确定这是否可能。任何帮助将非常感激。谢谢。


作为 API 的一部分,您无法做到这一点:您只需自己编写代码“让程序等待,看看是否有另一次点击”。请注意,这意味着单击操作在执行之前必须稍微暂停;没有办法解决这个问题(你的程序无法知道将来会发生什么)。您可以考虑采用不同的方法(例如左按钮与右按钮)来避免这种稍微不方便的用户体验。

但是,解决方案可能如下所示:

public class DoubleClickHandler {

    private final PauseTransition delay ;
    private final Runnable onSingleClick ;
    private final Runnable onDoubleClick ;
    private boolean alreadyClickedOnce ;

    public DoubleClickHandler(
        Duration maxTimeBetweenClicks,
        Runnable onSingleClick,
        Runnable onDoubleClick) {

        alreadyClickedOnce = false ;
        this.onSingleClick = onSingleClick ;
        this.onDoubleClick = onDoubleClick ;

        delay = new PauseTransition(maxTimeBetweenClicks);
        delay.setOnFinished(e -> {
            alreadyClickedOnce = false ;
            onSingleClick.run()
        });
    }

    public void applyToNode(Node node) {
        node.setOnMouseClicked(e -> {
            delay.stop();
            if (alreadyClickedOnce) {
                alreadyClickedOnce = false ;
                onDoubleClick.run();
            } else {
                alreadyClickedOnce = true ;
                delay.playFromStart();
            }
        });
    }
}

您可以将其与以下产品一起使用:

searchResults.setRowFactory(tv -> {
    TableRow<MovieRow> row = new TableRow<>();
    DoubleClickHandler handler = new DoubleClickHandler(
        Duration.millis(500),
        () -> {
            MovieRow tempResult = row.getItem();
            System.out.println(tempResult.getMTitle + " was clicked once");
        },
        () -> {
            MovieRow tempResult = row.getItem();
            System.out.println(tempResult.getMTitle + " was clicked twice");
        }
    );
    handler.applyToNode(row);
    return row ;
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何区分javafx中表格行的单击或双击 的相关文章

  • 情节性的javascript。 'plotly_click' 上的不是一个函数

    我正在尝试在我的绘图图表上创建一个 onclick 事件 根据文档 我创建了以下图表 var graphDiv document getElementById uniqueId Plotly newPlot uniqueId charDat
  • JavaFX检测同时按下的多个键盘按键

    正如标题所说 我想检测同时按下的多个键盘按键 同时地 并被按下 同时地 一段时间 我正在尝试添加多个事件处理程序Scene但它不起作用 EventHandler
  • JavaFx 如何避免创建一个巨大的控制器

    我在 JavaFX 中有一个应用程序 它有带有菜单和工具栏的主场景 以及在按下菜单按钮之一后注入到该主场景中的较小场景 现在 HomeCntroller 负责场景组件 主场景 带有工具栏和菜单 和注入场景 如果注入的场景数量超过一个 这会导
  • 如何将 javafx.scene.paint.Color 转换为 java.awt.Color ?

    如何转换javafx scene paint Color to java awt 颜色在java中 有任何想法吗 你可以使用接受 r g b 和 alpha 参数的构造函数 https docs oracle com javase 8 do
  • 由于 MultiReleaseException,jdeps 无法打印模块 deps

    我们有一个基于 JavaFX 的应用程序 它是not模块化 有原因 涉及遗留库 但我们使用构建自定义运行时jdeps and jlink 我们最近重写了该应用程序并添加了一些新的依赖项 并删除了其他依赖项 现在 正在构建应用程序的脚本突然停
  • Gridpane 中的 JavaFx 图像会大幅降低性能

    我想创建一个 GridPane 嵌套在 ScrollPane 中 在其中动态添加单元格到 GridPane 每个单元格都包含一个带有背景图像的 VBox 一些标签和一个复选框 问题是 GridPane 可以包含数百个 VBox 在我的例子中
  • 为什么 ASP.NET DropDownList 控件需要单击两次才能在 Internet Explorer 中展开

    我有一个 ASP NET DropDownList 控件 它呈现到页面上的下拉列表 选择 HTML 标记 中 由于某种原因 当我使用 Internet Explorer 时 需要单击两次才能打开它并查看选项 这对最终用户来说只是额外的单击
  • 如何在关闭阶段后清除 Javafx Webview 内存使用情况

    我尝试在JavaFX中使用webview制作UI 但是有一个问题 当使用popup打开大图像时 内存使用量非常大 并且当popup关闭时 内存使用量不会下降 我明白了通过 Windows 中的任务管理器查看内存使用情况 当使用webview
  • 条件绑定

    我是 JavaFx 新手 我正在创建一个应用程序 用户必须填写一些表单 并且我想使用绑定 预先验证 它们 简单的事情 比如所有元素都不能为空 或者其中一些元素只能包含数字 这是我到目前为止所拥有的 saveBtn disableProper
  • PreLoader 的多线程 - JavaFX

    我正在开发一个 JavaFX 应用程序 需要在启动主应用程序阶段之前从文件中加载资源 我完成此任务的解决方案是使用 PreLoader 以便用户在加载资源之前无法与应用程序交互 非常标准的东西 我有一个扩展 PreLoader 类的类 该类
  • JavaFX 中的隐形舞台/场景

    我正在寻找一种隐藏 JavaFX 舞台或场景的方法 现在我知道了 hide 但这行不通 我需要一些仍然保留窗口的东西 但只是使其完全透明 一个很好的比喻是display none and visibility hidden在CSS中 第一个
  • $(sel).bind("click", $(sel).click(, $(sel).live("click", $(sel).on("click") 之间有什么显着差异?

    我已经使用它们很长一段时间了 但大多数时候 我更喜欢较短的 但是 我只想真正深入了解本质细节 我可能一直在创建有缺陷的代码 并且我不想在网络上贡献和传播懒惰完成的代码 所以告诉我 它们之间有哪些显着的优点 缺点 或者是 就像冰淇淋一样 不同
  • JavaFX 中按下按钮的样式

    我有一个Button in my FXML文件 我在下面给它一个样式CSS button fx background color linear gradient ff5400 be1d00 fx background radius 30 f
  • 如何在javafx中通过事件传递参数?

    我有以下示例 我想将参数 文本 与事件一起传递 当单击按钮 bla 时 我该怎么做 EventHandler
  • JavaFX 的 Swing 计时器替代方案以及线程管理差异

    使用 JavaFX 的 Swing 计时器是否安全 或者 Swing 有特殊的替代方案吗 JavaFX 和 Swing 的线程管理有什么区别 事实上我很想知道相当于摇摆计时器 SwingUtilities invokeLater and i
  • JavaFX 8 DatePicker 风格

    如何更改JavaFX 8中DatePicker中日历的样式 我查看了 modena 文件中的所有默认样式 但没有找到 DatePicker 的类 有人知道该怎么做吗 例如 将标题颜色更改为蓝色 默认样式如下 您可以找到以下的 cssDate
  • 尝试使 Tableview 可点击时发生 JavaFX 错误

    我正在尝试使表格视图可单击 它将返回单击的单元格中的文本 尝试在 Netbeans 中编译时收到两个错误 所有代码均取自 示例12 11 单元格编辑的替代解决方案 官方表格视图教程 http docs oracle com javafx 2
  • 学习 Java Native Access 时出现 com.sun.glass.ui 包错误

    我正在尝试在 JavaFX 项目中使用 Undecorated 阶段 stage initStyle StageStyle UNDECORATED 它是一个模块化的 Gradle 项目 它也是一个多项目构建 https guides gra
  • Android 中识别点击的图像区域?

    有没有办法在 Android 应用程序中确定用户单击了 ImageView 的哪个区域 例如 x y 坐标 谢谢 查看运动事件 http developer android com intl de reference android vie
  • JavaFX中如何获取鼠标位置?

    我是java fx 的初学者 如何在 JavaFX 中获取鼠标在 x 和 y 中的位置 我尝试使用 AWTMouseInfo 也导入了它 但它不起作用 我还在 Ensembles 中看到了它的代码 在 高级阶段 拖动球窗口 这就是我需要做的

随机推荐