【JavaFx基础】在画布中画线框
创始人
2025-05-31 00:00:22

一、需求描述

JavaFx项目中,实现用画布控件在画布中画线框

二、代码参考

package com.example.fxtest2;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.scene.ImageCursor;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Button;
import javafx.scene.control.Control;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.scene.input.Dragboard;
import javafx.scene.input.KeyCode;
import javafx.scene.input.TransferMode;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.stage.Modality;
import javafx.stage.Stage;
import java.io.IOException;
import java.net.URL;
import java.util.Objects;public class HelloApplication extends Application {public static final double WIDTH=600,HEIGHT=500;private Canvas canvas=new Canvas(WIDTH,HEIGHT);private GraphicsContext graphicsContext=canvas.getGraphicsContext2D();private double x;//鼠标x点private double y;//鼠标y点private WritableImage image=null;//快照,保持前面所画框图@Overridepublic void start(Stage stage) throws IOException {canvas.setLayoutX(0);canvas.setLayoutY(0);//graphicsContext.setLineWidth(10);//画框宽,10个像素//graphicsContext.setStroke(Color.GREEN);//画框边框颜色//graphicsContext.strokeRect(30,30,300,300);//画框大小//graphicsContext.setFill(Color.RED);//填充色// graphicsContext.fillOval(30,30,300,300);//填充圆canvas.setOnMousePressed(event->{//鼠标落点位置x=event.getX();y=event.getY();});canvas.setOnMouseDragged(event->{//在绘图区绘制框图double startx=x;double starty=y;double endx=event.getX();//获取鼠标移动位置的xdouble endy=event.getY();//获取鼠标移动位置的yif (endx{//快照,保持之前所画框图image=canvas.snapshot(null,null);});AnchorPane pane=new AnchorPane(canvas);Scene scene=new Scene(pane,800,600);stage.setScene(scene);//stage.setResizable(false);stage.setTitle("画图");stage.show();System.out.println("start()...");}@Overridepublic void init() throws Exception {super.init();System.out.println("init()...");//先调用}@Overridepublic void stop() throws Exception {super.stop();System.out.println("stop()...");//窗口关闭自动调用}public static void main(String[] args) {launch();}}

三、运行结果

技巧1、实现从下往上画图

if (endx

技巧2、清除不需要的线框

 graphicsContext.clearRect(0,0,WIDTH,HEIGHT);

技巧3、保存之前画的线框

canvas.setOnMouseReleased(event->{//快照,保持之前所画框图image=canvas.snapshot(null,null);});

 四、参考教程

https://www.bilibili.com/video/BV1Qf4y1F7Zv?p=14&vd_source=841fee104972680a6cac4dbdbf144b50

相关内容

热门资讯

“代抢票”背后的灰色产业链 抢... “演出经济”蓬勃发展,举办各类演唱会、音乐节等成为各地提升旅游收入、提振消费的“新密码”,热门艺人演...
Vue入门+DRF项目实战-0... 1. 引入Django REST framework 在本章中,我们要大家介绍为什么学习Django...
「VScode」通过VScod... 前言 之前在git的版本管理上,我使用的是sourcetree,说实话...
油价继续下跌?欧佩克宣布将再度... 5月31日,欧佩克线上会议讨论7月增产事宜,同意41.1万桶/日的大规模增产计划。当前,国内化工产业...
在生产计划项目中使用甘特图的5... 在生产计划中,会不断接收很多的订单项目,这时候就需要能够合理安排时间、资...
NOA渗透率超5%?智能汽车赛... 从L2到高速NOA(导航辅助驾驶),再到城区NOA...
赴港上市再添“新军”,背后有茅... 近日,资本市场再度迎来新动态,两家新三板摘牌公司 —— 先通医药与华曦达先后迈向港交所递表,计划转道...
小小科技八年磨剑IPO 第一个... 《投资者网》张伟5月,汽车零部件生产商安徽省小小科技股份有限公司(下称“小小科技”或“公司”)披露了...
精测转2上市价格预测 精测转2基本信息转债名称:精测转2,评级:AA-ÿ...
欧佩克宣布,再度增产! 5月31日,欧佩克线上会议讨论7月增产事宜,同意41.1万桶/日的大规模增产计划。 据新华财经5月3...
js常用循环方式 let list = [{name:'张三',age:22},{name:'李四',age:...
nvmf代码分析 nvmf代码分析NVMf RPC接口文件1、创建RDMA Port监听2、创建NVMf链接nvmf_...
【微服务】—— Nacos设计... 文章目录一、简介Nacos起源Nacos 定位Nacos 优势二、Nacos 总体设计1࿰...
axios 请求其他服务器地址... 场景还原: Vue2项目中在生产环境调用其他服务器请求地址时候会在请求地址默认加上一串当前浏览器域...
一斤便宜10元还要降?榴莲可以... 最近几年,各种知名水果的价格可以说都出现了比较大的变化,特别是最近榴莲的价格持续下降,甚至还有降价的...
图解redis对象(hash ... 哈希表 哈希对象的编码可以是ziplist或者hashtable 条件 ·哈希对象保存的所有键值对的...
C语言再学习 -- C 标准库... 参看:C 标准库 - stdlib.h C 标准库 - 简介 stdlib .h 头...
欧佩克+连续第三次大幅增产,油... 欧佩克连续第三次大幅增产,这一举措无疑给油价带来了巨大压力,恐使其承压下跌。欧佩克作为全球重要的石油...
python 安装包相关命令 查看匹配的版本(大小写敏感)pip -V 查询已经安装了的包,并可以显示相应的版本&...
“2025外贸优品中华行——天... 中新网天津5月31日电 (记者 王君妍)31日,“2025外贸优品中华行—天津站”活动正式启幕。本次...
基于SpringBoot+Vu... 您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦。 &#...
网络技巧|远程桌面连接不上的多... 写在前面的话专注于网络各种技巧和实用工具的分享,都是日常工作中遇到的大大小小问题记录下...
IM即时通讯软件系统源码安卓、... demo软件园每日更新资源,请看到最后就能获取你想要的: ​ 1.《计算机系统结构:解...
讲解一下关于MySQL数据库的... 对于数据库,市面上有着不少的数据库!比如:Oracle数据...
3.1.2数据库体系结构:分布... 3.1.2数据库体系结构:分布式数据库、分布式数据库特点、分布式数据库结构、数据分片、...
学习streamlit-6 系列目录 学习streamlit-1,简介学习streamlit-2,s...
冒泡 VS 插入 VS 选择—... 文章目录什么样的“排序算法”更加优质?排序算法的执行效率排序算法的内存消耗排序算法的稳...
Python 多线程 文章目录一、简介1.1 多线程的特性1.2 GIL二、线程1.2 单线程1.3 多线程三、线程池3....
基于树莓派实现超声波测距 目录 一,写在前面 二,超声波模块说明 ● 模块基本参数 ● IO口接线...
Linux(网络基础---数据... 文章目录0. 前言1. 以太网的帧格式2. 再谈局域网原理3. 汇总整体通信流程,补全...