上一个文章已经讲了画直线,三角形,多边形,椭圆,矩形,还有加了两个带名字的颜色按钮。
那么这一个博客我们主要来看看,如何画不规则的图形以及拖动鼠标画直线,还有当按钮上没有名字了,我们该怎么去处理,另外还介绍如何做橡皮擦;
1.不规则的图形
之前我们做的都是有关直线的,现在我们想做任意的曲线,这个时候我们需要添加一个鼠标拖动监听器,因为可以继承多个接口,所以直接在一个类里继承。
同理,接口类的全部方法需要重写,不然会报错,我们发现MouseMotionListener类有两个方法,拖动与移动,拖动是按下鼠标挪动鼠标,移动松开鼠标挪动鼠标。同理我们也可以直接get,x,y,的坐标,是时时刻刻的反馈,所以,当我们画不规则图形的时候,可以把它想象成无线短的一个个线段的连接,所以我们需要保存前一个线段的末坐标。

  if ("不规则".equals(name)) {x4 = e.getX();y4 = e.getY();gr.drawLine(x1, y1, x4, y4);x1 = x4;y1 = y4;}

2.画可拖动的直线

这是按照拖动轨迹不断画直线,但我们想要的只是一条最终释放开的直线,中间的过程可视但不可出现在最后,所以,我们对代码进行了改进,画一个白线覆盖之前的黑线。
PS:大家写东西的时候一定记得保存,我…一言难尽

  if ("直线2".equals(name)) {gr.setColor(Color.WHITE);gr.drawLine(x1, y1, x4, y4);x4 = e.getX();y4 = e.getY();gr.setColor(color);gr.drawLine(x1, y1, x4, y4);}

画板的其他直线有明显的擦除效果,其实就是被白线覆盖了。

3.做橡皮擦,上面作直线给我们很好的启发,所以我们首先做一个橡皮擦的按钮,然后根据拖动的特点,时时刻刻获得坐标,我们可以利用这一点画一个矩形,将需要擦除的覆盖掉。

  if("橡皮擦".equals(name)){gr.setColor(Color.WHITE);gr.drawRect(x4, y4, 8, 8);x4 = e.getX();y4 = e.getY();gr.setColor(color);gr.drawRect(x4, y4, 8, 8);}

这个代码还有一个瑕疵的地方就是,最后还会遗留下来一个矩形,所以我们需要在释放的时候再次把这个矩形覆盖掉。

  if("橡皮擦".equals(name)){x2 = e.getX();y2 = e.getY();gr.setColor(Color.WHITE);gr.drawRect(x2, y2, 8, 8);}

4.无名字的颜色按钮
首先我们可以换一下画板的背景颜色

jf.getContentPane().setBackground(Color.WHITE);

然后创建无颜色的按钮

  javax.swing.JButton blackButton=new javax.swing.JButton();blackButton.setPreferredSize(new Dimension(40,30));jf.add(blackButton);blackButton.setBackground(Color.BLACK);javax.swing.JButton redButton=new javax.swing.JButton();redButton.setPreferredSize(new Dimension(40,30));jf.add(redButton);redButton.setBackground(Color.RED);

然后按钮是无法传到我们的监听器的,所以,我们需要在监听器里找到事件发生源,强制转换成按钮类型,然后获取事件源-按钮的背景色,从而改变画笔的颜色。
代码实在沾不上啦,下一个补上。

Java画不规则,及拖动直线相关推荐

  1. java画图板代码_java学习小总结——画图板制做(附代码)

    学习java这门编程语言也有一个多月了.~若是能用本身学的编程语言去开发一些小程序软件能够说是本身一直求之不得吧!.模仿XP的画图板的开发则是学java来最先作的一个小软件.也是把以前学到的不少知识得 ...

  2. cad角度怎么画_软件CAD | 直线amp;构造线

    点击这里查看上一期推送哦~ 半平米工坊:软件CAD | 各种"线"工具​zhuanlan.zhihu.com 大家好,在前两次的推送中,我们将CAD的界面.操作逻辑都过了一遍,学过 ...

  3. java画图板之平面山水画(一)

    前期准备 在上次的博客中,我们已经用java了解并制作了画图板,可以在上面添加绘制椭圆.曲线.填充.改变颜色等功能,在之后的版本中会进行修改.     今天要做的是通过递归的方式绘制山脉. 具体步骤 ...

  4. cad画不规则实体_cad画不规则曲线的方法步骤图

    CAD绘制图形非常之多,那么大家知道cad怎么画不规则曲线吗?下面是学习啦小编整理的cad画不规则曲线的方法,希望能给大家解答. cad画不规则曲线的方法 1.单击AutoCAD2013工具栏&quo ...

  5. JAVA画图板01 —— 窗体的实现

    画图板 界面开发: 创建窗体对象 完善界面 个人将自制的JAVA画图板分为了三个模块,分别是界面.监听器以及画笔,这一章来介绍界面的相关代码. 界面开发: 创建窗体对象 首先需要创建一个窗体对象.JF ...

  6. 关于google地图api3的离线和在线开发(画带箭头的直线,指定范围,搜索,计算距离)

    最近因为开发的需要,要做一个离线的google地图.并且能够加载google地图的一些特效.例如:地图的标记,计算距离,获取标记的经纬度,画带有箭头的直线,获取指定范围的数据等等.在这里我总结了很多开 ...

  7. java椭圆_如何用java画椭圆

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 利用java画出椭圆.也就是鼠标一边移动一边显示出椭圆,如何做到请大神指教 这是我写的(没有达到我自己的要求): import java.awt.*; i ...

  8. Java 画精美图形

    java画平行四边形 完整代码 public class Paral {public static void main(String[] args) {//外层循环 每次打出一个*for (int i ...

  9. 用java画国际象棋棋盘

    用java画了一个国际象棋的棋盘,不难,还是挺好玩的. package com.test; import java.awt.BorderLayout; import java.awt.Color; i ...

最新文章

  1. 乐意使人恐惧,源于自身的空虚
  2. 【ZK-curator使用异常】KeeperErrorCode = Unimplemented for /***
  3. 编程第一个Apple Watch程序创建项目
  4. python3利用smtplib通过qq邮箱发送邮件
  5. WIN7+wampserver2.4+zend stadio10.6.1配置Xdebug
  6. Diffie-Hellman:安全网络通信背后的天才算法
  7. 全排列及相关扩展算法(二)——求字典序下一组排列及全排列算法
  8. Ubuntu Touch 预览版安装过程解析
  9. Hadoop的环境搭建
  10. android课程设计时钟,单片机制作的电子钟(含闹钟功能)课程设计报告
  11. Web请求响应编码问题详解
  12. c2061 dword 语法错误_解决'PMIB_ICMP_EX':undeclared identifier
  13. linux清楚保存的密钥文件夹,在Ubuntu系统中删除存储库和GPG密钥的方法
  14. Hibernate的session一级缓存
  15. 数据库中,什么是事务,事务的特性
  16. 2017.0622.《计算机组成原理》-虚拟存储器和主存
  17. oracle怎么建立物化视图,Oracle 建立物化视图步骤
  18. ibm tivoli_带有Tivoli Access Manager的SAP NetWeaver Application Server ABAP的单点登录
  19. 软件导出excel时提示没有注册类
  20. blob的txt下载方式

热门文章

  1. SQL函数类型及函数使用大全
  2. sqlplus prelim选项 常规情况下sqlplus无法登录
  3. C++音视频开发核心知识,小白入门必看基础知识
  4. 第4讲 项目1----点阵图
  5. android蓝牙耳机录音播放,是否可以录制蓝牙耳机的声音并同时在Android扬声器上播放?...
  6. 小程序实现数字每三位加逗号分隔符
  7. 有监督回归:约束条件下的最小二乘法
  8. 高通ARIOS源码开发之更换识别卡片以及更换模型
  9. 求sinx的近似值 c语言,用C语言求多项式求sinx的近似值。
  10. 创新方案|3种订阅电商模式推动DTC业务高速增长