当前位置: 首页 > ds >正文

Java_画图软件

简介:本文讲解如何用java写一个简单的画图软件。
运行效果
在这里插入图片描述
在这里插入图片描述
代码

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;public class Main {// 创建窗口对象private Frame frame = new Frame("简答手绘程序");// 定义画图区的宽高private  final  int AREA_WIDTH = 500;private  final  int AREA_HEIGHT = 400;// 定义一个右键菜单 用于设置画笔的颜色private  PopupMenu colorMenu = new PopupMenu(); // 那个颜色选择框的菜单private  MenuItem redItem = new MenuItem("红色");private  MenuItem greenItem = new MenuItem("绿色");private  MenuItem blueItem = new MenuItem("蓝色");// 定义一个变量 距离当前画笔的颜色private Color forceColor = Color.BLACK;// 创建一个BufferedImage位图对象BufferedImage image = new BufferedImage(AREA_WIDTH, AREA_HEIGHT, BufferedImage.TYPE_INT_BGR);  // 参数顺序 宽 高 图片类型// 通过位图,获取关联的Graphics对象Graphics g = image.getGraphics();// 自定义一个类 继承 Canvesprivate class MyCanves extends Canvas{@Overridepublic void paint(Graphics g) {g.drawImage(image, 0, 0, null); // 图的来源 图的位置x 图的位置y 观察者(没有填null)}}MyCanves drawArea = new MyCanves();  // 创建一个画布// 定义变量 记录 鼠标拖动过程中 上一次所处的坐标private int preX = -1;private int preY = -1;public void init(){// 组装视图 逻辑控制// 注册监听器ActionListener listener = new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {String actionCommand = e.getActionCommand();switch (actionCommand){case "红色":forceColor = Color.RED;break;case "绿色":forceColor = Color.GREEN;break;case "蓝色":forceColor = Color.BLUE;break;}}};// 给菜单每个按钮添加监听器redItem.addActionListener(listener);greenItem.addActionListener(listener);blueItem.addActionListener(listener);// 把每个菜单按钮添加到菜单中colorMenu.add(redItem);colorMenu.add(greenItem);colorMenu.add(blueItem);// 把colorMenu设置给绘图区域drawArea.add(colorMenu);// 添加鼠标点击监听器drawArea.addMouseListener(new MouseAdapter() {@Overridepublic void mouseReleased(MouseEvent e) {boolean popupTrigger = e.isPopupTrigger();if (popupTrigger){  // 右键释放后 在drawArea上的 x, y位置显示图像colorMenu.show(drawArea, e.getX(), e.getY());}// 鼠标松开的时候 重置 preX和preYpreX = -1;preY = -1;}});// 设置位图的背景为白色g.setColor(Color.white);// 设置位图为矩形g.fillRect(0, 0, AREA_WIDTH, AREA_HEIGHT);// 通过监听鼠标的移动 完成线条绘制 // 这里用的是鼠标移动的监听器drawArea.addMouseMotionListener(new MouseAdapter() {@Overridepublic void mouseDragged(MouseEvent e) {if (preX > 0 && preY > 0){// 设置线条的颜色g.setColor(forceColor);// 画线条// 前两个参数是 一条线的上一个点的坐标 后面两个参数是 线的终点坐标g.drawLine(preX, preY, e.getX(), e.getY());}// 修正preX 和 preY的值preX = e.getX();preY = e.getY();// 重绘组件drawArea.repaint();}});drawArea.setPreferredSize(new Dimension(AREA_WIDTH, AREA_HEIGHT));frame.add(drawArea);// 关闭按钮frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});frame.pack();frame.setVisible(true);}public static void main(String[] args){new Main().init();}
}
http://www.xdnf.cn/news/11987.html

相关文章:

  • 《2020年AI、CV、NLP顶会最全时间表!》
  • HTML5锚点教程
  • 友情链接常用代码
  • 最短路径课程设计(安阳旅游导航系统)C语言完整代码
  • 黑客网站大全!都在这了!速看删了真的就没了
  • 青龙面板-快手极速版(每天3块脚本)(废-已不能使用)
  • editplus注册码
  • SAP增强 和VA01相关增强点介绍
  • 土匪头头
  • 智能家居装修怎么布线?智能家居网络与开关插座布置
  • 2021年中国研究生数学建模竞赛C题——帕金森病的脑深部电刺激治疗建模研究
  • Dynamic-Programming(动态规划)最细解题思路+代码详解,顺利拿到OPPO公司Android架构师offer
  • LIBRARY_PATH和LD_LIBRARY_PATH区别
  • C语言详解:函数递归专题
  • Https中间人攻击
  • MeeGo开发常用测试工具及流程
  • ORACLE数据库管理员的职责
  • MySql下载及安装教程
  • 行业云平台:企业数字化转型与创新的加速器
  • CRM设计扫盲:一文读懂CRM,内附海量界面案例
  • 基于单片机的电加热炉温度控制系统设计
  • 2023常用的10款电力电子系统仿真分析软件推荐
  • ssmjava二手书交易系统1rn8a【独家源码】 应对计算机毕业设计困难的解决方案
  • [教程]使用Lite MP4 Tool专业制作MP4(AVC)视频格式 - 指导教程
  • 我,在Web3,赚了100万
  • 计算机一级网络设置网关步骤,internet网关如何设置 internet网关设置步骤【图文】...
  • MyEclipse6.0免安装版
  • 精选30个优秀的CSS技术和实例
  • 数据加工:从原始数据到有价值的信息
  • Office2007集成SP1光盘镜像下载(简体中文专业版+企业版VOL)