好久以前就让做个画板了,一直没好好做,这几天学了文件的保存之后,突然就想把画板做一下。
画板,无非就是画线画圆画各种图形。当然,我的画板很简陋,只能画线画圆画矩形。
我在写这个画板的时候遇到了几个比较重大的问题
1、监听器之间如果有互相影响的参数,怎么传?
我发现我解决不了这个问题。后来,我想到强哥当时讲文件的时候,曾经写过一个既能画圆又能画直线的代码。他直接把监听器写在类里面(没有新建一个类),我就试了试这种方法,发现就不用传这个令人头疼的参数了。
但是我还是不知道,如果分开写成两个类要怎么解决这个问题。
2、怎么给按钮加监听器
按钮我是将图片放在数组里,循环添加的。然后我把监听器也写在了循环里。问题当然不是监听器怎么加,而是电脑怎么知道我按的是哪个按钮。。。
开始的时候我以为。。e.getActionCommand.equals(图片名称)就行了。但是按了半天的按钮都没反应。(太对不起熊哥了。。这个熊哥好像讲过)。后来我输出e.getActionCommand发现什么东西也没有、、、然后、、给每个按钮set了一个ActionCommand就好了。。
3、保存
其实保存的时候没有太大的问题。。写着写着。。他就能保存了~~~好开心
对了。我本来想在打开和保存的监听器里写一个这样的东西。
就是一点打开,就能再弹出一个窗体,然后我们可以输入打开的路径,然后用getText()获取里面的字符串,将字符串传给FileInputStream 的对象。后来发现他会报错。。估计是程序是顺序执行的原因。。我木有深究、、就放弃了这个想法、、、
4、代码很乱
暂时还没解决、、而且好多地方没注释
5 、 补充:刚在截图的时候突然发现还没有实现退出这个功能、、、
下面是代码、、有点多。貌似有500多行的样子、
package Paint; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; //画板类 public class ppanel extends JPanel{ //窗体 JFrame jf = new JFrame(); //画布 Graphics g; //工具标签 初始工具 直线 int D1=1; //颜色 初始颜色黑色 Color color=Color.BLACK; //坐标 int x1,x2,y1,y2; //存储图形的队列 List<Shape> lineList = new ArrayList<Shape>(); //监听器 ActionListener ac = new ActionListener() { public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("打开")){ // JFrame open = new JFrame("打开"); // open.setLayout(new FlowLayout()); // JLabel jl1 = new JLabel("请输入地址:"); // open.add(jl1); // open.setSize(200, 150); // open.setLocationRelativeTo(null); // // JTextField j1 = new JTextField(10); // j1.setText("G:/mypic.dat"); // open.add(j1,BorderLayout.CENTER); // open.setVisible(true); // // String st = jl1.getText(); try { FileInputStream fis = new FileInputStream("G:/mypic.dat"); DataInputStream dis = new DataInputStream(fis); int c = dis.readInt(); for(int i =0;i<c;i++){ int d = dis.readInt(); if(d==1){ int xx1=dis.readInt(); int xx2=dis.readInt(); int yy1=dis.readInt(); int yy2=dis.readInt(); int co = dis.readInt(); g.setColor(new Color(co)); g.drawLine(xx1, yy1, xx2, yy2); }else if(d==2){ int xx1=dis.readInt(); int xx2=dis.readInt(); int yy1=dis.readInt(); int yy2=dis.readInt(); int co = dis.readInt(); g.setColor(new Color(co)); g.drawRect(Math.min(xx1, xx2), Math.min(yy1, yy2), Math.abs(xx2-xx1), Math.abs(yy1-yy2)); }else if(d==3){ int xx1=dis.readInt(); int xx2=dis.readInt(); int yy1=dis.readInt(); int yy2=dis.readInt(); int co = dis.readInt(); g.setColor(new Color(co)); g.fillRect(Math.min(xx1, xx2), Math.min(yy1, yy2), Math.abs(xx2-xx1), Math.abs(yy1-yy2)); }else if(d==4){ int xx1=dis.readInt(); int xx2=dis.readInt(); int yy1=dis.readInt(); int yy2=dis.readInt(); int co = dis.readInt(); g.setColor(new Color(co)); g.drawOval(Math.min(xx1, xx2), Math.min(yy1, yy2), Math.abs(xx2-xx1), Math.abs(yy1-yy2));} else if(d==5){ int xx1=dis.readInt(); int xx2=dis.readInt(); int yy1=dis.readInt(); int yy2=dis.readInt(); int co = dis.readInt(); g.setColor(new Color(co)); g.fillOval(Math.min(xx1, xx2), Math.min(yy1, yy2), Math.abs(xx2-xx1), Math.abs(yy1-yy2));} else if(d==6){ int xx1=dis.readInt(); int xx2=dis.readInt(); int yy1=dis.readInt(); int yy2=dis.readInt(); int co = dis.readInt(); g.setColor(new Color(co)); g.drawOval(Math.min(xx1, xx2), Math.min(yy1, yy2), Math.abs(xx2-xx1), Math.abs(xx2-xx1)); }else if(d==7){ int xx1=dis.readInt(); int xx2=dis.readInt(); int yy1=dis.readInt(); int yy2=dis.readInt(); int co = dis.readInt(); g.setColor(new Color(co)); g.fillOval(Math.min(xx1, xx2), Math.min(yy1, yy2), Math.abs(xx2-xx1), Math.abs(xx2-xx1)); }else if(d==8){ int xx1=dis.readInt(); int xx2=dis.readInt(); int yy1=dis.readInt(); int yy2=dis.readInt(); int co = dis.readInt(); g.setColor(new Color(co)); g.fillRect(xx1, yy1, 10, 10); } } fis.close(); dis.close(); } catch (Exception e2) { e2.printStackTrace(); } System.out.println("打开!"); } if(e.getActionCommand().equals("保存")){ try { FileOutputStream fos = new FileOutputStream("G:/mypic.dat"); DataOutputStream dos = new DataOutputStream(fos); dos.writeInt(lineList.size()); for(int i =0;i<lineList.size();i++){ Shape s = lineList.get(i); dos.writeInt(s.type); dos.writeInt(s.x1); dos.writeInt(s.x2); dos.writeInt(s.y1); dos.writeInt(s.y2); dos.writeInt(s.color.getRGB()); } fos.close(); dos.close(); } catch (Exception e2) { e2.printStackTrace(); } System.out.println("保存!"); } if(e.getActionCommand().equals("退出")){ System.out.println("退出!"); } if(e.getActionCommand().equals("画笔")){ D1 = 0; System.out.println("画笔!"); } if(e.getActionCommand().equals("直线")){ D1 = 1; System.out.println("直线!"); } if(e.getActionCommand().equals("矩形")){ D1 = 2; System.out.println("矩形!"); } if(e.getActionCommand().equals("矩形(实)")){ D1 = 3; System.out.println("矩形(实)!"); } if(e.getActionCommand().equals("椭圆")){ D1 = 4; System.out.println("椭圆!"); } if(e.getActionCommand().equals("椭圆(实)")){ D1 = 5; System.out.println("椭圆(实)!"); } if(e.getActionCommand().equals("圆")){ D1 = 6; System.out.println("圆!"); } if(e.getActionCommand().equals("圆(实)")){ D1 = 7; System.out.println("圆(实)!"); } if(e.getActionCommand().equals("橡皮")){ D1 = 8; System.out.println("橡皮!"); } if(e.getActionCommand().equals("添加文字")){ D1 = 9; System.out.println("添加文字!"); } if(e.getActionCommand().equals("关于")){ JOptionPane.showMessageDialog(null," 作者:周一帆 \nQQ:121727544"); } }}; public static void main(String[] agrs){ ppanel f = new ppanel(); f.draw(); } public void draw(){ //设置属性 jf.setTitle("画图板"); jf.setSize(700, 600); jf.setLocationRelativeTo(null); jf.setDefaultCloseOperation(3); //菜单 menu(); //工具 tool(); //画板 jf.add(this,BorderLayout.CENTER); //设置可见 jf.setVisible(true); this.g = this.getGraphics(); //监听器 this.addMouseListener(new MouseListener() { @Override public void mouseReleased(MouseEvent e) { x2=e.getX(); y2=e.getY(); System.out.println(D1); if(D1==1){ g.setColor(color); g.drawLine(x1, y1, x2, y2); Shape s = new Shape(); s.x1=x1;s.x2=x2;s.y1=y1;s.y2=y2; s.color=color; s.type=1; lineList.add(s); } if(D1==2){ g.setColor(color); g.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y1-y2)); Shape s = new Shape(); s.x1=x1;s.x2=x2;s.y1=y1;s.y2=y2; s.color=color; s.type=2; lineList.add(s); } if(D1==3){ g.setColor(color); g.fillRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y1-y2)); Shape s = new Shape(); s.x1=x1;s.x2=x2;s.y1=y1;s.y2=y2; s.color=color; s.type=3; lineList.add(s); } if(D1==4){ g.setColor(color); g.drawOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y1-y2)); Shape s = new Shape(); s.x1=x1;s.x2=x2;s.y1=y1;s.y2=y2; s.color=color; s.type=4; lineList.add(s); } if(D1==5){ g.setColor(color); g.fillOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y1-y2)); Shape s = new Shape(); s.x1=x1;s.x2=x2;s.y1=y1;s.y2=y2; s.color=color; s.type=5; lineList.add(s); } if(D1==6){ g.setColor(color); g.drawOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(x2-x1)); Shape s = new Shape(); s.x1=x1;s.x2=x2;s.y1=y1;s.y2=y2; s.color=color; s.type=6; lineList.add(s); } if(D1==7){ g.setColor(color); g.fillOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(x2-x1)); Shape s = new Shape(); s.x1=x1;s.x2=x2;s.y1=y1;s.y2=y2; s.color=color; s.type=7; lineList.add(s);} if(D1==8){ g.setColor(Color.WHITE); g.fillRect(x1, y1, 10, 10); Shape s = new Shape(); s.x1=x1;s.x2=x2;s.y1=y1;s.y2=y2; s.color=color; s.type=8; lineList.add(s); } if(D1==9){ System.out.print("添加文字!"); } } @Override public void mousePressed(MouseEvent e) { x1=e.getX(); y1=e.getY(); } @Override public void mouseExited(MouseEvent e) {} @Override public void mouseEntered(MouseEvent e) {} @Override public void mouseClicked(MouseEvent e) {} }); } //画布重绘 public void paint(Graphics g){ super.paint(g); this.setBackground(Color.WHITE); } //设置菜单栏 public void menu(){ //菜单 JMenuBar jmb = new JMenuBar(); //菜单项 JMenu jm1 = new JMenu("文件"); JMenu jm2 = new JMenu("工具"); JMenu jm3 = new JMenu("帮助"); //菜单子项 JMenuItem jmi11 = new JMenuItem("打开"); JMenuItem jmi12 = new JMenuItem("保存"); JMenuItem jmi13 = new JMenuItem("退出"); JMenuItem jmi20 = new JMenuItem("画笔"); JMenuItem jmi21 = new JMenuItem("直线"); JMenuItem jmi22 = new JMenuItem("矩形"); JMenuItem jmi23 = new JMenuItem("矩形(实)"); JMenuItem jmi24 = new JMenuItem("椭圆"); JMenuItem jmi25 = new JMenuItem("椭圆(实)"); JMenuItem jmi26 = new JMenuItem("圆"); JMenuItem jmi27 = new JMenuItem("圆(实)"); JMenuItem jmi28 = new JMenuItem("橡皮"); JMenuItem jmi29 = new JMenuItem("添加文字"); JMenuItem jmi31 = new JMenuItem("关于"); jm1.add(jmi11);jm1.add(jmi12);jm1.add(jmi13); jm2.add(jmi20);jm2.add(jmi21);jm2.add(jmi22);jm2.add(jmi23);jm2.add(jmi24); jm2.add(jmi25);jm2.add(jmi26);jm2.add(jmi27);jm2.add(jmi28);jm2.add(jmi29); jm3.add(jmi31); jmb.add(jm1); jmb.add(jm2); jmb.add(jm3); jf.setJMenuBar(jmb); jmi11.addActionListener(ac); jmi12.addActionListener(ac); jmi13.addActionListener(ac); jmi20.addActionListener(ac); jmi21.addActionListener(ac); jmi22.addActionListener(ac); jmi23.addActionListener(ac); jmi24.addActionListener(ac); jmi25.addActionListener(ac); jmi26.addActionListener(ac); jmi27.addActionListener(ac); jmi28.addActionListener(ac); jmi31.addActionListener(ac); } //工具 public void tool(){ JPanel jp = new JPanel(); jp.setLayout(new FlowLayout(FlowLayout.CENTER,20,10)); JLabel jl = new JLabel("工 具"); jl.setFont(new Font("楷体",Font.BOLD,25)); jp.add(jl); String[] array ={"画图/画笔.jpg","画图/直线.jpg","画图/矩形.jpg","画图/矩形1.jpg","画图/椭圆.jpg","画图/椭圆1.jpg", "画图/圆.jpg","画图/圆1.jpg","画图/橡皮.jpg","画图/文字.jpg"}; for(int i =0;i<array.length;i++){ ImageIcon ima = new ImageIcon(array[i]); JButton jb = new JButton(ima); jb.setPreferredSize(new Dimension(24,24)); jp.add(jb); if(i==0){jb.setActionCommand("画笔");} if(i==1){jb.setActionCommand("直线");} if(i==2){jb.setActionCommand("矩形");} if(i==3){jb.setActionCommand("矩形1");} if(i==4){jb.setActionCommand("椭圆");} if(i==5){jb.setActionCommand("椭圆1");} if(i==6){jb.setActionCommand("圆");} if(i==7){jb.setActionCommand("圆1");} if(i==8){jb.setActionCommand("橡皮");} if(i==9){jb.setActionCommand("文字");} //监听器 jb.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("画笔")){ D1 = 0; System.out.println("画笔!"); } if(e.getActionCommand().equals("直线")){ D1 = 1; System.out.println("直线!"); } if(e.getActionCommand().equals("矩形")){ D1 = 2; System.out.println("矩形!"); } if(e.getActionCommand().equals("矩形1")){ D1 = 3; System.out.println("矩形1!"); } if(e.getActionCommand().equals("椭圆")){ D1 = 4; System.out.println("椭圆!"); } if(e.getActionCommand().equals("椭圆1")){ D1 = 5; System.out.println("椭圆1!"); } if(e.getActionCommand().equals("圆")){ D1 = 6; System.out.println("圆!"); } if(e.getActionCommand().equals("圆1")){ D1 = 7; System.out.println("圆1!"); } if(e.getActionCommand().equals("橡皮")){ D1 = 8; System.out.println("橡皮!"); } if(e.getActionCommand().equals("文字")){ D1 = 9; System.out.println("文字!"); } } }); } JLabel jl1 = new JLabel("颜 色"); jl1.setFont(new Font("楷体",Font.BOLD,25)); jp.add(jl1); JPanel jp1 = new JPanel(); jp1.setPreferredSize(new Dimension(40,100)); String[] array1 ={"颜色/black.jpg","颜色/white.jpg","颜色/blue.jpg","颜色/red.jpg", "颜色/green.jpg","颜色/yellow.jpg","颜色/b.jpg","颜色/p.jpg",}; for(int i = 0;i<8;i++){ ImageIcon ima = new ImageIcon(array1[i]); JButton jb = new JButton(ima); jb.setPreferredSize(new Dimension(12,12)); jp1.add(jb); if (i==0) {jb.setActionCommand("黑色");} if (i==1) {jb.setActionCommand("白色");} if (i==2) {jb.setActionCommand("蓝色");} if (i==3) {jb.setActionCommand("红色");} if (i==4) {jb.setActionCommand("绿色");} if (i==5) {jb.setActionCommand("黄色");} if (i==6) {jb.setActionCommand("灰色");} if (i==7) {jb.setActionCommand("粉色");} jb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("黑色")){color=Color.BLACK;} if(e.getActionCommand().equals("白色")){color=Color.WHITE;} if(e.getActionCommand().equals("蓝色")){color=Color.BLUE;} if(e.getActionCommand().equals("红色")){color=Color.RED;} if(e.getActionCommand().equals("绿色")){color=Color.GREEN;} if(e.getActionCommand().equals("黄色")){color=Color.YELLOW;} if(e.getActionCommand().equals("灰色")){color=Color.GRAY;} if(e.getActionCommand().equals("粉色")){color=Color.PINK;} } }); } jp.add(jp1); jp.setPreferredSize(new Dimension(100,0)); jf.add(jp,BorderLayout.EAST); } }
主界面:
工具栏:
文件栏
其实帮助里面、、还有一个关于作者、、
相关推荐
简单画板(源代码)有有橡皮筋功能,文本输入功能,文件输入保存功能,调色功能,取色功能等等 用MFC实现
在这个"java swing简单画板"项目中,开发者利用Swing构建了一个基础的绘图应用,用户可以在此画板上执行常见的绘图操作,如绘制直线、圆、矩形、曲线,并使用橡皮擦进行擦除。下面我们将详细讨论这些知识点。 **1. ...
【MFC简单画板】是基于C++编程语言和Microsoft Foundation Classes (MFC)库实现的一个基础绘图应用。MFC是微软为Windows操作系统提供的一个类库,它封装了Windows API,使得开发者能够更容易地使用面向对象的方式...
Java简单画板程序是一个基于Java编程语言开发的图形用户界面应用,主要目的是提供一个基础的绘图环境。这个程序允许用户在屏幕上绘制各种图形和线条,实现简单的绘画功能。通过这个程序,我们可以学习到以下几个Java...
C++程序开发基于Qt实现的简单绘画板程序源码+项目说明.zip 基于Qt实现的简单绘画板程序。 ## 功能介绍 - 绘制点、直线、椭圆、矩形等基本几何图形; - 存储、读取绘图文件; - 撤回、重做等功能; - 调节线宽、线条...
"简单的画画板"是一款设计简洁、易于操作的绘画工具,旨在提供类似QQ画板的绘画体验。这款应用或软件允许用户在屏幕上自由创作,挥洒艺术灵感,是初学者和爱好者进行数字绘画的理想选择。其核心功能可能包括颜色选择...
【Java简单画板】是一款基于Java编程语言开发的轻量级画图软件,它提供了基本的绘图功能,包括绘制直线、矩形和椭圆,适用于进行简单的图形创作和涂鸦。这款工具的设计理念是易用性和实用性,使得用户无需复杂的操作...
标题 "VC++的非常简单的画板程序工程及源码" 提供了我们即将讨论的核心内容:一个基于VC++编写的简易画板程序及其源代码。这个项目可能是一个基础的教学示例,适合初学者理解图形用户界面(GUI)编程和基本的绘图...
下面将详细阐述这个"简单画板程序"中的关键知识点。 首先,我们需要使用C#的Windows Forms库来创建图形用户界面。Windows Forms提供了丰富的控件和组件,用于构建桌面应用程序。在这个画板程序中,主要用到的是`...
【VB制作的简单画板程序】是一个利用Visual Basic(VB)开发的基础图形用户界面应用程序,它为用户提供了一个基本的绘图平台,用户可以在此平台上进行简单的绘画操作。这个程序的核心功能是画笔颜色的可变性,使得...
标题中的“简单画板中蕴含的‘哲理’”指的是在编程领域中,一个看似简单的画板应用可能隐藏着深入的编程思想和技术实现。这样的项目通常用于教学或实践,帮助初学者理解图形用户界面(GUI)开发、事件处理、坐标...
在本“VC++课程设计_windows简单画板”项目中,我们主要探讨了如何利用Microsoft的Visual C++(VC++)编程环境开发一个基础的Windows应用程序,即一个简单的画板工具。这个工具允许用户进行基本的绘图操作,如绘制...
这就是使用C#和GDI+创建一个简单画板的基本流程。虽然这个示例很简单,但它展示了GDI+的主要功能,并且可以根据需求进行扩展,比如添加更多绘图工具、颜色选择器、撤销/重做功能等。对于C#初学者来说,这是一个很好...
一个简单的Java画板可能包含以下关键部分: ```java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class SimplePaintBoard extends JFrame { private DrawingPanel panel; public...
【标题】"用windows编写的简单画板"是一款基于Windows平台的初级图形用户界面应用程序,旨在提供基础的绘画功能。这个程序可能由初学者或学习Windows编程的开发者编写,用于熟悉Windows API调用和事件处理机制。 ...
【标题】"mfc实现简单绘画板"是一个基于MFC(Microsoft Foundation Classes)框架的编程项目,旨在创建一个简易的图形用户界面,用户可以在该界面上进行基本的绘图操作。MFC是微软为Windows应用程序开发提供的一套...
《图形画板简单demo》 在信息技术领域,图形画板是一种常见的交互式应用程序,它允许用户在屏幕上绘制各种图形,包括线条、矩形、椭圆等。本项目名为"图形画板简单demo",旨在提供一个基础的绘图平台,让用户能够...
在本文中,我们将深入探讨如何使用Java编程语言来实现一个简单的画板应用程序。这个程序允许用户在图形用户界面上绘制各种基本形状,如线条、矩形、圆形等,从而提供了一个基本的绘画环境。 首先,我们需要引入Java...
总的来说,这个项目是一个使用 Egret 框架实现的简单画板应用,它展示了如何利用 Web 技术创建具有基本绘画功能的交互式应用,并提供了保存作品的能力。这对于初学者来说是一个很好的学习资源,可以帮助他们理解如何...
### C++ Builder简单画板程序知识点解析 #### 一、项目背景与概述 根据所提供的文件信息,本项目是使用C++ Builder开发的一款简单的画板应用程序。C++ Builder是一款由Embarcadero Technologies提供的快速应用开发...