java-在TableView JavaFX的行上检测双击

我需要检测在TableView行上的双击。

如何侦听该行任何部分的双击并获取该行的所有数据以将其打印到控制台?

6个解决方案

108 votes

TableView table = new TableView<>();

//...

table.setRowFactory( tv -> {

TableRow row = new TableRow<>();

row.setOnMouseClicked(event -> {

if (event.getClickCount() == 2 && (! row.isEmpty()) ) {

MyType rowData = row.getItem();

System.out.println(rowData);

}

});

return row ;

});

这是一个完整的工作示例:

import java.util.Random;

import java.util.function.Function;

import javafx.application.Application;

import javafx.beans.property.IntegerProperty;

import javafx.beans.property.SimpleIntegerProperty;

import javafx.beans.property.SimpleStringProperty;

import javafx.beans.property.StringProperty;

import javafx.beans.value.ObservableValue;

import javafx.scene.Scene;

import javafx.scene.control.TableColumn;

import javafx.scene.control.TableRow;

import javafx.scene.control.TableView;

import javafx.stage.Stage;

public class TableViewDoubleClickOnRow extends Application {

@Override

public void start(Stage primaryStage) {

TableView table = new TableView<>();

table.setRowFactory(tv -> {

TableRow row = new TableRow<>();

row.setOnMouseClicked(event -> {

if (event.getClickCount() == 2 && (! row.isEmpty()) ) {

Item rowData = row.getItem();

System.out.println("Double click on: "+rowData.getName());

}

});

return row ;

});

table.getColumns().add(column("Item", Item::nameProperty));

table.getColumns().add(column("Value", Item::valueProperty));

Random rng = new Random();

for (int i = 1 ; i <= 50 ; i++) {

table.getItems().add(new Item("Item "+i, rng.nextInt(1000)));

}

Scene scene = new Scene(table);

primaryStage.setScene(scene);

primaryStage.show();

}

private static TableColumn column(String title, Function> property) {

TableColumn col = new TableColumn<>(title);

col.setCellValueFactory(cellData -> property.apply(cellData.getValue()));

return col ;

}

public static class Item {

private final StringProperty name = new SimpleStringProperty();

private final IntegerProperty value = new SimpleIntegerProperty();

public Item(String name, int value) {

setName(name);

setValue(value);

}

public StringProperty nameProperty() {

return name ;

}

public final String getName() {

return nameProperty().get();

}

public final void setName(String name) {

nameProperty().set(name);

}

public IntegerProperty valueProperty() {

return value ;

}

public final int getValue() {

return valueProperty().get();

}

public final void setValue(int value) {

valueProperty().set(value);

}

}

public static void main(String[] args) {

launch(args);

}

}

James_D answered 2020-02-07T15:59:54Z

19 votes

例:

table.setOnMousePressed(new EventHandler() {

@Override

public void handle(MouseEvent event) {

if (event.isPrimaryButtonDown() && event.getClickCount() == 2) {

System.out.println(table.getSelectionModel().getSelectedItem());

}

}

});

如果使用自定义选择模型,则可以从事件中获取行,例如:

table.setOnMousePressed(new EventHandler() {

@Override

public void handle(MouseEvent event) {

if (event.isPrimaryButtonDown() && event.getClickCount() == 2) {

Node node = ((Node) event.getTarget()).getParent();

TableRow row;

if (node instanceof TableRow) {

row = (TableRow) node;

} else {

// clicking on text part

row = (TableRow) node.getParent();

}

System.out.println(row.getItem());

}

}

});

Alexander.Berg answered 2020-02-07T16:00:18Z

3 votes

这对我有用:

table.setOnMouseClicked((MouseEvent event) -> {

if (event.getButton().equals(MouseButton.PRIMARY) && event.getClickCount() == 2){

System.out.println(table.getSelectionModel().getSelectedItem());

}

});

}

Abdul.Moqueet answered 2020-02-07T16:00:38Z

1 votes

如果使用的是SceneBuilder,则可以将表的OnMouseClicked设置为handleRowSelect()的方法,如下所示:

MyType temp;

Date lastClickTime;

@FXML

private void handleRowSelect() {

MyType row = myTableView.getSelectionModel().getSelectedItem();

if (row == null) return;

if(row != temp){

temp = row;

lastClickTime = new Date();

} else if(row == temp) {

Date now = new Date();

long diff = now.getTime() - lastClickTime.getTime();

if (diff < 300){ //another click registered in 300 millis

System.out.println("Edit dialog");

} else {

lastClickTime = new Date();

}

}

}

Sushal Penugonda answered 2020-02-07T16:00:58Z

0 votes

这个答案已经过测试:

table.setOnMouseClicked( event -> {

if( event.getClickCount() == 2 ) {

System.out.println( table.getSelectionModel().getSelectedItem());

}});

因为我们可以双击鼠标,所以可以使用table.getSelectionModel().getSelectedItem()。 第一个单击将移动选择,第二个将执行此处理程序。

Aubin answered 2020-02-07T16:01:23Z

0 votes

我有类似的情况,无法检测到TableView上的鼠标双击事件。最重要的是,所有样品均表现完美。 但我的应用程序根本没有检测到双击事件。

但是我发现,如果TableView处于可编辑状态,则无法检测到鼠标双击事件!

检查您的应用程序是否TableView处于这种可编辑状态。

tableView.setEditable( true );

如果是,则双击事件仅在所选的同一行上引发。

nayasis answered 2020-02-07T16:01:56Z

java tableview 双击_java-在TableView JavaFX的行上检测双击相关推荐

  1. java 恶搞程序_Java恶搞!强制关闭电脑上的程序进程!

    效果 最近写代码经常和各种进程打交道,发现了一个很有意思的黑科技. 我直接说有什么用吧,可以设置每隔多少时间检查某个程序是否在使用,如果在用,就强制关闭.比如,有的sb舍友晚上就是不睡觉,一边打游戏一 ...

  2. java fileupload 文件_java用Commons fileupload 文件的上传

    java用Commons fileupload 文件的上传 基于表单的文件上传 如果在表单中使用表单元素 />,浏览器在解析表单时,会自动生成一个输入框和一个按钮,输入框可供用户填写本地文件的文 ...

  3. JAVA客户端数据传输_java模拟TCP通信实现客户端上传文件到服务器端

    java模拟TCP通信实现客户端上传文件到服务器端,供大家参考,具体内容如下 客户端 package com.zr; import java.io.FileInputStream; import ja ...

  4. java实体序列化_java – 在JPA实体序列化(JSON)上防止JAX-RS中...

    我有一个实体如下: @XmlRootElement @Entity @Table(name="CATEGORY") @Access(AccessType.FIELD) @Cache ...

  5. java 网页 录音_Java+FlashWavRecorder实现网页录音并上传

    [注意] [前言] 肯定有需求要网页录音,并且要上传.这奇葩需求. 然后找到了FlashWavRecorder, [原始版本号] 1.下载 在上面的地址下载zip解压之后,目录里面有个index.ht ...

  6. java for 下标_Java如何在 Word 中设置上、下标

    上标是指比同一行中其他文字稍高的文字,而下标是指比同一行中其他文字稍低的文字.在生活中,我们常见的平方米.立方米等符号以及化学中的各种元素符号,都是利用上.下标来表示的.本文将介绍通过Free Spi ...

  7. Java返回程序_java程序中,怎么返回上一个步骤?

    程序开始运行后界面如下:然后登陆进去,界面如下我想问的是,这时候输入4,返回到上一级,即返回到输入第一个选择的那一步骤该怎么做呢.我做了开头,如下:publicclassHome{publics... ...

  8. java enum 关联_Java:如果EnUM常量在本质上是静态的,那么它如何可以拥有与其相关联的构造函数和方法...

    如果枚举常量本质上是静态的,那么如何将其作为对象和访问方法并具有构造函数. 枚举常量如何同时是对象和静态的? 请参考以下代码: enum Apple { Jonathan(10), GoldenDel ...

  9. java操作文件_java操作FTP,实现文件上传下载删除操作

    上传文件到FTP服务器: /** * Description: 向FTP服务器上传文件 * @param url FTP服务器hostname * @param port FTP服务器端口,如果默认端 ...

最新文章

  1. jQuery学习笔记(一):入门
  2. Docker-compose 安装Jenkins
  3. 大数据时代,如何才能提高自身竞争力?
  4. 一个简洁实用的后台管理系统AWESOME
  5. java可视化压缩_WEB可视化技术发展
  6. 组合数据类型练习,综合练习
  7. 文本删除空行_Word的空行、空格、页眉线删不了?8秒一次性处理,教你删掉它们...
  8. 机器数与码制——如何在计算机内部存储数字、进行数据运算
  9. 手机号中间四位星号显示
  10. EXCEL数据处理小结(SQL)
  11. 二极管 三极管 mos管
  12. 空气负氧离子监测系统建设方案
  13. 软文发布时标题怎么写,这几点值得注意!
  14. UE4天气效果加白天黑夜的平滑过度切换
  15. insert overwrite出现Table insclause-0 has 9 columns, but query has 10 columns.
  16. deadmau5 《光之塔》 NFT 系列来袭!
  17. 新闻与传播c刊_3本新闻传播类期刊入围新版C刊扩展目录
  18. IT项目管理 第四章 习题
  19. 头的各个部位示意图_上臂肌群图示:肱二头肌、肱三头肌、肱肌部位图解说明...
  20. 介绍一款web端的截图工具

热门文章

  1. Docker中的网络问题
  2. C++ priority_queue用法
  3. 微信小程序连接阿里云物联网
  4. C++通过vmware.exe检测虚拟机
  5. android省市二级联动的实现
  6. 5、删除被其它表关联的主表
  7. 在Servlet中向客户端写Cookie信息
  8. 1088 Rational Arithmetic (20 分)【难度: 简单 / 知识点: 模拟】
  9. JDBC之封装通用的BaseDao
  10. Spring boot的Thymeleaf使用