用java实现简单绘图的过程中可以让初学者更好的学习java这门语言,更好的理解包括变量类型,类与对象,接口等概念。在学习了简单的Swing程序设计之后,初学者可以运用窗体框架JFrame,布局管理器,常用面板,Swing常用组件等实现绘图所需要的画布。接下来我们就一起来设计一下绘图工具。

首先,我们定义一个程序显示的类,然后再主函数中定义一个这个类的对象。当然也可以直接在主函数中进行程序显示的代码操作,之所以要定义一个程序显示的类是为了程序的封装方便以及调用方便。


public class DrawUI {//     1.声明显示程序的类public void showUI() {
}
}

这个类无返回值,所以用void声明,其次,所有定义的新的类和主函数都要包含在public class DrawUI 里面。这里我没有写之前的路径和包名。接下来要做的就是丰富这个新定义好的 showUI()类。

JFrame jf = new JFrame();//对新创建的窗体设置参数jf.setTitle("画图工具");jf.setSize(900, 900);jf.setDefaultCloseOperation(3);jf.setLocationRelativeTo(null);//设置边框布局jf.setLayout(new BorderLayout());        

那么首先要做的就是利用Swing组件新建一个窗体框架JFrame,对这个JFrame进行参数设置,调用布局管理器,这里布局可以设置流式布局和边框布局,网格布局。本文以边框布局为例,创建面板对象,根据边框布局的特点创建了中间的面板用来作为画板以及北边得面板作为菜单栏。

//面板对象:JPanelJPanel northPanel = new JPanel();northPanel.setBackground(Color.YELLOW);northPanel.setPreferredSize(new Dimension(0, 60));jf.add(northPanel,BorderLayout.NORTH);JPanel centerPanel = new JPanel();centerPanel.setBackground(Color.WHITE);centerPanel.setPreferredSize(new Dimension(0, 0));jf.add(centerPanel,BorderLayout.CENTER);//功能    

接下来我们先新建一个class类,用来放我们的监听器接口,注意要调用监听器,需要重写监听器中所有的方法。如图所示调用了接下来可能用到的三个监听器。

public class DrawMouse implements MouseListener, ActionListener, MouseMotionListener {public void actionPerformed(ActionEvent e) {}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) {}public void mouseDragged(MouseEvent e) {      }public void mouseMoved(MouseEvent e) {}
}

继续在drawUI中设置各种按钮,并把这些按钮加入监听器。

JLabel user = new JLabel("图形:");northPanel.add(user);DrawMouse mouse = new DrawMouse();String[] shape= {"画线","直线","三角形","矩形","多边形"};for(int i=0;i<shape.length;i++) {JButton jbu = new JButton(shape[i]);                jbu.setPreferredSize(new Dimension(90, 30));northPanel.add(jbu);jbu.addActionListener(mouse);}        JLabel user1 = new JLabel("颜色:");northPanel.add(user1);Color[] color = {Color.RED,Color.GREEN,Color.BLUE,Color.ORANGE,Color.BLACK,Color.CYAN};for(int i=0;i<color.length;i++) {JButton but = new JButton();//设置背景色but.setBackground(color[i]);but.setPreferredSize(new Dimension(30, 30));northPanel.add(but);//添加监听器but.addActionListener(mouse);    }jf.setVisible(true);

定义画笔,将drawmouse中的画笔的值引用传递给drawUI.

Graphics g = centerPanel.getGraphics();            centerPanel.addMouseListener(mouse);centerPanel.addMouseMotionListener(mouse);//引用传递mouse.gr=g;

接下来就需要根据需要丰富drawmouse中的方法。如下是笔者设计的具体方法。

public void actionPerformed(ActionEvent e) {if ("".equals(e.getActionCommand())) {// 获取当前事件源对象JButton jbu = (JButton) e.getSource();// 获取按钮背景色,设置给画笔color = jbu.getBackground();gr.setColor(color);} else {// 获取按钮上的内容name = e.getActionCommand();}System.out.println("按钮!name = " + name);}public void mouseClicked(MouseEvent e) {x3 = e.getX();y3 = e.getY();if ("三角形".equals(name)) {gr.drawLine(x1, y1, x3, y3);gr.drawLine(x2, y2, x3, y3);flag = 1;System.out.println("x3 = " + x3 + "   y3 = " + y3);}// 判断是否双击:e.getClickCount() == 2if ("多边形".equals(name)) {if (e.getClickCount() == 1) {x3 = e.getX();y3 = e.getY();gr.drawLine(x2, y2, x3, y3);x2 = x3;y2 = y3;}if (e.getClickCount() == 2) {gr.drawLine(x1, y1, x3, y3);flag = 1;}}}public void mousePressed(MouseEvent e) {System.out.println("按下");// 获取当前的坐标值// 局部变量:1.在方法(作用域)里面定义的变量 2.方法的参数if (flag == 1) {x1 = e.getX();y1 = e.getY();}System.out.println("x1 = " + x1 + "   y1 = " + y1);}public void mouseReleased(MouseEvent e) {if (flag == 1) {x2 = e.getX();y2 = e.getY();}// 任意三角形if ("多边形".equals(name) && flag == 1) {gr.drawLine(x1, y1, x2, y2);flag++;}}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mouseDragged(MouseEvent e) {if ("画线".equals(name)) {x2 = e.getX();y2 = e.getY();gr.drawLine(x1,y1,x2,y2);x1=x2;y1=y2;}if ("直线".equals(name)) {            gr.setColor(Color.WHITE);gr.drawLine(x1,y1,x2,y2);x2 = e.getX();y2 = e.getY();            gr.setColor(color);gr.drawLine(x1,y1,x2,y2);}if ("三角形".equals(name)) {gr.setColor(Color.WHITE);gr.drawLine(x1,y1,x2,y2);x2 = e.getX();y2 = e.getY();            gr.setColor(color);gr.drawLine(x1,y1,x2,y2);flag++;}    if ("矩形".equals(name)) {            gr.setColor(Color.WHITE);gr.drawLine(x1,y1,x1,y2);gr.drawLine(x1,y1,x2,y1);gr.drawLine(x2,y2,x1,y2);gr.drawLine(x2,y2 ,x2,y1);x2 = e.getX();y2 = e.getY();            gr.setColor(color);            // 矩形,椭圆,等腰/等边三角形gr.drawLine(x1,y1,x1,y2);gr.drawLine(x1,y1,x2,y1);gr.drawLine(x2,y2,x1,y2);gr.drawLine(x2,y2 ,x2,y1);            }                }public void mouseMoved(MouseEvent e) {}
public static void main(String[] args) {DrawUI ui = new DrawUI();ui.showUI();}

在主函数中运行showUI()即可。java包可以根据系统提示进行导入。最终程序效果如下所示:

用java实现简单绘图相关推荐

  1. Java图形编程实验总结_JAVA实验报告简单绘图程序

    <JAVA实验报告简单绘图程序>由会员分享,可在线阅读,更多相关<JAVA实验报告简单绘图程序(8页珍藏版)>请在人人文库网上搜索. 1.实验三绘制图形一.实验目的学会JBut ...

  2. java简单通讯录的实现02person类_用java实现简单的小游戏(你一定玩过)

    用java实现简单的小游戏(你一定玩过) 对于java初学者来说,通过一些学习小游戏来对swing学习以及对java基础的学习是一个好的方法,同时也给学习带来了很多的乐趣,接下来就给大家分享一个jav ...

  3. java实现简单窗体小游戏----球球大作战

    java实现简单窗体小游戏----球球大作战 需求分析 1.分析小球的属性: ​ 坐标.大小.颜色.方向.速度 2.抽象类:Ball ​ 设计类:BallMain-创建窗体 ​ BallJPanel- ...

  4. python绘图实例-Python使用matplotlib简单绘图示例

    本文实例讲述了Python使用matplotlib简单绘图.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #! python2 """ ...

  5. mac下简单绘图工具

    mac下简单绘图工具 由于用的Mac系统的缘故,有时候想绘制一些简单的图形,想找一款像window下的画图工具,一直没有找到 今天无意中想到了一个方法,使用Mac系统自带的"预览" ...

  6. Java JNI简单实现

    Java JNI简单实现 JNI(Java Native Interface)允许了Java和C&C++进行交互?这不折腾人嘛! 一.JNI简述 http://baike.baidu.com/ ...

  7. c# GDI+简单绘图(一)

    最近对GDI+这个东西接触的比较多,也做了些简单的实例,比如绘图板,仿QQ截图等. 最早接触这个类,是因为想做仿QQ截图的效果.巧的很,学会了如何做截图后,.NET课堂上老师也正巧要讲关于c#绘图方面 ...

  8. 一个用于提取简体中文字符串中省,市和区并能够进行映射,检验和简单绘图的python模块...

    简介 一个用于提取简体中文字符串中省,市和区并能够进行映射,检验和简单绘图的python模块. 举个例子: ["徐汇区虹漕路461号58号楼5楼", "泉州市洛江区万安塘 ...

  9. java实现账号单一ip登录,使用Java实现简单后台访问并获取IP示例

    使用Java实现简单后台访问并获取IP示例 发布时间:2020-10-28 21:57:57 来源:亿速云 阅读:92 作者:Leah 使用Java实现简单后台访问并获取IP示例?针对这个问题,这篇文 ...

最新文章

  1. 【转】如何上传本地音乐作为百度空间背景音乐
  2. epoll_data_t里面的void *ptr; int fd; u32; u64 分析
  3. navicat 批量修改列数据
  4. Oracle 同义词、DBLINK、表空间的使用
  5. DISCUZ 使用 JQ做效果导致DIY失效的解决办法
  6. [SQL Server 2014] SQL Server 2014新特性探秘
  7. “LINQ已死”论 为言论1 致歉 [Java | .Net | 致歉 ]
  8. Nginx负载调度器+双Tomcat负载及会话共享+MySQL后端数据库
  9. json for-in 来循环对象的属性
  10. CSS(九)元素隐藏和利弊
  11. 优化性能一点总结,供大家参考
  12. 校园网免认证登录连接
  13. 容器监控cadvisor
  14. PHP云软件短信接口,Thinkphp对接华为云短信接口
  15. 计算机存储一个像素点需要多少个字节
  16. 两个月攻克系统集成项目管理工程师
  17. 梦三国则么修改服务器时间,梦三国如何窗口,梦三国设置
  18. 一次买房子血淋淋的教训
  19. 以太网io模块4-20mA转网口转TCP/IP西门子PLC扩展modbus模块
  20. 东软睿驰标准化域控制器产品正式发布

热门文章

  1. python更改图片中物体的颜色_Python实现去除图片中指定颜色的像素功能示例
  2. 模糊集合和隶属度详解
  3. android 包命名不管你怎么命,千万不要用下面几个
  4. Appium+python(1):python运行真机App程序示例
  5. 语言(Language)和语法(Syntax)简述
  6. linux 模拟arm,拒绝开发板, 用 SkyEye 就可以模拟 ARM Linux!
  7. css文本向左对齐怎么设置,css怎么设置文本左对齐
  8. Ambire钱包白皮书
  9. all boot options are tried的问题解决
  10. 【高并发】- 指标介绍