javaFX TableView实现拖拽排序

JavaFX拖放操作示例 关于JavaFX应用中拖放操作的示例代码。 立即下载

网上资料比较少,找了好长时间,在gitee中淘出了一位大神的代码,效果还不错

https://gitee.com/diyagea/JavaFX_Test/blob/master/src/DragDrop/TableViewDragRows.java?_from=gitee_search#

package DragDrop;

import java.util.function.Function;

import javafx.application.Application;
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.scene.input.ClipboardContent;
import javafx.scene.input.DataFormat;
import javafx.scene.input.Dragboard;
import javafx.scene.input.TransferMode;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class TableViewDragRows extends Application {

	private static final DataFormat SERIALIZED_MIME_TYPE = new DataFormat("application/x-java-serialized-object");

	@Override
	public void start(Stage primaryStage) {
		TableView<Person> tableView = new TableView<>();
		tableView.getColumns().add(createCol("First Name", Person::firstNameProperty, 150));
		tableView.getColumns().add(createCol("Last Name", Person::lastNameProperty, 150));
		tableView.getColumns().add(createCol("Email", Person::emailProperty, 200));

		tableView.getItems().addAll(new Person("Jacob", "Smith", "jacob.smith@example.com"), new Person("Isabella", "Johnson", "isabella.johnson@example.com"), new Person("Ethan", "Williams", "ethan.williams@example.com"), new Person("Emma", "Jones", "emma.jones@example.com"), new Person("Michael", "Brown", "michael.brown@example.com"));

		tableView.setRowFactory(tv -> {
			TableRow<Person> row = new TableRow<>();
			//拖拽-检测
			row.setOnDragDetected(event -> {
				if (!row.isEmpty()) {
					Integer index = row.getIndex();
					Dragboard db = row.startDragAndDrop(TransferMode.MOVE);
					db.setDragView(row.snapshot(null, null));
					ClipboardContent cc = new ClipboardContent();
					cc.put(SERIALIZED_MIME_TYPE, index);
					db.setContent(cc);
					event.consume();
				}
			});
			//释放-验证
			row.setOnDragOver(event -> {
				Dragboard db = event.getDragboard();
				/* check if same table view
				TableRow<Person> rowTemp = (TableRow<Person>) event.getGestureSource();
				if (rowTemp.getTableView() != row.getTableView()) {
				}*/
				if (db.hasContent(SERIALIZED_MIME_TYPE)) {
					if (row.getIndex() != ((Integer) db.getContent(SERIALIZED_MIME_TYPE)).intValue()) {
						event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
						event.consume();
					}
				}
			});
			//释放-执行
			row.setOnDragDropped(event -> {
				Dragboard db = event.getDragboard();
				if (db.hasContent(SERIALIZED_MIME_TYPE)) {
					int draggedIndex = (Integer) db.getContent(SERIALIZED_MIME_TYPE);
					Person draggedPerson = tableView.getItems().remove(draggedIndex);

					int dropIndex;
					if (row.isEmpty()) {
						dropIndex = tableView.getItems().size();
					} else {
						dropIndex = row.getIndex();
					}

					tableView.getItems().add(dropIndex, draggedPerson);

					event.setDropCompleted(true);
					tableView.getSelectionModel().select(dropIndex);
					event.consume();
				}
			});

			return row;
		});

		Scene scene = new Scene(new BorderPane(tableView), 600, 400);
		primaryStage.setScene(scene);
		primaryStage.show();
	}

	private TableColumn<Person, String> createCol(String title, Function<Person, ObservableValue<String>> mapper, double size) {

		TableColumn<Person, String> col = new TableColumn<>(title);
		col.setCellValueFactory(cellData -> mapper.apply(cellData.getValue()));
		col.setPrefWidth(size);

		return col;
	}

	public class Person {
		private final StringProperty firstName = new SimpleStringProperty(this, "firstName");
		private final StringProperty lastName = new SimpleStringProperty(this, "lastName");
		private final StringProperty email = new SimpleStringProperty(this, "email");

		public Person(String firstName, String lastName, String email) {
			this.firstName.set(firstName);
			this.lastName.set(lastName);
			this.email.set(email);
		}

		public final StringProperty firstNameProperty() {
			return this.firstName;
		}

		public final String getFirstName() {
			return this.firstNameProperty().get();
		}

		public final void setFirstName(final String firstName) {
			this.firstNameProperty().set(firstName);
		}

		public final StringProperty lastNameProperty() {
			return this.lastName;
		}

		public final String getLastName() {
			return this.lastNameProperty().get();
		}

		public final void setLastName(final String lastName) {
			this.lastNameProperty().set(lastName);
		}

		public final StringProperty emailProperty() {
			return this.email;
		}

		public final String getEmail() {
			return this.emailProperty().get();
		}

		public final void setEmail(final String email) {
			this.emailProperty().set(email);
		}

	}

	public static void main(String[] args) {
		launch(args);
	}
}

 

Draggable-JavaFX-TreeView:对JavaFX中TreeView的CellFactory的拖放实现,用于包含子项的项和包含子项的项 Draggable-JavaFX-TreeView 对JavaFX中TreeView的CellFactory的拖放实现,用于项目和包含子项的项目(文件夹)。 添加为依赖项: 该项目已发布到Maven Central( ),可以使用以下依赖项进行添加: <dependency> <groupId>me.davidthaler</groupId> <artifactId>draggablejfxtreeview</artifactId> <version>1.0</version> </dependency> 立即下载

相关推荐

可以拖拽的tableView例子

一个简单的可以拖拽的UITableView

JavaFX技巧22:“自动调整大小(树)”表列

JavaFX “缺少功能调查”中提到的“缺少功能”的第一件事就是能够自动调整表/树表中的列大小。 没错,没有公共API是正确的,但是当您密切关注时,您会注意到JavaFX内部一定有执行此操作的代码,因为用户可以通过双击分隔线自动调整列的大小。在该列与右侧的下一列之间。 但是像大多数人一样,我觉得这对我的代码还不够好。 我想要一个FlexGanttFX的API,该API允许用户自动调整甘特...

最佳 Java 编程 538

ROG幻16Air新机避坑:Ubuntu 22.04下NVIDIA驱动、CUDA与Isaac Gym的兼容性实战

本文详细记录了在ROG幻16Air新机上安装Ubuntu 22.04,并成功配置NVIDIA驱动、CUDA与Isaac Gym强化学习开发环境的完整实战过程。针对官方文档未明确支持Ubuntu 22.04的挑战,文章提供了从驱动安装、CUDA版本选择、Python虚拟环境搭建到Isaac Gym兼容性调试的一站式解决方案,帮助开发者在新硬件上高效部署机器人仿真与训练平台。

weixin_28419039的博客 221

javafx实现自定义的数据拖拽

【代码】javafx实现自定义的数据拖拽。

silk_java的专栏 648

23.501中英对照(46):5QI到Qos特征的映射

注4:对于UPF终止N6与5G-AN之间的延迟,CN PDB的静态值为1毫秒,应从给定的PDB中减去该值以得出适用于无线接口的分组延迟预算。注5:对于UPF终止N6与5G-AN之间的延迟,CN PDB的静态值为2毫秒,应从给定的PDB中减去该值以得出适用于无线接口的分组延迟预算。注6:对于UPF终止N6与5G-AN之间的延迟,CN PDB的静态值为5毫秒,应从给定的PDB中减去该值以得出适用于无线接口的分组延迟预算。注:建议为任何新的非GBR资源类型的标准化5QI分配小于64的值。

51学通信的博客 1296

(MIUI)小米手机录音文件深度寻踪:从系统缓存到数据目录的实战解析

本文深入解析了MIUI系统中录音文件丢失的常见原因及解决方案,包括系统升级兼容性问题、应用缓存机制异常和存储权限变动。通过实战操作指南,详细介绍了如何从系统目录、数据库层面恢复录音文件,并提供了预防措施和自动化备份方案,帮助小米手机用户有效找回重要录音数据。

weixin_42699679的博客 518

java自定义排序策略_JavaFX TableView排序策略

对于你的情况,你可以尝试这样的事情:table.sortPolicyProperty().set(t -> {Comparator comparator = (r1, r2)-> r1 == rowTotal ? 1 //rowTotal at the bottom: r2 == rowTotal ? -1 //rowTotal at the bottom: t.getComparat...

weixin_29801567的博客 860

基于Ultralytics RT-DETR的工业缺陷检测实战:从NEU-DET数据集准备到模型部署

本文详细介绍了基于Ultralytics框架和RT-DETR模型进行工业缺陷检测的完整实战流程。内容涵盖从NEU-DET数据集准备、YOLO格式转换、环境配置,到模型训练、关键参数调优、性能验证与可视化分析,最后提供了ONNX等格式的模型部署方案,为工业质检场景提供了一套高效、可落地的AI解决方案。

weixin_29168393的博客 339

JavaFx-TableView

效果 代码 //表格视图 public class TableViewSample extends Application { /* TableView类内置提供了对列数据排序的功能。用户可以通过单击列头来改变数据顺序。 第一次点击将会升序排列,第二次会降序排列,第三次则会取消对该列排序。 默认情况下不会对任何一列进行排序。 */ private final TableView<Person> table = new TableView<>(); //

shengjk1的博客 1018

用GraphPad Prism直出单细胞亚群堆叠柱状图

用GraphPad Prism直出单细胞亚群堆叠柱状图

fivehuge的博客 4197

T507 buildroot linux4.9之RLT8211F 1000M以太网开发调试

调试T507的gmac,解决该RTL8211F 1000m以太网中调试遇到的问题

目前从事linux驱动开发,多交流多学习吧 688

javafx 实现两个TableView的横向滚动条同步拖动

javafx 实现两个TableView的横向滚动条同步拖动

qq_30873869的博客 1039

Android插件化和组件化面试题及参考答案

如何使用 Gradle 来管理 Android 项目中的模块依赖? Gradle 是一个强大的构建工具,在 Android 项目中管理模块依赖主要通过以下方式。 首先,在项目的根目录下的 build.gradle 文件中,需要配置仓库。一般会添加如 Google 的 Maven 仓库和 JCenter 等,例如在 repositories 部分添加: repositories { google() jcenter() } 对于模块依赖,在每个模块(例如 app

大模型大数据攻城狮的专栏 1185

JavaFX:禁止TableView的列拖拽功能

JavaFX中,TableView的列在默认情况下是可拖拽的,但是却没有方法去禁止这个拖拽功能。 在网上看过一段代码,大致功能是: 1. 监听TableView中列变化; 2. 列顺序发生改变,重置为原始顺序。 [java]view plaincopy tblView.getColumns().addListener(newListCha...

weixin_30657999的博客 600

【2023校招】网易雷火_研发岗_笔试题解

几个月没写题,果然水平不在线了hh,AK更难实现喽,当天只AK了疯狂游戏; 题目描述和数据等尽量多的CV到了DEVC里,可能不够细节和准确; 下面进入正题,分享我们此次笔试的题目描述和代码设计吧~.........

米莱虾 4544

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

五

五 81.自定义拖拽数据类型 82.ListView组件,简单介绍和基本使用方式 83.ListView补充上节课的知识点,显示转换对象类型的数据,四种可编辑样式 84.ListView的CheckBoxListCell简单使用 85.ListView关于五种数据类型的加载和更新删除等操作,很重要的知识点 86.LIstView,自定义选项样式,自定义可编辑状态的样式 87.ListView搜索列表和排序列表 88.ListView鼠标悬空选择效果,和拖拽选项排序效果,鼠标滚轮事件 89.Text类和Fo

Major_S的博客 302

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Spring Boot安全扫描工具开发:从原理到GUI实现

在应用安全领域,信息泄露是常见风险,尤其对于Spring Boot这类流行框架。其核心原理在于应用可能无意间暴露了Actuator端点或管理接口,这些端点若配置不当,会直接返回数据库连接串、API密钥等敏感数据。从技术价值看,自动化扫描工具能显著提升安全测试效率,相比手动测试更全面、更快速。这类工具通常基于HTTP协议,通过并发请求探测预定义路径,并结合响应状态码、内容匹配等规则判断风险。在实际工程中,Java因其生态优势常被选为核心开发语言,结合HttpClient实现网络请求,利用Completable

weixin_33720078的博客 400

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java实现拖动排序算法

要移动的对象下标:移动至的下标位置。

Java技术实践 975

JavaFX ListView单元格的鼠标悬停特效以及拖拉排序

要实现ListView单元格的鼠标悬停特效同样要使用Listview.setCellFactory(Callback<ListView, ListCell> value)工厂方法,新建一个ListCell编写ListCell.hoverProperty().addListener(ChangeListener<? super Boolean> listener)实现鼠标悬听...

qq_43449112的博客 1732

JavaFX控件——TableView

很多JavaFX SDK API种的类为在表格表单中呈现数据。 本文将接受如何添加一个表格表、数据填充、编辑表格行等格组件 JavaFx的基本操作。

Hanniel的博客 1万+

[JAVAFX学习]TableView基本用法

JAVAFX中TableView的使用:占位符、单元格工厂、选择模式、排序、添加行、添加列、序号列

Raygo的博客 4122

JavaFx TableView疑难详解

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33693070的博客 648

JavaFX之Drag And Drop拖放操作

声明: 本博客文章原创类别的均为个人原创,版权所有。转载请注明出处: http://blog.youkuaiyun.com/ml3947(看到有网站直接copy不加链接,当然我的个人博客文章目前都是从我的优快云博客转移上去的)。 大家好,新的JavaFX的教程又到来了。 是不是很多程序都有拖动文件到程序里的功能?有没有感觉拖放操作很cool?我们的JavaFX当然也支持这样的操作。 在...

SunRaIN_的专栏 1564

Qt可拖拽排序表格(解决滚动条不兼容问题,类似QQ好友分组排序)

【代码】Qt可拖拽排序表格(解决滚动条不兼容问题,类似QQ好友分组排序)

木风可可的博客 4365
上一篇: java 提取应用程序图标,根据exe路径提取图标
下一篇: C# 提取应用程序图标,根据exe路径提取图标
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值