java实现画图板上画一条直线

 更新时间:2020年09月29日 08:24:50   作者:NaiKuaii  
这篇文章主要为大家详细介绍了java实现画图板上画一条直线,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

目标:在画图板上画一条直线,供大家参考,具体内容如下

一、首先需要建立一个界面

过程:1、创建界面对象(Java语言中已经有,可直接创建对象来使用)。

2、对于一个界面,我们需要设置它的大小、居中、界面关闭、界面可见。

3、写主方法去实现界面。

(目前界面还未实现画图板的功能)

public class DrawUI {
 //显示界面的方法
 public void show(){
  //创建界面对象
 JFrame jframe = new JFrame();
  //设置界面的尺寸、位置居中、关闭、标题
 jframe.setSize(1000, 900);
 jframe.setLocationRelativeTo(null);
 jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 jframe.setTitle("画图板v2.0");
 
  //设置界面可见
  jframe.setVisible(true);
 }
 //主方法
 public static void main(String[] args){
 DrawUI UI = new DrawUI();
 UI.show();
 }
 
}

二、创建监听器类

1、重新创建一个监听器(Listener)的类:要在界面上实现画图,我们需要给界面添加监听器。====>实际上是让鼠标的一些指令能够在界面上有反应。换言之,监听器是一个连接鼠标与界面的桥梁。

2、监听器类(Listener)实现鼠标监听器(MouseListener)的接口.

3、加入鼠标监听器下的所有方法。

public class Listener implements MouseListener{
 
  //鼠标点击
 public void mouseClicked(MouseEvent e){}
 
  // 鼠标按下
 public void mousePressed(MouseEvent e){}
 
  //鼠标松开
 public void mouseReleased(MouseEvent e){}
 
  // 进入
 public void mouseEntered(MouseEvent e){}
 
  // 退出 
 public void mouseExited(MouseEvent e){}
 }

三、实现画出直线

1、创建监听器类(Listener)后,我们需要在界面类中添加监听器  =====> 在界面上添加监听器后,我们才能在界面上画图。(写在画图板“可见”之前 )。

在画图板中输入一下代码

//创建监听器
 Listener draw = new Listener(); 
//添加监听器
 jframe.addMouseListener(draw);

2、画一条直线,我们需要用Graphics (画布工具)用于画图。在此,画图板需要获取Graphics 并且监听器对象上设置该画布。

(写在画图板“可见”之后)

//获取Graphics
Graphics graph = jframe.getGraphics();
//给监听器的画布对象赋值
draw.setGraphics(graph);

然后转到监听器类(Listener)中输入代码

3、开始画直线

<1> 首先,画一条直线我们需要获取直线两端点的坐标。所以定义x1,y1,x2,y2。

<2>画布画图,需要定义Graphics

//记录坐标
int x1,y1,x2,y2;
 
//定义Graphics
Graphics graph1;

<3> 传画布(Graphics)值的方法 ====> 画图板上的画布值等于监听器上的画布值

//传画布值的方法
public void setGraphics(Graphics graph2){
graph1 = graph2;

<4>鼠标画出直线

在鼠标按下事件中输入起点坐标

 public void mousePressed(MouseEvent e){
 //获取按下信息
 x1=e.getX();
 y1=e.getY();
 }

在鼠标松开事件中输入终点坐标,并画出直线

public void mouseReleased(MouseEvent e){
 //获取松开信息
 x2=e.getX();
 y2=e.getY();
 //画线
 graph1.drawLine(x1,y1,x2,y2);
 }

四、完整过程:

界面

package Draw;
 
import java.awt.Graphics;
 
import javax.swing.JFrame;
 
public class DrawUI {
 public void show(){
 JFrame jframe = new JFrame();
 jframe.setSize(1000, 900);
 jframe.setLocationRelativeTo(null);
 jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 jframe.setTitle("画图板v2.0");
 
 //创建监听器
 Listener draw = new Listener(); 
 //添加监听器
 jframe.addMouseListener(draw);
 
 
 jframe.setVisible(true);
 //获取Graphics
 Graphics graph = jframe.getGraphics();
 //给监听器的画布对象赋值
 draw.setGraphics(graph);
 }
 //主方法
 public static void main(String[] args){
 DrawUI UI = new DrawUI();
 UI.show();
 }
 
}

监听器

package Draw;
 
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
 
 
public class Listener implements MouseListener{
 //记录坐标
 int x1,y1,x2,y2;
 
 //定义Graphics
 Graphics graph1;
 
 //传画布值的方法
 public void setGraphics(Graphics graph2){
 graph1 = graph2;
 
 
 }
 
 public void mouseClicked(MouseEvent e){}
 
 public void mousePressed(MouseEvent e){
 //获取按下信息
 x1=e.getX();
 y1=e.getY();
 }
 
 public void mouseReleased(MouseEvent e){
 //获取松开信息
 x2=e.getX();
 y2=e.getY();
 //画线
 graph1.drawLine(x1,y1,x2,y2);
 }
 
 
 public void mouseEntered(MouseEvent e){}
 
 public void mouseExited(MouseEvent e){}
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 详解java CountDownLatch和CyclicBarrier在内部实现和场景上的区别

    详解java CountDownLatch和CyclicBarrier在内部实现和场景上的区别

    这篇文章主要介绍了详解java CountDownLatch和CyclicBarrier在内部实现和场景上的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • java运算符实例用法总结

    java运算符实例用法总结

    在本篇文章里,我们给大家分享的是关于java运算符实例用法及实例代码,需要的朋友们参考下。
    2020-02-02
  • springcloud集成skywalking实现全链路追踪

    springcloud集成skywalking实现全链路追踪

    在微服务治理中,springcloud也是技术选型中的一个成熟的解决方案,而且相对dubbo来说,springcloud涉及到的微服务组件更多,调用链路可能更复杂,本文将详细介绍下如何在springcloud中集成skywalking,需要的朋友可以参考下
    2024-01-01
  • 详解java.lang.NumberFormatException错误及解决办法

    详解java.lang.NumberFormatException错误及解决办法

    这篇文章主要介绍了详解java.lang.NumberFormatException错误及解决办法,本文详解的介绍了错误的解决方法,感兴趣的可以一起来了解一下
    2020-05-05
  • 详解mybatis #{}和${}的区别、传参、基本语法

    详解mybatis #{}和${}的区别、传参、基本语法

    这篇文章主要介绍了mybatis #{}和${}的区别、传参、基本语法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • JSP 开发之 releaseSession的实例详解

    JSP 开发之 releaseSession的实例详解

    这篇文章主要介绍了JSP 开发之 releaseSession的实例详解的相关资料,需要的朋友可以参考下
    2017-07-07
  • java实现单链表中是否有环的方法详解

    java实现单链表中是否有环的方法详解

    本篇文章介绍了,用java实现单链表中是否有环的方法详解。需要的朋友参考下
    2013-05-05
  • 详解如何在Java项目中实现信号的连续接收

    详解如何在Java项目中实现信号的连续接收

    在Java项目中,信号的连续接收是一项重要的任务,特别是在处理异步事件或者需要对外部事件做出响应时,本篇博客将介绍如何在Java项目中实现信号的连续接收,包括信号的监听、处理和停止等步骤,需要的朋友可以参考下
    2023-11-11
  • Java流程控制顺序结构原理解析

    Java流程控制顺序结构原理解析

    这篇文章主要介绍了Java流程控制顺序结构原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • JAVA实现网络/本地图片转BASE64存储代码示例

    JAVA实现网络/本地图片转BASE64存储代码示例

    这篇文章主要给大家介绍了关于JAVA实现网络/本地图片转BASE64存储的相关资料,Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法,需要的朋友可以参考下
    2023-07-07

最新评论