标签:基本 使用 自己 close 表示 title 重写 update 代码
一、主窗体代码
package com.mr.draw;//类所在的包名 import javax.swing.JFrame; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import java.awt.image.BufferedImage; import javax.swing.JFrame;//引入窗体类 /** * 画主体窗体 * */ public class DrawPictureFrame extends JFrame { BufferedImage image = new BufferedImage(570,390,BufferedImage.TYPE_INT_BGR);//创建一个八位BGR颜色分量的图像; BufferedImage类描述了一个 Image与访问图像数据缓冲区。 Graphics gs = image.getGraphics();//获取图像的绘图对象 Graphics2D g = (Graphics2D)gs;//将绘图对象转换为Graphics2D类型 DrawPictureCanvas canvas = new DrawPictureCanvas();//创建画布对象 Color foreColor = Color.black;//定义前景颜色 Color backgroundColor = Color.white;//定义背景颜色 int x = -1;//上一次鼠标绘制点的横坐标 int y = -1;//上一次鼠标绘制点的纵坐标 boolean rubber = false;//橡皮识别变量 /** * 构造方法 * */ public DrawPictureFrame() {//继承窗体类 setResizable(false);//窗体不能该表大小 setTitle("画图程序");//设置标题 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗体关闭则停止程序 setBounds(500,100,574,460);//设置窗口位置和宽高 init();//组件初始化 addListener();//添加组件监听 } /** * 组价初始化 * */ private void init() { g.setColor(backgroundColor);//用背景设置绘图对象的颜色 g.fillRect(0, 0, 570,390);//用背景填充整个画布 g.setColor(foreColor);// canvas.setImage(image);// getContentPane().add(canvas);//将画布添加到窗体容器默认布局的中部位置 } /** * 为组件添加动作监听 * */ private void addListener() { //画板添加鼠标移动事件监听 canvas.addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(final MouseEvent e) {//当鼠标拖动 if(x > 0 && y > 0) {//如果x 和y存在鼠标记录 if(rubber) {//如果橡皮标识为true,表示使用橡皮 g.setColor(backgroundColor);//绘制工具使用背景色 g.fillRect(x, y, 100, 100);//在鼠标滑过的位置画填充填充的正方形 }else {//如果鼠标标识为false,表示用画笔画图 g.drawLine(x,y,e.getX(),e.getY());//在鼠标滑过的位置画直线 }//else结束 }//if结束 x = e.getX();//上一次鼠标绘制点的横坐标 y = e.getY();//上一次鼠标绘制点的纵坐标 canvas.repaint();//更新画布 }//mouseDragged()结束 });//canvas.addMouseMotionListener()结束 canvas.addMouseListener(new MouseAdapter() {//画板添加鼠标点击事件监听 public void mouseReleased(final MouseEvent arg0) {//当按键抬起时 x = -1;//将记录上一次鼠标绘制点的横坐标恢复成-1 y = -1;//将记录上一次鼠标绘制点的纵坐标恢复成-1 }//mouseReleased()结束 });;//canvas.addMouseListener()结束 }//addListener()结束 /** * 程序运行主方法 * @author 帅气的威少 * */ public static void main(String[] args) { DrawPictureFrame frame = new DrawPictureFrame();//创建窗体对象 frame.setVisible(true);//让窗体可见 }//mian()结束 }//DrawPictureFrane类结束
二、画板代码
package com.mr.draw; import java.awt.Image; import java.awt.Canvas; import java.awt.Graphics; /** * 简笔画展示窗体 * */ public class DrawPictureCanvas extends Canvas { private Image image = null; /** * 设置画板上的图片 * @author 帅气的威少 * */ public void setImage(Image image) { this.image = image; } /** * 重写paint()方法,在画布上绘制图像 * */ public void paint(Graphics g) { g.drawImage(image,0,0,null); } /** * 重写update()方法,这样可以解决屏幕闪烁的问题 * */ public void update(Graphics g) { paint(g);//调用paint方法 }//update(Graghics g)方法结束 }//DrawPictureCanvas类结束
三、存在的问题
代码基本都能看懂,但是自己写的话,又写不出来,无从下手,没有找到好的方法,有没有遇到相同问题的小伙伴,欢迎分享你的学习经验?
标签:基本 使用 自己 close 表示 title 重写 update 代码
原文地址:https://www.cnblogs.com/liuyuewei/p/10777116.html