javafx实现自定义的数据拖拽

利用JavaFx开发RIA桌面应用-文件拖拽 给JavaFx中的TextField控件添加文件拖拽功能,即实现将文件或文件夹拖拽至TeuxtField中,TextField显示出相应的路径地址。 阅读详情

效果

请添加图片描述

代码

package cn.juhe.zjsb.test;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.SnapshotParameters;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.scene.input.*;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

import java.io.Serializable;


public class DragAndDropPersonExample extends Application {
    public DataFormat dataFormat = new DataFormat("data/person");
    VBox getVBox() {
        VBox vBox = new VBox(10);
        vBox.setPrefWidth(300);
        vBox.setPrefHeight(400);
        vBox.setStyle("-fx-border-color: #ff0000");
        return vBox;
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        AnchorPane anchorPane = new AnchorPane();
        Scene scene = new Scene(anchorPane, 900, 900);
        VBox vBox = getVBox();
        VBox vBoxView = getVBox();
        Person person = new Person("小倩老师", "18", "file:/Users/java0904/zhengjianshibie/src/main/resources/cn/juhe/zjsb/img/laoshi.jpeg");
        Button infoBtn = new Button("个人详情");
        infoBtn.prefWidthProperty().bind(vBox.widthProperty());
        TextField nameField = new TextField();
        TextField ageField = new TextField();
        ImageView imageView = new ImageView();
        TextField nameFieldView = new TextField(person.getName());
        TextField ageFieldView = new TextField(person.getAge());
        ImageView imageViewView = new ImageView(new Image(person.getPhoto()));
        imageView.setPreserveRatio(true);
        imageView.setFitWidth(300);
        imageViewView.setPreserveRatio(true);
        imageViewView.setFitWidth(300);
        vBoxView.getChildren().addAll(nameFieldView,ageFieldView,imageViewView);
        vBox.getChildren().addAll(infoBtn,nameField,ageField,imageView);
        Button personBtn = new Button(person.getName());
        personBtn.setOnDragDetected(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent mouseEvent) {
                //获取拖动板
                Dragboard dragboard = personBtn.startDragAndDrop(TransferMode.MOVE);
                //创建剪切板
                ClipboardContent clipboardContent = new ClipboardContent();
                //设置剪切板的数据格式与数据,dataFormat是自己定义的,data/person是随便写的
                clipboardContent.put(dataFormat,person);
                anchorPane.getChildren().add(vBoxView);
                WritableImage writableImage = new WritableImage(200,300);
                vBoxView.snapshot(new SnapshotParameters(),writableImage);
                anchorPane.getChildren().remove(vBoxView);
                dragboard.setDragView(writableImage);
                //设置拖动板的内容
                dragboard.setContent(clipboardContent);
            }
        });
        vBox.setOnDragOver(new EventHandler<DragEvent>() {
            @Override
            public void handle(DragEvent dragEvent) {
                dragEvent.acceptTransferModes(TransferMode.MOVE);
                Object content = dragEvent.getDragboard().getContent(dataFormat);
                Person p = (Person) content;
                nameField.setText(p.getName());
                ageField.setText(p.getAge());
                System.out.println(p.getPhoto());
                imageView.setImage(new Image(p.getPhoto()));
            }
        });
        anchorPane.getChildren().addAll(personBtn, vBox);
        AnchorPane.setLeftAnchor(personBtn, 100.0);
        AnchorPane.setTopAnchor(personBtn, 100.0);
        AnchorPane.setLeftAnchor(vBox, 300.0);
        AnchorPane.setTopAnchor(vBox, 200.0);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Drag and Drop Image Example");
        primaryStage.show();

    }

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


class Person implements Serializable {
    String name;
    String age;
    String photo;

    public Person(String name, String age, String photo) {
        this.age = age;
        this.name = name;
        this.photo = photo;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getPhoto() {
        return photo;
    }

    public void setPhoto(String photo) {
        this.photo = photo;
    }
}

SceneBuilder实战:从拖拽到交互,解锁JavaFX高效开发新范式 本文详细介绍了SceneBuilder在JavaFX开发中的高效应用,通过拖拽式界面设计和FXML实现界面与代码分离,大幅提升开发效率。文章涵盖环境配置、实战案例、Controller集成及企业级开发实践,帮助开发者快速掌握JavaFX高效开发新范式。 阅读详情

相关推荐

JavaFX+Jfoenix 学习笔记(序)--引言And软件截图

文章目录(更新中): JavaFX+Jfoenix 学习笔记(序)--引言And软件截图 JavaFX+Jfoenix 学习笔记(一)--环境搭建及多款Hello Word演示 JavaFX+Jfoenix 学习笔记(二)--Stage和Scene JavaFX+Jfoenix 学习笔记(三)--TableView数据表格 JavaFX+Jfoenix 学习笔记(四)--MenuBar菜...

足信方为的博客 1万+

linux下修改文件查看样式(日期/文件大小)

linux下修改文件查看样式(日期/文件大小)

weixin_45203607的博客 1195

138. JavaFX 控件使用

JavaFX控件是用于构建交互式GUI的可视化组件,主要分为基础控件(如Button、Label)、选择控件(ComboBox、CheckBox)、布局控件(HBox、VBox)和高级控件(TableView、WebView)。控件通过继承体系(Node→Parent→Region→Control)实现功能扩展,具有可定制样式、事件响应和布局适配等特性。典型应用包括表单输入、数据展示和图表可视化,需注意线程安全和CSS优先级等开发要点。

weixin_43484713的博客 1203

javafx实现图片缩放和拖动

本文使用的是 jdk8 的 javafx 运行实现的图片缩放操作效果。

西凉的悲伤博客 2201

JavaFX布局-TabPane

TabPane管理一批Tab,可以关闭、拖拽、展示位置

ceclar123的专栏 1170

JavaFx在测试工具中的快速应用

文章目录前言一、JavaFx是什么?二、使用心得官网地址优势小作品展示 前言 测试过程中往往需要做些小工具方便测试执行或者更加轻松的获取一些数据。近几年一直在做互联网行业,大家都倾向于spring相应的平台或者接口获取数据,然后手工整理,总体评价其实很不经济。因此想到之前做桌面软件应用的时候,经常使用qt做一些桌面小软件,方便快捷而且美观友好的处理一些测试难题。今后会陆续发表多篇关于JavaFx在测试工具方面的实践,讲真的:这是一款不可小觑的框架应用!!! 一、JavaFx是什么? 官方评价:Java

sinat_20998965的博客 4041

javaFX TableView实现拖拽排序

网上资料比较少,找了好长时间,在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

南鹏飞 技术博客 1258

javaFx实现放大镜效果——圆形、矩形、三角形放大镜,拖动调整放大镜大小,设置放大倍数

javaFx实现放大镜效果——圆形、矩形、三角形放大镜,拖动调整放大镜大小,设置放大倍数

c1007857613的专栏 3641

JavaFX —— 拖拽结点

在学校里复习完数据结构的树结构后,想使用 JavaFX 把树给画出来,其中树的结点我希望做成可拖拽,这里简单记录下 JavaFX 的鼠标拖拽。 拖拽是 GUI 中常见的用户交互,经常通过将鼠标指针变为手势来提醒用户某个结点可点击: ) 而当用户点击鼠标(准确来说是指按压鼠标不放)时,鼠标指针将变为十字来提醒用户该结点可拖拽: 上诉两种鼠标指针变化都很简单,只要在相应的事件处理器中进行设置即可: ...

Virjid的博客 1745

javafx实现量角器效果,可拖动和旋转

本篇文章主要是在javafx中实现了量角器的绘制,量角器我们在生活和学习中用的比较多的一个工具,通过该量角器的实现,我们可以很方便的进行多角度的测量。本程序适用于javafx图形绘制的学习以及一些白板软件中数学工具功能的制作。

c1007857613的专栏 3070

Java实现鼠标拖拽功能教程与代码.zip

在当今的用户界面设计中,鼠标拖拽是一种常见的交互方式,它允许用户通过拖动鼠标来移动界面上的对象。Java作为一种成熟的编程语言,提供了丰富的API来实现鼠标拖拽功能,适用于Swing和JavaFX这两种主要的图形用户界面工具包。在开始深入探讨如何使用Java实现鼠标拖拽之前,我们需要了解其基本概念、原理以及在不同框架中的实现差异。鼠标拖拽操作是一种直观的用户交互方式,用户可以通过鼠标选中界面上的一个或多个对象,然后在屏幕上拖动到新位置。

weixin_36299472的博客 353

java 点击拖拽脚本_JavaFX实现拖拽结点效果

在学校里复习完数据结构的树结构后,想使用 JavaFX 把树给画出来,其中树的结点我希望做成可拖拽,这里简单记录下 JavaFX 的鼠标拖拽。拖拽是 GUI 中常见的用户交互,经常通过将鼠标指针变为手势来提醒用户某个结点可点击:而当用户点击鼠标(准确来说是指按压鼠标不放)时,鼠标指针将变为十字来提醒用户该结点可拖拽:上诉两种鼠标指针变化都很简单,只要在相应的事件处理器中进行设置即可:public ...

weixin_35853083的博客 636

【补充:脑电绘图教程 2】如何手动去除ICA伪迹分量

ICA可以将脑电信号分解为多个IC分量,由每个分量的平均功率地形图可以看出哪些分量属于伪迹,去除伪迹分量后,即可得到“干净”的脑电信号。本教程主要总结如何人工识别出ICA伪迹分量,不涉及ICA的原理讲解。本教程的主要知识来源是ICLabel官网ICLabel致力于自动识别IC分量属于哪种伪迹,并标记伪迹占比,可以在eeglabel中很方便地使用。ICLabel给出了几种常见伪迹的特点,本教程主要是根据ICLabel给出伪迹特点,对自己的数据集手动去除伪迹,以更深入了解自己数据集的质量和伪迹特点。

qq_40735196的博客 4232

java实现坐标图进行拖拉拽放,JavaFX实现拖拽结点效果

搜索热词在学校里复习完数据结构的树结构后,想使用 JavaFX 把树给画出来,其中树的结点我希望做成可拖拽,这里简单记录下 JavaFX 的鼠标拖拽。拖拽是 GUI 中常见的用户交互,经常通过将鼠标指针变为手势来提醒用户某个结点可点击:而当用户点击鼠标(准确来说是指按压鼠标不放)时,鼠标指针将变为十字来提醒用户该结点可拖拽:上诉两种鼠标指针变化都很简单,只要在相应的事件处理器中进行设置即可:pub...

weixin_33946174的博客 622

Cadence OrCAD: 层次化设计 Hierarchical Design

详细介绍OrCAD的原理图层次化设计方法。

Fantasy237的博客 1万+

Win10家庭版没有Hyper-V?教你一招轻松解决(含避坑指南)

本文详细介绍了在Win10家庭版中启用Hyper-V的完整实战指南。通过DISM工具链绕过系统版本限制,无需重装系统即可完整启用所有Hyper-V组件,适用于开发者测试多系统环境和安全隔离应用场景。文章包含详细操作步骤、常见问题解决方案及性能优化配置,帮助用户轻松解决Win10家庭版没有Hyper-V的问题。

weixin_29239661的博客 495

JavaFX 入门

1、JavaFX应用的程序基本结构 窗口(stage):窗口里面可以设置场景,但是一次只能显示一个场景。 场景(scene):场景可以添加UI组件图的树形结构。 根节点(parent):根节点设置为一个布局,放置不同的节点(组件)。可以在根节点嵌套放置根节点。 2、JavaFX应用的Application 1 3、JavaFX应用的Stage 1 4、JavaFX应用的Scene 1 5、Node UI控件的通用属性 1 6、UI控件的属性绑定和属性监听 1 7、JavaFX

m0_59627352的博客 3万+

最新首发——boss直聘爬虫

本文介绍了使用Python开发Boss直聘爬虫的核心思路和技术要点。通过模拟浏览器访问搜索页面获取Cookie,然后构建API请求获取职位数据。关键步骤包括:1)使用DrissionPage库初始化浏览器;2)模拟用户浏览行为获取必要参数;3)设置完整的请求头信息;4)通过POST请求获取JSON格式的职位数据。文章提供了详细的代码实现,包括浏览器模拟、API请求构建、数据处理等核心功能模块,并强调了最新版接口改为POST访问的特点。该爬虫可自动翻页采集数据并保存为Excel文件,适用于安全实习等职位信息的

2301_79735033的博客 3317

java实现坐标图进行拖拉拽放_JavaFX实现拖拽结点效果

在学校里复习完数据结构的树结构后,想使用 JavaFX 把树给画出来,其中树的结点我希望做成可拖拽,这里简单记录下 JavaFX 的鼠标拖拽。拖拽是 GUI 中常见的用户交互,经常通过将鼠标指针变为手势来提醒用户某个结点可点击:而当用户点击鼠标(准确来说是指按压鼠标不放)时,鼠标指针将变为十字来提醒用户该结点可拖拽:上诉两种鼠标指针变化都很简单,只要在相应的事件处理器中进行设置即可:public ...

weixin_42641741的博客 407

智驾车载以太网(18)-switch之报文转发和vlan处理流程

本文详细解析了交换机中报文处理和转发流程:1)通过目标MAC查找转发端口,源MAC创建ARL条目;2)VLAN标签处理包括tagged/untagged帧判断、默认VID标记等5种处理方式;3)完整转发流程包含CRC校验、IQ封装、VLAN和ARL表查询、端口向量计算及优先级队列发送。文中还涉及TCAM修改VLAN、802.1q多种模式处理等细节,省略了流量控制等次要流程。该过程实现了基于MAC和VLAN的高效二层交换。

mitugaoyang1993的博客 43

国科大学习资料--图像处理(彭思龙、杨戈)--2020年期末考试题解析(学长整理分析)

在对20年卷子分析前,先看看19年卷子的解析(后面有20年的变化,由于从核心课调整到了普及课,20年的卷子相对简单,但是还是有很多细节) 解析:(字写的不好别嫌弃!!!!) 20年的卷子 第一题:和19年基本一致,但是加了高斯核计算费用,要算一个节省计算成本比率,所以去多看看PPT 第二题:和19年基本一致,加了证明两个高斯卷积仍然是高斯卷积,相当于19年题2和3结合 第三题:采样定理,和19年基本一致,但要注意加了证明 第四题:考了形态学提取图像边界 第五题:直方图,和19年一

无名何许人的博客 4364

javafx开发总结

javafx开发模式简要介绍

yeshengxiaohuli的博客 3980

Ambari 3.0+BigTop 3.3集群部署实战

Ambari 3.0+BigTop 3.3集群部署

docsz的博客 609

javafx已经没多少用了_使用springBoot接管JavaFX

原因为什么要在spring的环境中使用JavaFX呢?主要是代码容易乱,如果没有框架的话,当然,其实也不是绝对会乱,不过至少目前没有让他一定不会乱的自信,所以我想在spring的环境下使用JavaFX,而且spring的功能非常方便,像是注入和扫描什么的。该怎么办呢?我搜到了一个整合javaFX的工程,叫做SpringBootJavaFXSupport,这个工程还是Springboot的,这当然更...

weixin_39868592的博客 5871

【史上最全面esp32教程】网络篇和tcp/ip的使用

ESP32史上最全面wifi和tcp/ip连接及示例程序

m0_62599305的博客 9522

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: javafx拖拽图片实现
下一篇: 奇妙的异或
micro_cloud_fly
博客等级 码龄12年 321粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

micro_cloud_fly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值