画图板(一)

此画图板为第一个版本的画图板,下一个版本将会说明这个版本的缺点和不足,下一个版本为画图板(二)

1、步骤

  • 第一步. 创建一个窗体(布局设为BorderLayout)

  • 第二步. 布局左边(西部)添加一个面板(用于添加一些画图工具按钮)

    • 功能:(添加按钮容器)
      1、用于选择画什么图形(目前这个版本只实现了铅笔、刷子、喷漆,直线,矩形,圆角矩形,椭圆,多边形,橡皮擦)

    • 细节:(添加按钮)
      1、按钮添加的简便方法,用一个for循环一次性添加
      2、因为每个按钮都一样,应该怎么区分了,就是给没给按钮添加一个动作命令(btnIcon.setActionCommand(value[i])),相当于给每个按钮添加一个标识,有了这些命令就可以很好地区分每个按钮了,利用这些命令给按钮添加事件也就相对简单了

例如:

String[] value = { "star", "dot_rect", "eraser", "fill", "color_picker", "magnifier", "pencil", "brush","airbrush", "word", "line", "curve", "rect", "polygon", "oval", "round_rect" };for (int i = 0; i < value.length; i++) {JButton btnIcon = new JButton(new ImageIcon("images/" + value[i] + ".jpg"));btnIcon.setPreferredSize(new Dimension(24, 24));// btn.setBorderPainted(false);pLeft.add(btnIcon);btnIcon.setActionCommand(value[i]);// 给按钮一个标识,命令,用来区分这些按钮,要用到某个按钮的时候只需获取给他的这个标识,或命令来获取相应的按钮}

  • 第三步. 中部添加一个画图面板(用于画图)

    • 功能:(用于画笔画图的容器)

    • 细节:
      1、需要创建一个鼠标监听器(画图用鼠标来画)具体的事件请看源代码
      2、画图需要一个画笔(需要的类Graphics),哪里用就从那里拿(在面板上用,就从面板上拿,画图面板获取getGraphics())
      3、注意一点,拿画笔的时候必须在窗体可见之后拿,也就是在设置窗体可见之后,否则则会报一个异常错误
      4、我们怎么知道我们选中的是铅笔了还是刷子还是其他了,我们在第二步给每个按钮添加了一个独一无二的动作命令,来区分这些按钮,我们只需要通过if判断语句,或者switch语句来确定是选中了哪一个按钮


  • 第四步.添加一个底部颜色面板(BorderLayout的南部)

    • 功能:(改变画笔颜色)

    • 细节:
      1、这个就相对第二步第三步简单一点,添加几个按钮,也是用一个for循环来添加,然后给按钮的背景添加不同的颜色
      2、当然的也要给按钮添加一个动作监听器,用于监听到底是点击了哪一个按钮,选中了哪一种颜色,
      3、因为按钮也是通过for循环添加的,每个按钮都一样,我们要做一些处理来分辨这些按钮,具体方法第二步和第三步已经有说
      4、然后通过事件监听来改变画笔的颜色


程序运行结果如下图:


源代码如下:

package com.cwt.ui;import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Random;import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;public class DrawBoard extends JFrame {// 设置一些全局变量// 画直线等图形的起始坐标int xStart = 0;int yStart = 0;// 终止坐标int xEnd = 0;int yEnd = 0;JPanel pCentreDraw;// 创建一个画图面板(西部)String currentCommand = "line";// 获取当前点击的是哪一个按钮// 创建一个画笔Graphics graphics = null;/*** 构造函数*/public DrawBoard() {// 第一步:设置窗体属性setFrameParams();// 窗体属性// 第二步:添加组件setLeftPanel();// 左边面板setCentrePanel();// 中间面板setBottomPanel();// 第三步:设置窗体可见this.setVisible(true);// 获得画笔graphics = pCentreDraw.getGraphics();}/*** @Description 设置窗体属性*/public void setFrameParams() {// 设置窗体的属性this.setTitle("画图板");this.setSize(600, 400);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(3);this.setLayout(new BorderLayout());// 布局}/*** @Description 设置左边面板*/public void setLeftPanel() {// 左边面板JPanel pLeft = new JPanel();pLeft.setPreferredSize(new Dimension(70, 400));pLeft.setBackground(Color.white);String[] value = { "star", "dot_rect", "eraser", "fill", "color_picker", "magnifier", "pencil", "brush","airbrush", "word", "line", "curve", "rect", "polygon", "oval", "round_rect" };// 添加一些画图按钮组件// 创建监听器ActionListener actionListener = new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {currentCommand = e.getActionCommand();// 获取当前按钮标识,命令}};for (int i = 0; i < value.length; i++) {JButton btnIcon = new JButton(new ImageIcon("images/" + value[i] + ".jpg"));btnIcon.setPreferredSize(new Dimension(24, 24));// btn.setBorderPainted(false);pLeft.add(btnIcon);btnIcon.addActionListener(actionListener);// 添加事件btnIcon.setActionCommand(value[i]);// 给按钮一个标识,命令,用来区分这些按钮}this.add(pLeft, BorderLayout.WEST);}/*** @Description 设置中间画图面板*/public void setCentrePanel() {// 创建鼠标监听器MouseListener mouseListener = new MouseListener() {int count = 1;// 记录图形是不是画第一笔int xFirstStart = 0;// 记录起始坐标int yFirstStart = 0;int xCurrentStart = 0;// 记录当前起始坐标int yCurrentStart = 0;@Overridepublic void mouseReleased(MouseEvent e) {// 释放鼠标xEnd = e.getX();yEnd = e.getY();// 确定图形switch (currentCommand) {case "line":// 直线graphics.drawLine(xStart, yStart, xEnd, yEnd);break;case "curve":// 曲线break;case "rect":// 矩形graphics.drawRect(Math.min(xStart, xEnd), Math.min(yStart, yEnd), Math.abs(xEnd - xStart),Math.abs(yEnd - yStart));break;case "polygon":// 多边形if (count == 1) {xFirstStart = xStart;// 保存起始坐标yFirstStart = yStart;xCurrentStart = xEnd;// 保存当前起始坐标yCurrentStart = yEnd;graphics.drawLine(xStart, yStart, xEnd, yEnd);count = 2;}break;case "oval":// 椭圆graphics.drawOval(Math.min(xStart, xEnd), Math.min(yStart, yEnd), Math.abs(xEnd - xStart),Math.abs(yEnd - yStart));break;case "round_rect":// 圆角矩形graphics.drawRoundRect(Math.min(xStart, xEnd), Math.min(yStart, yEnd), Math.abs(xEnd - xStart),Math.abs(yEnd - yStart), Math.abs(xEnd - xStart) / 10, Math.abs(yEnd - yStart) / 10);break;}}@Overridepublic void mousePressed(MouseEvent e) {// 按下了鼠标xStart = e.getX();yStart = e.getY();}@Overridepublic void mouseExited(MouseEvent e) {// 移开了鼠标}@Overridepublic void mouseEntered(MouseEvent e) {// 进入了}@Overridepublic void mouseClicked(MouseEvent e) {// 鼠标点击了if ("polygon".equals(currentCommand)) {int clickCount = e.getClickCount();count = 2;if (clickCount == 1 && count == 2) {// 点击一下graphics.drawLine(xCurrentStart, yCurrentStart, xEnd, yEnd);xCurrentStart = xEnd;yCurrentStart = yEnd;// System.out.println("单击");} else if (clickCount == 2 && count == 2) {// 点击两下graphics.drawLine(xCurrentStart, yCurrentStart, xFirstStart, yFirstStart);count = 1;// System.out.println("双击");}}}};// 创建鼠标拖动监听器MouseMotionListener mouseMotionListener = new MouseMotionListener() {@Overridepublic void mouseMoved(MouseEvent e) {}@Overridepublic void mouseDragged(MouseEvent e) {if ("pencil".equals(currentCommand)) {// 铅笔graphics.drawLine(xStart, yStart, e.getX(), e.getY());xStart = e.getX();yStart = e.getY();} else if ("airbrush".equals(currentCommand)) {// 喷枪Random random = new Random();for (int i = 0; i < 30; i++) {int randomX = random.nextInt(10) - 5;int randomY = random.nextInt(10) - 5;graphics.drawLine(e.getX() + randomX, e.getY() + randomY, e.getX() + randomX,e.getY() + randomY);}} else if ("brush".equals(currentCommand)) {// 刷子((Graphics2D) graphics).setStroke(new BasicStroke(10));graphics.drawLine(xStart, yStart, e.getX(), e.getY());xStart = e.getX();yStart = e.getY();((Graphics2D) graphics).setStroke(new BasicStroke(2));// 还原画笔的宽度} else if ("eraser".equals(currentCommand)) {// 橡皮擦((Graphics2D) graphics).setStroke(new BasicStroke(10));graphics.setColor(Color.white);graphics.drawLine(xStart, yStart, e.getX(), e.getY());xStart = e.getX();yStart = e.getY();((Graphics2D) graphics).setStroke(new BasicStroke(2));// 还原画笔的宽度graphics.setColor(Color.black);// 还原画笔默认颜色}}};// 中间面板pCentreDraw = new JPanel();pCentreDraw.setBackground(Color.white);this.add(pCentreDraw);pCentreDraw.addMouseListener(mouseListener);// 鼠标点击事件pCentreDraw.addMouseMotionListener(mouseMotionListener);}/*** @Description 设置底部颜色面板*/private void setBottomPanel() {JPanel pBottomColor = new JPanel();// 创建一个底部面板pBottomColor.setPreferredSize(new Dimension(this.getWidth(), 70));// 设置面板大小// 设置默认颜色Color[] colors = { Color.black, Color.blue, Color.cyan, Color.DARK_GRAY, Color.gray, Color.green,Color.lightGray, Color.magenta, Color.orange, Color.pink, Color.RED, Color.WHITE, Color.yellow };ActionListener actionListener = new ActionListener() {// 添加按钮监听器@Overridepublic void actionPerformed(ActionEvent e) {String actionCommand = e.getActionCommand();int i = Integer.valueOf(actionCommand);graphics.setColor(colors[i]);}};for (int i = 0; i < colors.length; i++) {JButton btnColor = new JButton();btnColor.setBackground(colors[i]);// 设置按钮的背景颜色btnColor.setPreferredSize(new Dimension(30, 30));// 设置按钮的大小btnColor.addActionListener(actionListener);// 添加事件btnColor.setActionCommand(i + "");// 设置每个按钮的标识,命令pBottomColor.add(btnColor);// 将按钮添加到面板}// 添加到窗体this.add(pBottomColor, BorderLayout.SOUTH);}
}

测试类如下

package com.cwt.ui;public class Test {public static void main(String[] args) {new DrawBoard();}
}

Java项目之画图板(一)相关推荐

  1. Java编写的画图板,功能非常齐全,完整代码 附详细设计报告

    今天为大家分享一个java语言编写的图书管理程序-003,目前系统功能已经很全面,后续会进一步完善.整个系统界面漂亮,有完整得源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 ...

  2. Java学习 之 画图板 立方体

    Java学习 之 画图板 立方体 步骤 画小立方体 画3 *3 *3的立方体 递归画出更大的立方体 步骤 1.先画一个小立方体,三个面填充不一样的颜色 2.再由小立方体搭成一个3 * 3 * 3的立方 ...

  3. Java版简易画图板的实现

    Windows的画图板相信很多人都用过,这次我们就来讲讲Java版本的简易画板的实现. 基本的思路是这样的:画板实现大致分三部分:一是画板界面的实现,二是画板的监听以及画图的实现,三是画板的重绘.(文 ...

  4. java,制作简易画图板

    简易画图板 前些日子,我学习了关于xp系统简易画图板的制作,虽然我写的画图板功能不多,但这是我接触java以来完成的第一个项目,制作的时候感觉很艰难,有的时候明明知道思路,却因为不知道具体的方法而走了 ...

  5. java有画图的库吗,Java基础之画图板

    这是我刚开始学习Java的另一个实例,先上图.. 首先也是先从界面开始,第一就是主要面板,就是一个JFrame,前面的按钮是JRadioButton,然后还有一个 JComboBox下拉列表 publ ...

  6. Java制作简易画图板

    简易画图板 基本思路 运行效果 基本思路 画图板需要满足的功能有: 画线,画三角形,画矩形,画多边形,画曲线 设置不同颜色的画笔 改变窗口大小或最小化窗口后重新打开时图案不消失 画图方法的编写: 创建 ...

  7. java项目需要画什么图_项目管理流程图如何画?这样操作5分钟解决

    项目管理流程图是用来衔接各个阶段的全体,在项目管理的过程中启动阶段是开始一个新项目的过程,我们可以使用流程图对整个过程进行总结绘制让其过程更加鲜明,那项目管理流程图如何画?下面是分享的实用操作方法,教 ...

  8. Java 搭建高级画图板

    1.首先介绍高级画板的效果和功能 1.1实现的功能: 文件:新建画板:导入图片:关闭当前画板:保存画板:另存为:重启画板:退出画板: 编辑:清空画板:选择功能: 颜色:共计13种颜色: 线条:共计7种 ...

  9. java简易画图程序代码_java_简易画图板

    下面我将分享用Java制作简易画图板的过程. version 1 Draw.java Java代码 importjavax.swing.JFrame; /** * * @author yangzhen ...

最新文章

  1. 超越BERT的模型有哪些?
  2. Linux Kernel and Android休眠与唤醒
  3. IE下iframe跨域session和cookie失效问题的解决方案
  4. 洛谷 - P2756 飞行员配对方案问题(二分图最大匹配+路径打印)
  5. 不止代码:乘法游戏 题解(区间dp)
  6. python自动化安装软件_python自动化安装源码软件包
  7. django-模型类的修改-外键
  8. 什么是Knative
  9. java dao修改语句_一个通用的DAO模型实现增删改查
  10. c++多线程——简单线程池
  11. weak属性需要在dealloc中置nil么?
  12. JavaScript跨域请求
  13. PotPlayer v1.7 纯净绿色版 最好用的本地视频播放器下载
  14. 专业学习与职业发展之我见
  15. 俄亥俄州立大学计算机硕士申请,俄亥俄州立大学计算机科学与工程理学硕士研究生申请要求及申请材料要求清单...
  16. Hyper-v安装CentOS
  17. Pytest全栈自动化测试指南-入门
  18. Linux ARM机器,源码安装mysql5.7.23,并且运行
  19. Win8调整笔记本亮度,数值有变化但无效果
  20. 【阿里云IoT+YF3300】7.物联网设备表达式运算

热门文章

  1. 车载ECU的Bootloader实现方法
  2. Niushop 开源电商系统
  3. 当代年轻人最后悔入坑的专业
  4. golang 麻将服务器源码,LollipopGo开源游戏服务器框架--global服务器源码
  5. 【Golang】生成随机数,指定区间随机数
  6. 芯片flash保护(解锁)
  7. Linux禁用内存交换
  8. echart车流量数据可视化
  9. 网络规划设计师看这一篇就够了
  10. (转)ASP.NET 脚本语言介绍