-
做的是仿XP的画板,在功能上实现了铅笔、直线、喷枪、刷子、橡皮擦、矩形、圆角矩形、椭圆、多边形这些功能 ,左右键可以绘制不同颜色的图形。同时,在裁剪工具上实现的是颜色渐变的立体图形,在放大镜工具上实现的是立体感的圆角矩形柱体(虽然比较粗糙)。
-
颜色栏有12种颜色可供选择,颜色框最左边的两个按钮分别以黑色和白色作为初始颜色。
-
下面来介绍一下整个思路:
- 首先,需要创建好整个界面;
- 创建北边菜单栏,并利用一维数组和二维数组来存放文本内容;
- 创建西边工具栏面板,利用数组来存放图片名;
- 创建南边颜色栏面板,创建添加两个面板,一个用于放置展现左右键选定的颜色的按钮的面板,一个用于放置颜色选择的按钮(设置为网格布局);
- 创建中间面板(设置为流式布局左对齐),并另外创建一个放置画布的面板;
- 创建监听器的方法,并添加到事件源上(工具栏的按钮共用一个监听器,颜色栏的按钮共用另一个监听器);
- 将各种创建的面板添加到界面上(一般是在创建之后就添加,这样可以不断调试来完善功能,美化界面)。
//主界面代码 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; public class FiFrame extends JFrame { public static void main(String args[]){ FiFrame fiframe=new FiFrame(); fiframe.FiPainter(); } public void FiPainter(){ //设置窗体关闭后退出 this.setDefaultCloseOperation(3); //设置窗体的标题 this.setTitle("终极画图板"); this.setSize(1100, 600); this.setLocationRelativeTo(null); //调用创建北边菜单栏的方法 this.NMenu(); //调用创建西边面板的方法 WPanel wpanel=new WPanel(); this.add(wpanel,BorderLayout.WEST); //设置位置为边框布局的西边 //调用创建南边面板的方法 SPanel spanel=new SPanel(); this.add(spanel,BorderLayout.SOUTH); //设置位置为边框布局的南边 JPanel cpanel=this.CPanel(); //将窗体设置为可见 this.setVisible(true); //只有在窗体可见之后才可以获取画布对象 Graphics g=cpanel.getGraphics(); //调用创建监听器的方法,并传入参数 FiListener fl=new FiListener(g,wpanel,spanel); //给事件源加上MouseListener和MouseMotionListener这两个监听器 cpanel.addMouseListener(fl); cpanel.addMouseMotionListener(fl); } //定义一个创建菜单栏的方法 public void NMenu(){ //实例化一个JMenuBar类的对象nmenu JMenuBar nmenu = new JMenuBar(); //定义一个一维数组来存放JMenu中存放的文本内容 String array[] = {"文字","查看","编辑","图像","颜色","帮助"}; //定义一个二维数组来存放JMenuItem中存放的文本内容 String [][] array2 ={{"新建","打开","保存"},{},{"工具箱","颜料盒"},{"清除"},{"编辑颜色"},{"关于画图"}}; // 循环遍历array数组 for(int i=0;i<array.length;i++){ JMenu jmenu = new JMenu(array[i]); // 循环遍历array2数组 for(int j=0;j<array2[i].length;j++){ JMenuItem jmt=new JMenuItem(array2[i][j]); //将jmt添加到jmenu上 jmenu.add(jmt); } //将jmenu添加到nmenu上 nmenu.add(jmenu); } this.add(nmenu,BorderLayout.NORTH); } //定义一个创建中间面板的方法 public JPanel CPanel(){ JPanel cpanel1=new JPanel(); //实例化一个JPanel类的对象cpanel1 cpanel1.setBackground(Color.gray); cpanel1.setLayout(new FlowLayout(FlowLayout.LEFT)); //设置为流式布局左对齐 JPanel cpanel2=new JPanel(); cpanel2.setBackground(Color.WHITE); cpanel2.setPreferredSize(new Dimension(700,420)); cpanel1.add(cpanel2); this.add(cpanel1); return cpanel2; } }
//监听器代码 import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.Random; public class FiListener extends MouseAdapter { private boolean flag = true; private int x0,y0,x1,y1,x2,y2,x3,y3; private Graphics2D g; private SPanel spanel; private WPanel wpanel; int max(int a,int b){ if(a<b) a=b; return a; } int min(int a,int b){ if(a>b) a=b; return a; } public FiListener(Graphics g,WPanel wpanel,SPanel spanel){ this.wpanel=wpanel; this.spanel=spanel; this.g=(Graphics2D) g; } public void mouseClicked(MouseEvent e) { //绘制多边形 if(flag==false && wpanel.getShapes().equals("png/多边形.png")){ int x=e.getX(); int y=e.getY(); g.drawLine(x3, y3, x, y); if(x==x3 && y==y3){ g.drawLine(x, y, x2, y2); flag=true; } x3=x; y3=y; } } public void mousePressed(MouseEvent e) { //得到初始点的位置 x0=e.getX(); y0=e.getY(); //获取颜色 if(e.getButton() ==1){ g.setColor(spanel.colorleft()); } if(e.getButton()==3){ g.setColor(spanel.colorright()); } } public void mouseDragged(MouseEvent e){ //用铅笔绘制 if(wpanel.getShapes().equals("png/铅笔.png")){ x1=e.getX(); y1=e.getY(); g.setStroke(new BasicStroke(1)); g.drawLine(x0, y0 ,x1,y1); //将末位置变成下一次的初始位置 x0=x1; y0=y1; } //使用橡皮擦 if(wpanel.getShapes().equals("png/橡皮擦.png")){ x1=e.getX(); y1=e.getY(); g.setColor(Color.WHITE); g.setStroke(new BasicStroke(10)); g.drawLine(x0, y0 ,x1,y1); //将末位置变成下一次的初始位置 x0=x1; y0=y1; } //使用喷枪绘制 if(wpanel.getShapes().equals("png/喷枪.png")){ x1=e.getX(); y1=e.getY(); Random r= new Random(); for(int i=0;i<20;i++){ int x= r.nextInt(10); int y= r.nextInt(10); g.setStroke(new BasicStroke(1)); g.drawLine(x1+x, y1+y, x1+x,y1+y); //将末位置变成下一次的初始位置 x0=x1; y0=y1; } } //使用刷子绘制 if(wpanel.getShapes().equals("png/刷子.png")){ x1=e.getX(); y1=e.getY(); g.setStroke(new BasicStroke(10)); g.drawLine(x0, y0 ,x1,y1); //将末位置变成下一次的初始位置 x0=x1; y0=y1; } } public void mouseMoved(MouseEvent e){ } public void mouseReleased(MouseEvent e) { if(wpanel.getShapes().equals("png/直线.png")){ x1=e.getX(); y1=e.getY(); g.setStroke(new BasicStroke(1)); g.drawLine(x0, y0, x1, y1); } if(wpanel.getShapes().equals("png/矩形.png")){ x1=e.getX(); y1=e.getY(); g.setStroke(new BasicStroke(1)); g.drawRect(min(x0,x1), min(y0,y1), Math.abs(x1-x0), Math.abs(y1-y0)); } if(wpanel.getShapes().equals("png/圆角矩形.png")){ x1=e.getX(); y1=e.getY(); g.setStroke(new BasicStroke(1)); g.drawRoundRect(min(x0,x1), min(y0,y1), Math.abs(x1-x0), Math.abs(y1-y0),50,50); } if(wpanel.getShapes().equals("png/椭圆.png")){ x1=e.getX(); y1=e.getY(); g.setStroke(new BasicStroke(1)); g.drawOval(min(x0,x1), min(y0,y1), Math.abs(x1-x0), Math.abs(y1-y0)); } if(wpanel.getShapes().equals("png/多边形.png")){ x1=e.getX(); y1=e.getY(); if(flag){ g.drawLine(x0, y0, x1, y1); x2=x0; y2=y0; x3=x1; y3=y1; flag=false; } } if(wpanel.getShapes().equals("png/放大镜.png")){ Random r=new Random(); int m=r.nextInt(200); int n=r.nextInt(250); int q=r.nextInt(250); x1=e.getX(); y1=e.getY(); for(int i=0;i<20;i++){ g.setColor(new Color(m,n,q)); g.drawRoundRect(min(x0,x1), min(y0,y1), Math.abs(x1-x0), Math.abs(y1-y0)-4*i, 50,40); } } if(wpanel.getShapes().equals("png/裁剪.png")){ Random r=new Random(); x1=e.getX(); y1=e.getY(); for(int i=0;i<100;i++){ int m=r.nextInt(200); int n=m+50; int q=m+24; g.setColor(new Color(m,n,q)); g.fillOval(min(x0,x1), min(y0,y1), Math.abs(x1-x0), Math.abs(y1-y0)-6*i); } } } }
//颜色栏 import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JPanel; public class SPanel extends JPanel { private Color color; public SPanel(){ spanel(); } //创建调用left按钮颜色的方法 public Color colorleft(){ return buttonleft.getBackground(); } //创建调用right按钮颜色的方法 public Color colorright(){ return buttonright.getBackground(); } private JButton buttonright = new JButton(); private JButton buttonleft = new JButton(); // 事件处理类对象 private MouseAdapter md=new MouseAdapter(){ public void mousePressed(MouseEvent e) { //获取事件源对象 JButton button = (JButton) e.getSource(); color = button.getBackground(); //如果按下的是鼠标左键则改变的是left的背景颜色 if(e.getButton() ==1){ buttonleft.setBackground(color); } //如果按下的是鼠标左键则改变的是right的背景颜色 if(e.getButton()==3){ buttonright.setBackground(color); } } }; public void spanel(){ this.setPreferredSize(new Dimension(0,50)); this.setLayout(new FlowLayout(FlowLayout.LEFT)); this.setBackground(Color.WHITE); JPanel panel1 = new JPanel(); panel1.setLayout(null); panel1.setPreferredSize(new Dimension(40,40)); //设置left按钮的大小和背景颜色 buttonleft.setBounds(8, 8, 15, 15); buttonleft.setBackground(Color.BLACK); //设置right按钮的大小和背景颜色 buttonright.setBounds(16, 16, 15, 15); buttonright.setBackground(Color.WHITE); panel1.add(buttonleft); panel1.add(buttonright); this.add(panel1); JPanel panel2 = new JPanel(); //设置为网格布局,二行六列 panel2.setLayout(new GridLayout(2,6)); Color array[] ={Color.BLACK,Color.RED,Color.CYAN,Color.LIGHT_GRAY, Color.magenta,Color.WHITE,Color.BLUE,Color.GRAY, Color.green,Color.orange,Color.pink,Color.yellow}; for(int i=0;i<array.length;i++){ JButton jbutton = new JButton(); jbutton.setBackground(array[i]); jbutton.setPreferredSize(new Dimension(15,15)); jbutton.addMouseListener(md); panel2.add(jbutton); } this.add(panel2); } }
//工具栏代码 import java.awt.Color; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JPanel; public class WPanel extends JPanel { private String shapes="png/铅笔.png"; public WPanel(){ wpanel(); } public String getShapes(){ return shapes; } public void wpanel(){ //定义一个一维数组来存放工具栏图片的名字 String array[]={"png/裁剪.png","png/选定.jpg","png/橡皮擦.png","png/填充.png","png/取色.png", "png/放大镜.png","png/铅笔.png","png/刷子.png","png/喷枪.png","png/文字.png","png/直线.png", "png/曲线.png","png/矩形.png","png/多边形.png","png/椭圆.png","png/圆角矩形.png"}; ActionListener al = new ActionListener(){ public void actionPerformed(ActionEvent e) { shapes=e.getActionCommand(); } }; for(int i=0;i<array.length;i++){ //实例化ImageIcon类的对象icon ImageIcon icon = new ImageIcon(array[i]); JButton jbutton = new JButton(icon); //获取所选择的图形按钮所对应的图片名称 jbutton.setActionCommand(array[i]); jbutton.addActionListener(al); jbutton.setPreferredSize(new Dimension(25,25)); this.add(jbutton); } this.setPreferredSize(new Dimension(60,0)); this.setBackground(Color.LIGHT_GRAY); } }
相关推荐
《深入探索XP系统自带画板》 XP操作系统中内置的画板工具,是许多用户初次接触数字绘画的起点。这个简单而实用的程序,虽然在功能上无法与专业级的图像编辑软件相比,但它的易用性和基础功能,使得它在日常生活中...
【标题】"仿windows画板.zip"是一款基于C#编程语言开发的图形用户界面应用程序,模仿了Windows系统自带的画图工具。这个项目是大三学生的课程设计成果,旨在教授和实践C#语言以及图形界面设计的基本原理和技巧。 ...
【标题】"仿windows的画板"是一款基于Visual Studio 2005的MFC应用程序,它模仿了Windows操作系统内置的画板工具,并在此基础上扩展了一些实用功能。这个项目旨在为用户提供一个类似系统画板的图形编辑环境,同时...
在本文中,我们将深入探讨如何使用Java编程语言来实现一个类似于Windows操作系统中的简易画板程序。这个Java小程序将提供基本的绘图功能,使用户能够通过鼠标或触控设备进行绘画创作。 首先,我们需要理解Java GUI...
这是一个关于C#编程语言实现的高仿Windows画板软件的源码资源。这个项目旨在提供一个功能完备的、与原版Windows画板相似的应用程序,适用于学习和参考。通过分析和理解这段源码,开发者可以深入掌握C#编程在图形用户...
在本文中,我们将深入探讨如何使用C#编程语言和GDI+库来创建一个仿Windows画板应用程序。GDI+(Graphics Device Interface Plus)是.NET Framework中的一个图形处理API,它为开发者提供了丰富的图形绘制功能,包括...
"C# 画画板 仿window画画板"项目是一个利用C#语言构建的简单画板应用,旨在模仿Windows操作系统内建的画图工具。这个项目对于初学者来说是一个很好的实践平台,它可以帮助开发者了解图形用户界面(GUI)的设计,以及...
java写的仿windows画板 可以调色 已经打成了jar包 方便使用 需要源码的联系我
"VC6.0 实现的仿windows 画板程序(painter)"这个标题揭示了我们讨论的核心内容,即一个基于Visual C++ 6.0(简称VC6.0)开发的图形用户界面应用,该程序模仿了Windows操作系统内置的“画图”工具。"仿windows 画板...
在本项目中,"C#高仿Windows7画板"是一个使用C#编程语言开发的简易画图应用程序,旨在模仿Windows 7操作系统内置的画图工具。这个项目非常适合C#初学者,它提供了实践和学习C#图形用户界面(GUI)编程、事件处理以及...
与Windows XP相比较,Windows 7中的“画图”程序有了巨大的变化,你怀念Windows XP中的“画板”吗?你想在Windows 7中运行Windows XP的画板吗?那么请下载Paint XP吧。它是一个独立的程序,你现在可以在Windows 7下...
【标题】"vs2010编写的仿画板"是一个使用Microsoft Visual Studio 2010开发的软件项目,其主要目标是实现一个类似画板的用户界面,让用户能够进行基本的图形绘制操作。这个画板应用包含了画直线、使用橡皮擦以及绘制...
1、实现友好的Windows画板界面,包括Windows基本菜单、画图功能菜单和常用菜单的工具栏。 2、实现画不同颜色,不同宽度,不同线型的线段、椭圆和矩形。 3、实现自定义字体的大小颜色并且输出到画图板上。 4、实现画...
【标题】"仿WindowsXP画图板设计(1)"是一个关于开发类似Windows XP操作系统中经典画图工具的项目。这个项目旨在帮助学习者理解和实践图形用户界面(GUI)设计、事件处理以及基本的绘图功能。 【描述】虽然描述为空...
在VS2015环境下,利用MFC框架实现的一款高仿“画图”工具,实现绝大部分功能甚至更多创新点。(注释超详细) 实现了点、直线、曲线、折线、矩形、圆形、多边形等等形状,并且具有区域限制、鼠标捕捉等功能;...
【Java简易Windows画板】是一个基于Java编程语言开发的简单图形界面应用,主要目标是提供一个基础的绘图平台,让学生或初学者能够理解和实践GUI(图形用户界面)编程。这个项目可能作为期末考试的一部分,旨在帮助...
几何画板最强中文永久免费5.06版本安装包下载解压安装即可几何画板最强中文永久免费5.06版本安装包下载解压安装即可几何画板最强中文永久免费5.06版本安装包下载解压安装即可几何画板最强中文永久免费5.06版本安装包...
在这个"易语言画板透明去色"的主题中,我们主要探讨的是如何利用易语言来实现一个功能,即在画板上进行图像处理,实现透明度调整和去色效果。 首先,我们需要了解画板的基本概念。在计算机图形学中,画板是一个可以...
在本资源"简单的jQuery网页画板涂鸦代码.zip"中,包含了一个基于jQuery实现的简易网页画板功能。这个画板允许用户通过鼠标在页面上进行涂鸦,从而实现在线绘图的效果。以下是对该技术实现的详细解析: 首先,jQuery...
火山安卓高级画板实现画板开发源码