一、问题场景

  同样的,隐藏掉窗体的默认标题栏也会导致窗体大小自由拉伸功能的失效。

二、解决思路

  判断鼠标在窗体的位置,改变鼠标样式,给窗体组件添加拖拽事件监听器,根据鼠标移动位置改变窗体大小。

三、代码实现

/*** 程序入口* @author Light*/
public class JavaFXTest extends Application {@Overridepublic 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);// 添加窗体拉伸效果
        DrawUtil.addDrawFunc(stage, root);// 显示
        stage.show();}/*** @param args the command line arguments*/public static void main(String[] args) {launch(args);}}

/*** 拉伸工具类* @author Light*/
public class DrawUtil {//窗体拉伸属性private static boolean isRight;// 是否处于右边界调整窗口状态private static boolean isBottomRight;// 是否处于右下角调整窗口状态private static boolean isBottom;// 是否处于下边界调整窗口状态private final static int RESIZE_WIDTH = 5;// 判定是否为调整窗口状态的范围与边界距离private final static double MIN_WIDTH = 300;// 窗口最小宽度private final static double MIN_HEIGHT = 250;// 窗口最小高度public static void addDrawFunc(Stage stage,VBox root) {

root.setOnMouseMoved((MouseEvent event) -> {event.consume();double x = event.getSceneX();double y = event.getSceneY();double width = stage.getWidth();double height = stage.getHeight();Cursor cursorType = Cursor.DEFAULT;// 鼠标光标初始为默认类型,若未进入调整窗口状态,保持默认类型// 先将所有调整窗口状态重置isRight = isBottomRight = isBottom = false;if (y >= height - RESIZE_WIDTH) {if (x <= RESIZE_WIDTH) {// 左下角调整窗口状态
} else if (x >= width - RESIZE_WIDTH) {// 右下角调整窗口状态isBottomRight = true;cursorType = Cursor.SE_RESIZE;} else {// 下边界调整窗口状态isBottom = true;cursorType = Cursor.S_RESIZE;}} else if (x >= width - RESIZE_WIDTH) {// 右边界调整窗口状态isRight = true;cursorType = Cursor.E_RESIZE;}// 最后改变鼠标光标
            root.setCursor(cursorType);});root.setOnMouseDragged((MouseEvent event) -> {double x = event.getSceneX();double y = event.getSceneY();// 保存窗口改变后的x、y坐标和宽度、高度,用于预判是否会小于最小宽度、最小高度double nextX = stage.getX();double nextY = stage.getY();double nextWidth = stage.getWidth();double nextHeight = stage.getHeight();if (isRight || isBottomRight) {// 所有右边调整窗口状态nextWidth = x;}if (isBottomRight || isBottom) {// 所有下边调整窗口状态nextHeight = y;}if (nextWidth <= MIN_WIDTH) {// 如果窗口改变后的宽度小于最小宽度,则宽度调整到最小宽度nextWidth = MIN_WIDTH;}if (nextHeight <= MIN_HEIGHT) {// 如果窗口改变后的高度小于最小高度,则高度调整到最小高度nextHeight = MIN_HEIGHT;}// 最后统一改变窗口的x、y坐标和宽度、高度,可以防止刷新频繁出现的屏闪情况
            stage.setX(nextX);stage.setY(nextY);stage.setWidth(nextWidth);stage.setHeight(nextHeight);});}
}

效果演示图:

转载于:https://www.cnblogs.com/moonlightL/p/5982679.html

JavaFX 之窗口大小自由拉伸(四)相关推荐

  1. javaFX中解决填充(拉伸)问题

    1.margin设置实现 在项目过程中,遇到此问题,如图: 如果窗口缩小,HBox(左边的包含TitledPane那部分)看不到底部 如果窗口拉大,下面就出现空白,HBox高度没拉神 办法:对包含HB ...

  2. javafx游戏_JavaFX游戏(四连环)

    javafx游戏 这是我的第一个JavaFX游戏教程,也是我关于JavaFX面板的第一篇博客文章. 我仅用200几行代码就完成了这四款连接游戏,足以应付一个简单的游戏. 我在这里使用GridPane面 ...

  3. UIImage指定区域自由拉伸

    UIImage的 resizableImageWithCapInsets 可以指定需要拉伸的位置,这个方法很有用,可以减少长短按钮数量 转载于:https://www.cnblogs.com/lixi ...

  4. PyQt+Opencv-python多线程显示摄像头信息至QLabel,摄像头显示区域自由拉伸尺寸

    文章目录 前言 效果 资源下载 核心代码 编程思路 Camera.py Widget.py 前言   通过PyQt与Opencv-python实现多线程显示摄像头信息至QLabel,可以同时拉伸窗口, ...

  5. python调用按键精灵插件_按键精灵——如何实现办公自由(四)

    这是奔跑的键盘侠的第174篇文章 作者|我是奔跑的键盘侠 来源|奔跑的键盘侠(ID:runningkeyboardhero) 转载请联系授权(微信ID:ctwott) 前面写的几篇,不知道大家是否能看 ...

  6. JavaFX+NIO聊天室第四篇表情包

    设计思路 表情包是我们聊天中经常使用的功能,他的实现有两种办法.一种是使用Unicode中编码的700多种的表情字符.另外一种是使用图片来充当表情包. 1.从2010年开始,unicode对emoji ...

  7. JavaFX图片移动和拉伸

    功能实现:选择图片后,可以对图片进行移动和拉伸操作 代码如下: import javax.swing.*; import java.awt.*; import java.awt.event.Mouse ...

  8. JavaFX官方教程(十四)之转换,动画和视觉效果教程的源代码

    翻译自  转换,动画和视觉效果教程的源代码 下表列出了本文档中的演示应用程序及其关联的源代码文件. 教程 源代码 NetBeans项目文件 转换概述 Xylophone.java transforma ...

  9. Android 拉伸四周空白,中间内容不变的9Patch

    系统自带tools下的9Patch制作工具: 在左边,画线的视图里,Zoom到最大,分别在上方和左方的四个端点,各点一下,效果: 看看这四个点的位置: 二.补充一个箭头尾巴可自由拉伸的9patch示例 ...

最新文章

  1. 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | DexFile 构造函数及相关调用函数 | Android 源码中查找 native 函数 )
  2. 苹果公司的企业文化_百度、苹果、脉脉等互联网大厂的企业文化衫还能这么潮?...
  3. d - 数据结构实验之查找四:二分查找_【数据结构】资料
  4. 利用计算机打字教学设计,《争当打字小能手》教学设计方案
  5. 第 23 章 解释器模式
  6. android数字提示错误,从服务器接收数据时出现Android错误
  7. 一纸书来只为墙,让他三尺又何妨?长城万里今犹在,不见当年秦始皇。
  8. 解决ssh登录慢的问题
  9. DirectShow 在 VS2010 中开发环境的设置
  10. python对csv文件中的数据进行分类_python 数据处理 对csv文件进行数据处理
  11. angular同源策略禁止读取_Redis5.0数据淘汰策略详解(最新版本,面试常问)
  12. css html设计网页完整代码,htmlcss完整的网页代码
  13. ug建模文本怎么竖着_ug模型如何雕刻立体汉字
  14. php apache mpm,RHEL 7 Apache MPM 配置
  15. 7z解压crc错误_.7z解压文件末端错误 如何解压分卷压缩包 - 电脑故障 - 服务器之家...
  16. Win10无法开机提示自动修复无法修复你的电脑的有效解决方法
  17. 消金主流市场外的灰色地带:vivo应用商店聚集大量“伪现金贷平台”
  18. OBS直播软件-简介
  19. velocity模板引擎帮助
  20. Beef-xss安装及使用

热门文章

  1. UML从需求到实现---类图(2)
  2. mysql 修改max_connections
  3. 例题:青歌赛打分程序。去掉两个最高分,去掉两个最低分,再算平均分。主要学习数组和冒泡排序,什么情况下要定义数组...
  4. checkIP.sh
  5. OpenCV各个模块/各个文件夹的含义
  6. php开发用户登录模块,使用CodeIgniter开发用户登录注册模块
  7. ssh中linux 变颜色,linux – 如何通过SSH在Vim中启用颜色?
  8. 匹配月份_5月份轿车销量榜单出炉 雅阁热销18634辆
  9. WSAAsyncSelect模型
  10. Graph Embedding学习笔记(3):Graph Convolution Networks