import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.io.*;import java.util.ArrayList;
import javax.swing.*;class Dshape implements Serializable{private static final long serialVersionUID = 1L;Shape s;Color c;boolean f;//填充状态String m=new String();//绘画模式private void writeObject(java.io.ObjectOutputStream out) throws IOException{out.defaultWriteObject();}private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException{in.defaultReadObject();}
}
class Dstr implements Serializable{private static final long serialVersionUID = 1L;String s;Font f;Color c;int x,y;//坐标private void writeObject(java.io.ObjectOutputStream out) throws IOException{out.defaultWriteObject();}private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException{in.defaultReadObject();}
}
class DArray implements Serializable{private static final long serialVersionUID = 1L;ArrayList<Dshape> shapelist=new ArrayList<Dshape>();ArrayList<Dstr> strlist=new ArrayList<Dstr>();Color backColor;//背景色private void writeObject(java.io.ObjectOutputStream out) throws IOException{out.defaultWriteObject();}private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException{in.defaultReadObject();}
}class MA extends MouseAdapter{DrawPanel dp;MA(DrawPanel dp){super();this.dp=dp;}@Overridepublic void mousePressed(MouseEvent e){//鼠标按下if(dp.tempshape!=null) {dp.da.shapelist.add(dp.tempshape);}switch(dp.model)//据绘制模式对“当前绘制图形(tempshape)”进行初始化{case "圆":{dp.tempshape=new Dshape();Ellipse2D ep1=new Ellipse2D.Double();ep1.setFrame(e.getX(), e.getY(), 0, 0);dp.tempshape.c=dp.currColor;dp.tempshape.s=ep1;dp.tempshape.f=dp.fill;dp.tempshape.m="Ellipse";break;}case "直线":{dp.tempshape=new Dshape();Line2D l=new Line2D.Double();l.setLine(e.getX(), e.getY(), e.getX(), e.getY());dp.tempshape.c=dp.currColor;dp.tempshape.s=l;dp.tempshape.f=dp.fill;dp.tempshape.m="Line";break;}case "椭圆":{dp.tempshape=new Dshape();//Arc2D ep = new Arc2D.Double();Ellipse2D ep=new Ellipse2D.Double();ep.setFrame(e.getX(), e.getY(), 0, 0);dp.tempshape.c=dp.currColor;dp.tempshape.s=ep;dp.tempshape.f=dp.fill;dp.tempshape.m="Ellipse";break;}case "矩形":{dp.tempshape=new Dshape();Rectangle2D ra=new Rectangle2D.Double();ra.setFrame(e.getX(), e.getY(), 0, 0);dp.tempshape.c=dp.currColor;dp.tempshape.s=ra;dp.tempshape.f=dp.fill;dp.tempshape.m="Rectangle";break;}}}@Overridepublic void mouseReleased(MouseEvent e){//鼠标松开switch(dp.model)//完成tempshape的绘制{case "圆":{Ellipse2D ep1=(Ellipse2D)(dp.tempshape.s);ep1.setFrame(ep1.getX(), ep1.getY(), e.getX()-ep1.getX(), e.getX()-ep1.getX());dp.repaint();break;}case "直线":{Line2D l=(Line2D)(dp.tempshape.s);l.setLine(l.getX1(), l.getY1(), e.getX(), e.getY());dp.repaint();break;}case "椭圆":{Ellipse2D ep=(Ellipse2D)(dp.tempshape.s);ep.setFrame(ep.getX(), ep.getY(), e.getX()-ep.getX(), e.getY()-ep.getY());dp.repaint();break;}case "矩形":{Rectangle2D ra=(Rectangle2D)(dp.tempshape.s);ra.setFrame(ra.getX(), ra.getY(), e.getX()-ra.getX(), e.getY()-ra.getY());dp.repaint();break;}}}@Overridepublic void mouseClicked(MouseEvent e){//鼠标点击//插入文本if(e.getButton()==MouseEvent.BUTTON3){String inputValue = JOptionPane.showInputDialog("Please input text"); Font f=new Font("宋体",20,20);Dstr ms=new Dstr();ms.s=inputValue;ms.c=dp.currColor;ms.f=f;ms.x=e.getX();ms.y=e.getY();dp.da.strlist.add(ms);dp.repaint();}}
}
class MMA extends MouseMotionAdapter{private static final long serialVersionUID = 1L;DrawPanel dp;MMA(DrawPanel dp){super();this.dp=dp;}@Overridepublic void mouseDragged(MouseEvent e) {//鼠标拖动//仅自由绘画模式触发if(dp.model.equals("Draw")){if(dp.tempshape!=null) {Line2D l=(Line2D)(dp.tempshape.s);l.setLine(l.getX1(), l.getY1(), e.getX(), e.getY());dp.da.shapelist.add(dp.tempshape);}dp.tempshape=new Dshape();Line2D l=new Line2D.Double();l.setLine(e.getX(), e.getY(), e.getX(), e.getY());dp.tempshape.c=dp.currColor;dp.tempshape.s=l;dp.repaint();}}
}class DrawPanel extends JPanel{DArray da= new DArray();Dshape tempshape;Color currColor;boolean fill=false;String model=new String();public DrawPanel(){super();MA ma=new MA(this);this.addMouseListener(ma);MMA mma=new MMA(this);this.addMouseMotionListener(mma);//设置监听器}@Overridepublic void paintComponent(Graphics g) {super.paintComponent(g);Graphics2D g2d=(Graphics2D) g;for(Dshape ms:da.shapelist) {g2d.setColor(ms.c);if(ms.f&&!ms.m.equals("Line"))g2d.fill(ms.s);elseg2d.draw(ms.s);}//绘制已记录的图形for(Dstr ms:da.strlist) {g2d.setColor(ms.c);g2d.setFont(ms.f);g2d.drawString(ms.s,ms.x,ms.y);}//插入已记录的文本if(tempshape!=null) {g2d.setColor(tempshape.c);if(tempshape.f&&!tempshape.m.equals("Line"))g2d.fill(tempshape.s);elseg2d.draw(tempshape.s);}//记录当前绘制的图形(若非null)}}class MTLis implements ActionListener{DrawBoard bo;MTLis(DrawBoard bo){super();this.bo=bo;}@Overridepublic void actionPerformed(ActionEvent ae) {// TODO Auto-generated method stubif(ae.getSource().getClass()==JButton.class){JButton mid=(JButton)ae.getSource();if(mid.getText().equals("打开")){JFileChooser jf=new JFileChooser();jf.showOpenDialog(bo);  String s=jf.getSelectedFile().toString();File f=new File(s);try {read(f);} catch (ClassNotFoundException | IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}bo.dpl.repaint();bo.dpl.setBackground(bo.dpl.da.backColor);bo.message.append("File open "+s+"\n");}//加载文件并将其绘制出来,同时设置背景色if(mid.getText().equals("保存")){if(bo.dpl.tempshape!=null)bo.dpl.da.shapelist.add(bo.dpl.tempshape);JFileChooser jf=new JFileChooser();int n=jf.showSaveDialog(bo);String s=jf.getSelectedFile().toString();File f=new File(s);try {write(f);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}bo.message.append("File save "+s+"\n");}//记录当前绘制图形,序列化保存if(mid.getText().equals("红色")) {JColorChooser jc=new JColorChooser();               Color c=new Color(255,0,0);bo.dpl.currColor=c;}//更改前端颜色if(mid.getText().equals("黑色")){JColorChooser jc=new JColorChooser();                Color c=new Color(0,0,0);bo.dpl.currColor=c;}//更改填充状态if(mid.getText().equals("蓝色")) {JColorChooser jc=new JColorChooser();             Color c=new Color(0,0,255);bo.dpl.currColor=c;    }//更改背景色if(mid.getText().equals("圆")){bo.dpl.model="圆";}if(mid.getText().equals("直线")){bo.dpl.model="直线";}if(mid.getText().equals("椭圆")){bo.dpl.model="椭圆";}if(mid.getText().equals("矩形")){bo.dpl.model="矩形";}//更改绘画模式}}void write(File f) throws IOException{FileOutputStream fo=new FileOutputStream(f);@SuppressWarnings("resource")ObjectOutputStream oo=new ObjectOutputStream(fo);oo.writeObject(bo.dpl.da);}//序列化写void read(File f) throws IOException, ClassNotFoundException{FileInputStream fi=new FileInputStream(f);@SuppressWarnings("resource")ObjectInputStream oi=new ObjectInputStream(fi);DArray dp=(DArray)oi.readObject();bo.dpl.da=dp;}//序列化读
}public class DrawBoard extends JFrame{JPanel menu;JButton open,save,color,fill,bgc;JPanel tool;JButton draw,line,el,rect;DrawPanel dpl;JTextArea message;JScrollPane frame;DrawBoard(String title){super();this.setTitle(title);menu=new JPanel(new GridLayout(1,5));open=new JButton("打开");save=new JButton("保存");color=new JButton("红色");fill=new JButton("黑色");bgc=new JButton("蓝色");menu.add(open);menu.add(save);menu.add(color);menu.add(fill);menu.add(bgc);tool=new JPanel(new GridLayout(4,1));draw=new JButton("圆");line=new JButton("直线");el=new JButton("椭圆");rect=new JButton("矩形");tool.add(draw);tool.add(line);tool.add(el);tool.add(rect);dpl=new DrawPanel();frame = new JScrollPane(message);this.getContentPane().add("North",menu);this.getContentPane().add("West",tool);this.getContentPane().add("Center",dpl);this.getContentPane().add("South",frame);addli();this.setSize(800,500);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);   }void addli(){MTLis m =new MTLis(this);open.addActionListener(m);save.addActionListener(m);color.addActionListener(m);fill.addActionListener(m);bgc.addActionListener(m);draw.addActionListener(m);line.addActionListener(m);el.addActionListener(m);rect.addActionListener(m);}//加入监听器public static void main(String[]arg){DrawBoard d=new DrawBoard("Test");}
}

java 实现画图板相关推荐

  1. Java实现画图板画一只百度熊

    Java实现画图板画一只百度熊 笔记: 1.界面 2.鼠标监听器 鼠标按下: 获取坐标 鼠标松开: 获取坐标 画线 3.变量的作用域:在自己所属的代码块中. 局部变量和属性同名,则以局部变量优先显示. ...

  2. Java小白画图板的重绘包括谢尔宾斯基三角形和蕨类图像的重绘

    本作者在构造射线的重绘时出现了错误,将会在以后的文章中贴出来... 画板的重绘 当窗体的状态发生改变时,画板上的缓存会自动清空.屏幕上绘制的图像是将窗体中的对象数据从内存中取出来放到缓存中,再绘制的. ...

  3. java绘图板_Java中的画图板简单功能实现

    首先画图板就是用到了我们之前所学的知识,并不是很难,如果要构建一些复杂的功能,还需进一步学习.画图板所需要的API: JFrame //窗体 : JPanel //面板 :JButton //按钮 A ...

  4. java画图板代码_java学习小总结——画图板制做(附代码)

    学习java这门编程语言也有一个多月了.~若是能用本身学的编程语言去开发一些小程序软件能够说是本身一直求之不得吧!.模仿XP的画图板的开发则是学java来最先作的一个小软件.也是把以前学到的不少知识得 ...

  5. 一个Java画图板程序的设计

    本文讲述一个画图板应用程序的设计,屏幕抓图如下.这篇文章带有三个附件,其中两个jar文件都是j2sdk1.4.2_08编译打包,包含源代码,可执行,如下表: 附件名称及链接 详情 jDraw_basi ...

  6. java中画图喷枪_JAVA 画图板实现(基本画图功能+界面UI)一、界面实现

    /*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 这段时间在学JAVA的swing界面开发,试着做了个画图板.实现了直线.曲线.喷枪.矩形.圆形.文字 ...

  7. java画板中画直线_画图板(画直线)

    1.创建一个画图板(界面) public class DrawUI { //显示界面的方法 public void show(){ //创建界面对象 JFrame jframe = new JFram ...

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

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

  9. java画图板之平面山水画(一)

    前期准备 在上次的博客中,我们已经用java了解并制作了画图板,可以在上面添加绘制椭圆.曲线.填充.改变颜色等功能,在之后的版本中会进行修改.     今天要做的是通过递归的方式绘制山脉. 具体步骤 ...

最新文章

  1. 小猿圈Linux基础面试题,看看你能答对几道?
  2. 「SAP技术」 SAP MM 已启用质检物料创建PO时候'STOCK TYPE'没有默认为X?
  3. Leetcode 剑指 Offer 42. 连续子数组的最大和 (每日一题 20211014)
  4. php下载七牛整个文件夹,七牛云存储文件批量下载工具 - 行客工作室
  5. 第八篇——Struts2的处理结果类型
  6. apache.camel_使用Apache Camel 2.14的轻松REST端点
  7. 开源微服务编排框架:Netflix Conductor
  8. scala python_Scala与Python | 哪种编程语言更好
  9. cmd 命令提示符常用操作
  10. 【白皮书分享】低幼年龄段在线教育白皮书.pdf(附下载链接)
  11. 《Javascript秘密花园》学习笔记(下)
  12. 机器学习项目失败最大的原因的有这7种,你认同吗?
  13. 038--想和权证恋个爱
  14. 手机 SMS PDU 格式参考手册
  15. jquery 自动触发a 标签的click()方法
  16. PA1--实现基础设施、表达式求值和监视点
  17. bootstrapvalidator已定义的验证规则
  18. Minecraft 1.19.2 Forge模组开发 08.生物生成
  19. Qt使用QBrush贴图片纹理
  20. 解决eclipse出现This Android SDK requires Andro...date ADT to the latest version.问题

热门文章

  1. 字节跳动(今日头条),为何如此凶猛?
  2. Restrictions的用法
  3. “游戏数据同步方案”
  4. 银行推进人工智能技术应用时需同步考量可信AI的评估与验证
  5. 5.5 短信黑名单拦截
  6. NAND flash驱动程序(1)
  7. b站python弹幕签到_B站智能防挡弹幕的一种python实现
  8. 2022-2027年中国蓝牙耳机行业市场深度分析及投资战略规划报告
  9. 听音乐也是种享受,索爱SR2 TWS蓝牙耳机颠覆你的听觉体验
  10. 四月十七号中间件 nginx