JavaFX 之窗口拖动(三)
一、问题场景
在上一篇中,我们将窗口的默认标题栏隐藏从而导致鼠标点击窗体无法进行拖动。
二、解决思路
给组件添加鼠标按下事件监听器和鼠标拖动事件监听器。
三、代码实现
/**
* 程序入口
* @author Light
*/
public class JavaFXTest extends Application { @Override
public void start(Stage stage) { stage.initStyle(StageStyle.TRANSPARENT); VBox root = new VBox();
root.setId("root");
// 引入样式
root.getStylesheets().add(JavaFXTest.class.getResource("/resources/style.css").toString()); //顶部
VBox top = new VBox();
top.setId("top");
top.setPrefSize(300,26);
// 标题栏
AnchorPane title = new AnchorPane();
Label close = new Label();
close.setPrefWidth(33);
close.setPrefHeight(26);
close.setId("winClose");//winClose css样式Id
title.getChildren().add(close);
AnchorPane.setRightAnchor(close, 0.0);
AnchorPane.setTopAnchor(close, 5.0);
top.getChildren().add(title); // 内容
VBox content = new VBox();
content.setPrefWidth(300);
content.setMinHeight(200);
// 组装
root.getChildren().addAll(top, content);
Scene scene = new Scene(root);
stage.setScene(scene);
// 拖动监听器
DragUtil.addDragListener(stage, top);
// 显示
stage.show();
} /**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
} }
/**
* 工具类
* @author Light
*/
public class DragUtil {
public static void addDragListener(Stage stage,Node root) {
new DragListener(stage).enableDrag(root);
}
}
/**
* 拖拽监听器
* @author Light
*/
public class DragListener implements EventHandler<MouseEvent> { private double xOffset = 0;
private double yOffset = 0;
private final Stage stage; public DragListener(Stage stage) {
this.stage = stage;
} @Override
public void handle(MouseEvent event) {
event.consume();
if (event.getEventType() == MouseEvent.MOUSE_PRESSED) {
xOffset = event.getSceneX();
yOffset = event.getSceneY();
} else if (event.getEventType() == MouseEvent.MOUSE_DRAGGED) {
stage.setX(event.getScreenX() - xOffset);
if(event.getScreenY() - yOffset < 0) {
stage.setY(0);
}else {
stage.setY(event.getScreenY() - yOffset);
}
}
} public void enableDrag(Node node) {
node.setOnMousePressed(this);
node.setOnMouseDragged(this);
}
}
效果演示图:

JavaFX 之窗口拖动(三)的更多相关文章
- Duilib改进窗口拖动,使整个窗口都能拖动两种方法(转载)
转载:http://www.cnblogs.com/XiHua/articles/3490490.html 转载:http://blog.csdn.net/lostspeed/article/deta ...
- 29.QT-自定义窗口拖动、自定义QToolButton/QPushButton开关按钮、界面阴影,声音等总结
自定义窗口及拖动 1.自定义无边框窗口时,需要将窗口标志设为: Qt::FramelessWindowHint |Qt::WindowSystemMenuHint | Qt::WindowMinMax ...
- JavaFX 之窗口跳转(一)
一.前言 笔者此处不讲JavaFX的基础API,只针对笔者工作时遇到的问题进行记录与总结. 零基础的网友可以访问 http://www.javafxchina.net/blog/docs/tutori ...
- 利用SendMessage实现窗口拖动
原文:利用SendMessage实现窗口拖动 利用SendMessage实现窗口拖动 周银辉 想想以前用跟踪鼠标位 ...
- duilib进阶教程 -- 改进窗口拖动 (12)
现在大家应该都知道caption="0,0,0,32",是指示标题栏区了吧,如果想要整个窗口都能拖动呢? 那直接把高度改成和窗口一样不就得了~O(∩_∩)O~ 嗯,这样是可以,比如 ...
- Winform 窗口拖动
把窗口边框去掉后,窗口拖动问题: private Point mouseOffset; //记录鼠标指针的坐标 private bool isMouseDown = false; //记录鼠标按键是否 ...
- python3 打开页面后多窗口处理三种方法
多窗口处理三种方法 导包,实例化浏览器from selenium import webdriver fx=webdriver.Firefox()方法一fx.switch_to.window(fx.wi ...
- 基于jQuery页面窗口拖动预览效果
今天给大家分享一款基于Query页面窗口拖动预览效果.这是一款基于jQuery+HTML5实现的模拟页面窗口显示拖动窗口预览特效.这款实例适用浏览器:IE8.360.FireFox.Chrome.Sa ...
- macOS Sierra 触控板无法三指拖移窗口、三指选中文字的解决方法
问题:升级macOS Sierra新系统后,发现触摸板无法进行三指拖移窗口.三指选定文字的操作.在“系统偏好设置”——“触控板”内无法进行设置. 解决:“系统偏好设置”——“辅助功能”——“鼠标与触控 ...
随机推荐
- Docker 生态
Docker 和容器技术的发展可谓是日新月异,本文试图以全局的视角来梳理一下 docker 目前的生态圈.既然是概览,所以不会涉及具体的技术细节. Docker 自从发布以来发生了很多的变化,并且有些 ...
- OpenCL双边滤波实现美颜功能
OpenCL是一个并行异构计算的框架,包括intel,AMD,英伟达等等许多厂家都有对它的支持,不过英伟达只到1.2版本,主要发展自己的CUDA去了.虽然没有用过CUDA,但个人感觉CUDA比Open ...
- struts.xml路径修改后的web配置
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_9" ...
- vue router使用query和params传参的使用
传参是前端经常需要用的一个操作,很多场景都会需要用到上个页面的参数,本文将会详细介绍vue router 是如何进行传参的,以及一些小细节问题.有需要的朋友可以做一下参考,希望可以帮到大家. Vue ...
- Rsync安装和配置
一.Rsync简介 1.1什么是Rsync Rsync是一款快速的,开源的,多功能的,可以实现全量和增量的远程和本地的数据同步和数据备份的工具. 全量的概念是:全部备份. 增量的概念是:差异化备份.对 ...
- CentOS 6.5 升级内核到 3.10.28
本文适用于CentOS 6.4, CentOS 6.5,亲测可行,估计也适用于其他Linux发行版. 1. 准备工作 1.1 下载源码包 Linux内核版本有两种:稳定版和开发版 ,Linux内核版本 ...
- hdu 6063 RXD and math(快速幂)
RXD and math Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)To ...
- spring --解析自定义注解SpringAOP(配合@Aspect)
1:首先,声明自定义注解 @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD}) public @interface DtT ...
- LeetCode OJ:Reverse Nodes in k-Group(K个K个的分割节点)
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...
- LeetCode OJ:Longest Substring Without Repeating Characters(最长无重复字符子串)
Given a string, find the length of the longest substring without repeating characters. For example, ...