首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Java Swing中拖动和绘制两点间的直线

在Java Swing中实现拖动和绘制两点间的直线,可以按照以下步骤进行:

  1. 创建一个继承自JPanel的自定义面板类,用于绘制直线和处理鼠标事件。
  2. 在自定义面板类中,定义两个Point对象,分别表示起始点和终点。
  3. 重写paintComponent方法,在方法中使用Graphics对象绘制直线,起始点和终点由前面定义的Point对象确定。
  4. 重写mousePressed、mouseDragged和mouseReleased方法,分别处理鼠标按下、拖动和释放事件。
    • 在mousePressed方法中,记录鼠标按下时的坐标作为起始点。
    • 在mouseDragged方法中,更新终点坐标,并调用repaint方法触发重绘。
    • 在mouseReleased方法中,将终点坐标固定,并调用repaint方法触发重绘。

下面是一个示例代码:

代码语言:txt
复制
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class LineDrawingPanel extends JPanel {
    private Point startPoint;
    private Point endPoint;

    public LineDrawingPanel() {
        // 添加鼠标事件监听器
        addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                startPoint = e.getPoint();
            }

            public void mouseReleased(MouseEvent e) {
                endPoint = e.getPoint();
                repaint();
            }
        });

        addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseDragged(MouseEvent e) {
                endPoint = e.getPoint();
                repaint();
            }
        });
    }

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (startPoint != null && endPoint != null) {
            g.drawLine(startPoint.x, startPoint.y, endPoint.x, endPoint.y);
        }
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Line Drawing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 400);

        LineDrawingPanel panel = new LineDrawingPanel();
        frame.add(panel);

        frame.setVisible(true);
    }
}

这段代码创建了一个窗口,并在窗口中绘制直线。通过鼠标按下、拖动和释放事件,可以在窗口中拖动绘制直线的起始点和终点。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云对象存储(COS)。

  • 腾讯云云服务器(CVM):提供弹性计算能力,可根据业务需求灵活选择配置,支持多种操作系统,适用于各类应用场景。详情请参考:腾讯云云服务器
  • 腾讯云对象存储(COS):提供安全、稳定、低成本的云端存储服务,适用于图片、音视频、文档等各类数据的存储和管理。详情请参考:腾讯云对象存储

以上是关于在Java Swing中拖动和绘制两点间直线的完善且全面的答案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java AWT 图形界面编程】在 Canvas 画布绘制箭头图形 ( 数据准备 | 几个关键计算公式 | 绘制箭头直线尾翼 )

文章目录 一、在 Canvas 画布绘制箭头图形 - 要点分析 1、数据准备 2、绘制直线 3、绘制箭头尾翼 二、代码示例 一、在 Canvas 画布绘制箭头图形 - 要点分析 ---- 1、数据准备...绘制箭头时 , 先设置一条直线起始点终止点 , 箭头绘制在该线段上 ; /** * 起始点 X, Y 坐标 * 终止点 X, Y 坐标 */ private...先把箭头附着直线 , 绘制出来 ; // 绘制直线 g.drawLine(startX, startY, endX, endY); 3、绘制箭头尾翼 首先 , 确定起始点终止点..., 在 x , y 轴上差值 ; // 计算起始点终止点在 x, y 方向差值 int deltaX = endX - startX; int deltaY..., 箭头位置 ; 尾翼起始点 arrowEndX, arrowEndY , 终止点需要根据角度计算出来 ; // 绘制箭头 尾翼 线段 , 直线角度 增减 45 度 , 即可获得尾翼角度

1.5K20

从弧到多线段:深入解析 Java 弧度转多线段算法!

在图形绘制,为了实现对弧线可视化表示,通常将其分割为一系列直线段。这个过程虽然是近似的,但对于大多数应用场景来说足够精确。...通过将弧转换为多线段,我们可以:提高绘制性能:大多数图形库硬件加速仅支持直线绘制,通过弧度转多线段可以充分利用图形加速优势。...这段 Java 代码演示了如何将弧线转换为多线段并在图形界面绘制出来。我们将逐步解析代码各个部分,并解释其功能。import java.awt.*;import javax.swing....*;这两行代码导入了 java.awt javax.swing类,这些类用于创建图形用户界面(GUI)绘制图形。...总结:这段代码展示了如何在 Java Swing 中将弧线转换为一系列直线段进行绘制。主要步骤包括计算线段角度间隔,迭代计算每个线段端点坐标,并使用 Graphics2D 绘制这些线段。

15822
  • CAD常用基本操作

    ,同一图形可在选中夹点连续进行多次不同比例缩放) 16 三维绘图中旋转:按住Shift并按住鼠标中键拖动 17 . dxf文件:表示在储存之后可以在其它三维软件打开文件 18 . dwt文件:图形样板文件...))有缘学习更多+谓ygd3076考证资料或关注桃报:奉献教育(店铺) 21 绘图中平行四边形法则(利用绘制四边形绘制某些图形) A两条直线卡一条直线绘制一个边直线后,通过平移获取另一边直线 B 在圆绘制相应长度弦...参照(R):参照首先选择“参照角”为需修改图形原有角度(通过指定两点操作)之后通过指定两点指定需要参照角度(默认第一点为旋转指定点,要重新定义输入P) 参照通过选择两点指定方向时应注意选择顺序不同导致参照角度不同...,可以从图中选取 B 角度值也可从图中选取,通过选取两点指定 C 环形阵列使用应该注意中心点选择,同时应注意构造环形阵列而且不旋转对象时,要避免意外结果,最好手动设置基点(详细菜单) D 环形阵列使用项目角度拾取应在中心点拾取之后...“全部”选项也按照指定总角度设置选定圆弧包含角。 D 动态(DY):打开动态拖动模式。通过拖动选定对象端点之一来改变其长度。其他端点保持不变 43 特性匹配 matchprop(MA)

    5.5K50

    服装打版界扛把子------ET自定义操作

    2.平行线 顾名思义,就是能够生成多条平行线段,我们可以先绘制一条线段,然后点击平行线,并右击鼠标然后左键拖动线段即可,如图: 3.等分线 我们可以使用等分线绘制一个雪花图案,如图: 我们首先绘制一条线段...,然后选中等分线图标并且输入省量,然后使用左键拖动即可,如图: 4.测量两点长度 这里我们需要使用两点测量这一功能,首先准备好两条线段,然后再点击两点测量,如图: 接着我们分别点击两条线段端点...5.旋转形状 有些时候我们需要将我们绘制图形方位进行旋转,这时我们可以借助旋转工具,如图: 选择旋转后,我们来框选需要旋转部分,如图: 选中后右击鼠标,然后选择一个旋转中心点,再用鼠标拖动旋转...7.省操作 1).单向省 可以在曲线上添加一条直线,选择图标工具菜单,然后找到单向省,如图: 然后在曲线上单击某一点,即可添加一条直线,如图: 2).枣弧省 就是可以绘制一个菱形,打开图标工具菜单...,选择打版图标工具,找到枣弧省,如图: 然后选中绘制枣弧省点,然后设置参数,如图: 3).省道 省道可以在线段上开辟一个特殊形状,如图: 打开省道后,我们只需要点击线段中心点,然后往下拉,即可生成一个指定省长省量省道

    1.1K00

    为什么都2022年了还有人用Java写GUI?

    何在Java创建形状 在Java创建2D几何图形第一步是向paint()函数提供Graphics参数。在paint(Graphics g)函数,您可以调用特定2D对象类。...以下部分描述了程序员如何使用Java绘制常见几何图形。 如何在Java画一条线 您可以使用drawLine(int x1,int y1,int x2,int y2)方法创建一条简单直线。...如何在Java绘制矩形 要在Java应用程序绘制矩形,需要使用drawRect(int x,int y,int width,int height)方法。...,将得到以下输出: 如何在Java绘制圆或曲线 JavadrawArc(int x,int y,int width,int height,int startAngle,int arcAngle)...例如: drawArc(45, 75, 150, 150, 0, 360) 如何在Java绘制椭圆 drawOval(int x,int y,int width,int height)方法允许您绘制绑定在给定宽度高度矩形椭圆

    1.9K30

    使用Raphael绘制流程图,自绘动态箭头,可拖动,有双击事件,纯前端,兼容各种浏览器

    svg来绘图 缘起 项目中不能使用Silverlight或者flash来解决绘图拖动问题 而且为了项目效果较好,要求拖动时候箭头能动态改变起点重点,别且箭头要改变方向 所以只能考虑JS了 效果...shapes[i].dblclick(function () { alert(this.id) }) } //存储节点顺序...,判断如果箭头已经被绘制过, 只要修改属性即可 如果没有被绘制过,则需要重新绘制 下面来看一下动态确定起点终点代码 function getStartEnd(obj1, obj2) {...M表示画笔起点移动到此点 L表示从某点绘制到某点,绘制直线 以上函数反馈结果意思是: 画笔从(x1,y1)开始绘制直线到(x2,y2),然后从(x2,y2)绘制直线到(x2a,y2a)然后画笔移动到(...x2,y2)然后从(x2,y2)绘制直线到(x2b,y2b) 在确定这几个点过程 用到了一些数学知识,具体原理也不多说了 喜欢朋友请点支持!

    1K30

    Java AWT 图形界面编程】使用小键盘按键缩放 Canvas 画布绘制背景图像 ( 键盘按键监听 + 绘制超大图像 + 鼠标拖动 + 鼠标滚轮缩放 + 以当前鼠标指针位置为缩放中心 示例 )

    】Canvas 绘制超大图片 ( 使用鼠标拖动查看全图 | 设置 JFrame 窗口自动关闭 | 获取并绘制图片 | 鼠标拖动计算位移 | 画布偏移 ) 博客 , 绘制了超大图像 , 可以使用鼠标拖动...; 在 【Java AWT 图形界面编程】使用鼠标滚轮放大缩小 Canvas 画布 ( 鼠标滚轮事件监听器 MouseWheelListener ) 博客 , 新增鼠标滚轮缩放画布示例 , 但是使用鼠标拖动时..., 拖动效果也随之缩放, 缩小画布后 , 移动鼠标 , 移动距离对应缩放效果也随之缩小 ; 在 【Java AWT 图形界面编程】使用鼠标滚轮放大缩小 Canvas 画布绘制背景图像 (...鼠标滚轮事件监听器 MouseWheelListener | Canvas 绘制图像并设置图像大小 ) 博客 , 使用缩放背景图像方式 , 实现缩放效果 , 并同时福袋鼠标指针拖拽效果 ; 本博客实现案例..., 在上面的基础上 , 添加了鼠标滚轮缩放中心点设置为当前鼠标中心点 ; 1、代码示例 import javax.swing.*; import java.awt.*; import java.awt.event

    1.8K20

    包教包会-贝塞尔曲线绘制原理与应用

    应用非常广泛,比如说PS钢笔工具所绘画曲线就是贝塞尔曲线,绘制动画运动轨迹等等,而最近一次想用到贝塞尔曲线是想做一个 路径动画 。...简介 在iOS开发中一般通过UIBezierPath来实现贝塞尔曲线绘制,平时一般使用绘制二阶三阶贝塞尔曲线方法。...而我们要做远超二三阶贝塞尔曲线,本文 iOS Demo在原理上实现了N阶贝塞尔曲线绘制,未使用任何相关API,纯手动绘制贝塞尔曲线,并且可以拖动滑块浏览贝塞尔曲线绘制过程。...本文 iOS Demo 实现以下功能: 实现功能 描述 绘制贝塞尔曲线 1、点击空白处设置贝塞尔曲线点 2、可以设置贝塞尔曲线阶数 3、播放贝塞尔曲线绘制过程 4、拖动滑块,自由查看绘制过程每一个瞬间...直线图表 即最简单两点连成直线直线图表 b. 曲线图表 曲线图表曲线全部由3阶贝塞尔曲线构成,整个曲线图不含任何棱角。

    1K10

    气球飘飘:用Java Swing创造令人心旷神怡视觉奇观

    Swing是一种纯Java技术,它不依赖于本地系统组件,而是自己绘制所有的界面元素,因此具有很好跨平台性可定制性,但也牺牲了一些性能集成度。...Swing最初是作为一个可选扩展包提供,后来在1998年被集成到了Java 2平台,并成为了Java标准图形用户界面技术。...AWT一些特性,容器、图形字体等。...事件是指Swing组件所响应用户操作或系统通知,鼠标点击、键盘输入等,它们都继承自java.awt.AWTEvent类,并使用了观察者模式来实现事件监听分发。...布局是指Swing组件在容器排列方式,如水平对齐、垂直对齐等,它们都实现了java.awt.LayoutManager接口,并提供了一些常用布局管理器,流式布局、网格布局等。

    12010

    大学课程 | 计算机图形学,基于MFC二维变换画图软件

    2.2.2 直线直线以下图形绘制均为根据外接矩形绘制内部图形。绘制图形时,当点击鼠标左键时获取矩形起点,按住不放拖动鼠标直至放开左键,放开鼠标左键位置记录为矩形终点。...直线绘制则根据矩形起始点使用MoveTo()LineTo()函数绘制。 2.2.3 等腰直角三角形 在使用鼠标拉取矩形中选取点位置并用画线函数连接点实现。三角形包括3个顶点。...2.2.5 圆形填充圆 在使用鼠标拉取矩形获取了起始点后。将两点距离作为要画圆半径r。...2.2.6 自由画笔 在鼠标左键按下,并且移动过程,通过不断触发OnMouseMove消息映射,在移动位置上一个位置连线,即可实现自由画笔功能。...在实验过程,我们逐渐了解了MFC框架,不同类功能定义方法,明白了双缓冲机制原理,熟悉了基本消息映射功能对话框设计,以及如何在不同类传递数据方法。

    2.4K40

    Java AWT 图形界面编程】使用鼠标滚轮放大缩小 Canvas 画布 ( 鼠标滚轮事件监听器 MouseWheelListener )

    文章目录 一、使用鼠标滚轮放大缩小 Canvas 画布 - 要点分析 1、鼠标滚轮事件 2、核心代码示例 二、绘制超大图像 + 鼠标拖动 + 鼠标滚轮缩放示例 1、代码示例 2、效果展示 一、使用鼠标滚轮放大缩小..., 调用 addMouseWheelListener 函数 , 添加 鼠标滚轮监听器 MouseWheelListener , 实现该监听器 void mouseWheelMoved(MouseWheelEvent...} } 二、绘制超大图像 + 鼠标拖动 + 鼠标滚轮缩放示例 ---- 在 【Java AWT 图形界面编程】Canvas 绘制超大图片 ( 使用鼠标拖动查看全图 | 设置 JFrame 窗口自动关闭...| 获取并绘制图片 | 鼠标拖动计算位移 | 画布偏移 ) 博客 , 绘制了超大图像 , 可以使用鼠标拖动 , 这里在上述基础上 , 新增鼠标滚轮缩放示例 ; 1、代码示例 代码示例 : import...javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent

    2.3K30

    贝塞尔曲线绘制原理与应用

    应用非常广泛,比如说PS钢笔工具所绘画曲线就是贝塞尔曲线,绘制动画运动轨迹等等,而最近一次想用到贝塞尔曲线是想做一个 路径动画 。...二:简介 在iOS开发中一般通过UIBezierPath来实现贝塞尔曲线绘制,平时一般使用绘制二阶三阶贝塞尔曲线方法。...API,纯手动绘制贝塞尔曲线,并且可以拖动滑块浏览贝塞尔曲线绘制过程。...本文 iOS Demo 实现以下功能: 实现功能 描述 绘制贝塞尔曲线 1、点击空白处设置贝塞尔曲线点 2、可以设置贝塞尔曲线阶数 3、播放贝塞尔曲线绘制过程 4、拖动滑块,自由查看绘制过程每一个瞬间...发车 每个点都与前面一个点连线,通过计算得出两点连线与水平形成夹角,将角度赋予过山车实现 转向功能 。 2. 简易曲线图表 a. 直线图表 即最简单两点连成直线。 b.

    1.3K10

    Java AWT 图形界面编程】Canvas 绘制超大图片 ( 使用鼠标拖动查看全图 | 设置 JFrame 窗口自动关闭 | 获取并绘制图片 | 鼠标拖动计算位移 | 画布偏移 )

    一、Canvas 绘制超大图片要点 ---- 1、设置 JFrame 窗口自动关闭 创建 JFrame 窗口后 , 通过调用 JFrame#setDefaultCloseOperation 可以设置窗口自动关闭...image = Toolkit.getDefaultToolkit().getImage("image.jpg"); 调用 Graphics#drawImage 函数 , 向 Canvas 绘制图片...鼠标按下时 , 记录按下位置 , 保存到 startX startY 变量 , 这两个变量每次鼠标按下都会更新 ; // 为组件设置鼠标监听事件 addMouseListener...startX += dx; startY += dy; } }); 4、画布偏移 初始时 , 画布偏移为 0 , 但是 在鼠标不断拖动过程....*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public

    1.4K20

    Java进阶08 GUI

    早期Mac GUI GUI需要操作系统硬件支持。因此,GUI编程往往要处理移植性问题。JavaGUI编程有相对比较好可移植性。...然而,随着GUI重心向移动端转移,JavaGUI部分地位有些尴尬。无论如何,我们还是可以通过Java来了解GUI编程一些基本内容。 图形理解 看下面一个图片: ? KTurtle绘制。...此外,整个图像外有一个方框,用来表明可绘图范围,所有上面提到元素都依附于该方框。 另一方面,上述对象有许多重复使用图形元素(component)。比如把手是一个圆,房子门由直线构成。...相同图形元素可以归为一类(class)。我们可以重复使用直线类来生成(不同性质)直线,并组合到不同对象。 这是用面向对象方式来理解一个图形。对象是描述图形自然方式。...一个简单GUI JavaGUI功能主要集中在awtswing两个包。awt是GUI底层包。swing包是高层封装,更容易移植。这里将更侧重于swing包。

    1.7K70

    基于Java实现图像浏览器设计与实现

    在研究,研究人员可以利用图像浏览器进行实验数据可视化比较分析,加深对数据理解。 商业应用:在商业环境,图像浏览器可以用于产品展示、设计审查市场分析。...JPG.java class PaintCanvas extends Canvas类, 这个代码实现了一个绘图 Canvas 组件,用户可以在 Canvas 上用鼠标拖动绘制线条,并且绘图内容会保存在...添加了鼠标拖动事件监听器,在鼠标拖动时将鼠标位置记录到 pathPoints 列表,并使用临时 Graphics2D 对象绘制路径。...private void drawPath(Graphics2D g2D) 方法用于遍历 pathPoints 列表,并使用 Graphics2D 对象在 drawingArea 上绘制连接这些点直线...WindowCanvas 类实现了一个简单绘图应用程序,可以创建了一个包含绘图面板保存按钮窗口应用程序,允许用户绘制图形并将绘制结果保存为PNG图像文件。继承自 JFrame,表示整个窗口。

    11810

    Java图形用户界面之Applet设计

    Java Applet,可以实现图形绘制、字体颜色控制、动画和声音播放、人机交互及网络交流等功能。...JApplet 类是Applet类扩展,增加了对swing 组件支持。Applet 类 JApplet 类是所有 Java Applet 应用基类,所有的 Java 小程序都必须继承它们。...Applet 类是Java系统类java.awt.Panel子类,因此它也是一个面板容器,其默认布局管理器是FlowLayout, 可以在Applet 面板添加其他界面成分,各种 AWT组件。...drawLine(int xl, int yl, int x2, int y2)绘制直线,x1、y1x2、y2是直线起点终止点坐标。...四、Applet与多媒体支持 图像显示 目前Java所支持图像格式有 GIF、JPEG PNG 三种。在Applet 显示图像要首先加载图像,然后再进行图像绘制

    8710

    带你实现一个简单多边形编辑器

    拖动顶点 多边形闭合后,允许拖动各个顶点来修改位置,为了直观,像高德示例一样给每个顶点都绘制一个圆形: render() { // ... // 绘制顶点圆形 if (this.isClosePath...高德示例并没有拖动整体功能,但是不影响我们支持,整体拖动逻辑拖动单个顶点差不多,先判断鼠标按下时是否在多边形内,然后在移动过程更新所有顶点位置,拖动单个区别是记录应用是移动偏移量...,使用点到直线距离公式: 标准直线方程为:Ax+By+C=0,有三个未知变量,我们只有两个点,显然计算不出三个变量,所以我们使用斜截式:y=kx+b,即不垂直于x轴直线,计算出kb,这样:Ax...k * x + b = k * x + y1 - k * x1 = k * (x - x1) + y1 // 线段上离点p最近p组成直线一定是垂直于线段s,即垂线,垂线斜率k1线段斜率k...,这个很简单,就不附代码了,另外,绘制顶点时候如果是虚拟顶点,那么把描边颜色填充颜色反一下,用来作区分,效果如下: 接下来修改一下mousemove方法,如果拖动是虚拟顶点,那就把它转换成真实顶点

    1.2K40

    在 PDF 文档测量长度、周长和面积

    在建筑、工程施工(AEC)行业,对 PDF 测量工具需求变得至关重要。现在,让我们深入了解测量工具,学习如何在 PDF 上进行测量。...PDF 测量工具我们测量工具组件提供四种基本工具: 直线用于测量距离,多线用于测量周长,多边形矩形用于测量面积。这样就无需打开第三方工具,从而简化了测量流程。...用于测量距离直线直线是在平面图、三维图剖面图中测量长度基本工具。它满足了在这些图纸测量两点之间距离基本需求。用户只需单击初始点,将指针移至第二点,然后松开指针即可显示测量结果。...在多边形模式下,只需单击起点,选择后续点直至形成封闭图形,然后双击即可立即显示中心点面积周长。在矩形模式下,选择矩形左上角点,拖动到对边点,然后单击释放。它将自动测量这个规则矩形面积周长。...更多参数功能这些测量工具提供广泛自定义选项,允许用户设置各种参数,自定义线条、调整精度、校准长度、抓取、放大等。

    32110
    领券