学会了使用按钮监听以及鼠标监听器之后,我们就可以制作一个属于自己的画图板了,以下是我之前制作的一个简易的画图板,功能方面尚还不足,不过已经可以完成铅笔,橡皮,画直线,圆等基本工作了,还可以完成颜色的自由选择,大家不放自己也动手做做吧。
首先是界面类:
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JColorChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; @SuppressWarnings("serial") public class Draw extends JFrame{ public Color color=Color.BLACK;//设置初始颜色 private Color colorselector; private JButton colorselectorbu[]=new JButton[6]; //创建对象时需要new一个对象,否则他的默认值就是NULL private JPanel colorjp=new JPanel(); public static void main(String args[]){ Draw dr=new Draw(); dr.showframe(); } public void showframe(){ JPanel north=new JPanel(); //上方区域,存放颜色按钮以及颜色选择器 JPanel west=new JPanel(); //左边区域,存放图形按钮 JPanel center=new JPanel(); //中间区域,存放画板 JPanel south=new JPanel(); //下面区域,用来显示当前鼠标所在前位置以及所画图形的大小 //-----------------中间区域--------------- center.setLayout(new FlowLayout(FlowLayout.LEFT));//将中间区域的布局设置为左对齐 JPanel drawjp=new JPanel(); drawjp.setBackground(Color.white); drawjp.setPreferredSize(new Dimension(600,500)); center.add(drawjp); //-----------------上方区域---------------- JButton colorchooserbu=new JButton("更多颜色"); colorchooserbu.addActionListener(colorlistener); colorjp.setPreferredSize(new Dimension(120,60)); colorjp.setLayout(new GridLayout(3,6,0,0)); //创建一个颜色组 Color color[]=new Color[]{Color.BLACK,Color.BLUE,Color.CYAN,Color.DARK_GRAY,Color.GRAY,Color.GREEN ,Color.LIGHT_GRAY,Color.GREEN,Color.MAGENTA,Color.ORANGE,Color.PINK,Color.YELLOW}; Dimension d=new Dimension(20,20); for(int i=0;i<color.length;i++){ JButton colorbu=new JButton(); colorbu.setBackground(color[i]); colorbu.setPreferredSize(d); colorjp.add(colorbu); colorbu.addActionListener(listener); } //按钮选择器的自定义颜色组 for(int j=0;j<colorselectorbu.length;j++){ colorselectorbu[j]=new JButton(); colorselectorbu[j].setPreferredSize(d); colorjp.add(colorselectorbu[j]); colorselectorbu[j].addActionListener(listener); } north.add(colorjp); north.add(colorchooserbu); //-----------------左边区域---------------- String img[]=new String[]{"Line", "oval", "rect", "roundrect", "eraser", "fill", "pencil", "select"}; String img1[]=new String[]{"Line1","oval1","rect1","roundrect1","eraser1","fill1", "pencil1","select1"}; ButtonGroup bg=new ButtonGroup(); for(int i=0;i<img.length;i++){ //创建Icon组 ImageIcon shapeicon=new ImageIcon("back/"+img[i]+".jpg"); ImageIcon shapeicon1=new ImageIcon("back/"+img1[i]+".jpg"); JRadioButton shapebu=new JRadioButton(shapeicon); bg.add(shapebu); shapebu.setPressedIcon(shapeicon1); //设置选中时的图案 shapebu.setSelectedIcon(shapeicon1); shapebu.setActionCommand(img[i]); west.add(shapebu); } //---------------下方区域------------- JLabel la1=new JLabel(); JLabel la2=new JLabel(); JLabel la3=new JLabel("600x500像素"); JLabel la4=new JLabel(); south.add(la4); south.add(la1); south.add(la2); south.add(la3); south.setLayout(new GridLayout(1,4,20,20)); north.setPreferredSize(new Dimension(200,80)); west.setPreferredSize(new Dimension(80,200)); south.setPreferredSize(new Dimension(200,20)); north.setBackground(Color.GRAY); west.setBackground(Color.DARK_GRAY); center.setBackground(Color.LIGHT_GRAY); south.setBackground(Color.WHITE); this.setLayout(new BorderLayout()); this.add(north,BorderLayout.NORTH); this.add(west,BorderLayout.WEST); this.add(south,BorderLayout.SOUTH); this.add(center,BorderLayout.CENTER); this.setTitle("画图板复习"); this.setSize(900,700); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(3); this.setVisible(true); //在画板上获取画布权限 Graphics g=drawjp.getGraphics(); DrawListener listener=new DrawListener(g,bg,this,la1,la2); drawjp.addMouseListener(listener); drawjp.addMouseMotionListener(listener); } //添加按钮监听,获取按钮的背景颜色 ActionListener listener=new ActionListener(){ public void actionPerformed(ActionEvent e) { //获取事件源,发生事件的对象 Object obj=e.getSource(); if(obj instanceof JButton){ color=((JButton) obj).getBackground(); } } }; ActionListener colorlistener=new ActionListener(){ //按钮数组累加器 int i = 0; public void actionPerformed(ActionEvent e){ colorselector=JColorChooser.showDialog(null, "颜色选择器", Color.BLACK); colorselectorbu[i].setBackground(colorselector); i++; if(i>=6){ //超出六个按钮,返回0 i=0; } } }; }
下面是监听类:
import java.awt.Color; import java.awt.Graphics; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.Random; import javax.swing.ButtonGroup; import javax.swing.ButtonModel; import javax.swing.JLabel; public class DrawListener extends MouseAdapter{ private int x1,x2,y1,y2; private Graphics g; //将画布对象传过来 private ButtonGroup bg; //将按钮组传过来 private Draw dr; private JLabel la1; private JLabel la2; public DrawListener(Graphics g,ButtonGroup bg,Draw dr,JLabel la1,JLabel la2){ this.g=g; this.bg=bg; this.dr=dr; this.la1=la1; this.la2=la2; } //鼠标按下 public void mousePressed(MouseEvent e){ x1=e.getX(); y1=e.getY(); g.setColor(dr.color); } //鼠标释放 public void mouseReleased(MouseEvent e){ x2=e.getX(); y2=e.getY(); ButtonModel bm=bg.getSelection(); String com=bm.getActionCommand(); if(com.equals("Line")){ g.drawLine(x1, y1, x2, y2); //改变la2中的数字 la2.setText(Math.abs(x1-x2)+"x"+Math.abs(y1-y2)); } else if(com.equals("oval")){ g.drawOval(Math.min(x1, x2),Math.min(y1, y2),Math.abs(x1-x2),Math.abs(y1-y2)); la2.setText(Math.abs(x1-x2)+"x"+Math.abs(y1-y2)); } else if(com.equals("rect")){ g.drawRect(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x1-x2),Math.abs(y1-y2)); la2.setText(Math.abs(x1-x2)+"x"+Math.abs(y1-y2)); } else if(com.equals("roundrect")){ g.drawRoundRect(Math.min(x1,x2), Math.min(y1,y2),Math.abs(x1-x2),Math.abs(y1-y2), Math.abs(x1-x2)/4,Math.abs(y1-y2)/4); la2.setText(Math.abs(x1-x2)+"x"+Math.abs(y1-y2)); } } // public void mouseMoved(MouseEvent e){ int X=e.getX(); int Y=e.getY(); la1.setText(X+","+Y); } public void mouseExited(MouseEvent e) { la1.setText(""); } //鼠标拖动 public void mouseDragged(MouseEvent e){ int X=e.getX(); int Y=e.getY(); la1.setText(X+","+Y); x2=e.getX(); y2=e.getY(); String com=bg.getSelection().getActionCommand(); if(com.equals("pencil")){ g.drawLine(x1, y1, x2, y2); x1=x2; y1=y2; } else if(com.equals("eraser")){ g.setColor(Color.WHITE); for(int i=-8;i<8;i++){ g.drawLine(x1+i,y1+i,x2+i,y2+i); } x1=x2; y1=y2; } else if(com.equals("select")){ g.drawLine(x1,y1,x2,y2); } else if(com.equals("fill")){ Random ran=new Random(); int a=ran.nextInt(16)-8; g.drawLine(x1+a, y1+a, x2+a, y2+a); x1=x2; y1=y2; } } }
使用到的图片是从WINDOWS中的画图板中截图下来的,附件中已提供给大家,自己也动手试试吧
相关推荐
在Java学习过程中,创建一个简单的画图板是一个经典的练习项目,它可以帮助我们深入理解图形用户界面(GUI)的构建和事件处理机制。本篇小结将聚焦于如何使用Java实现一个基本的画图板,同时提供相关的源码分析。 1...
这款画图板工具名为“学生制作的画图板”,它并非是一般的图形软件,而是专为学生学习和作业设计的。在教育场景中,学生常常需要完成一些涉及绘制的作业,如绘制地理图表、生物细胞模型、物理光学路径等。这些作业...
【JAVA简易画图板】是一个基于Java编程语言开发的简单绘图应用程序,它为用户提供了一个基本的图形界面,用户可以通过这个界面进行简单的绘画操作。这个程序包含了一些基本的绘图功能,如绘制形状、使用铅笔工具以及...
自己和同学使用Qt制作的画图板,请指教!
**VC的MFC画图板程序详解** 在计算机科学领域,可视化程序设计是软件开发的一种重要方式,它允许用户通过图形用户界面(GUI)来创建和编辑程序,大大降低了编程的难度。MFC(Microsoft Foundation Classes)是微软...
《VC++ 6.0 MFC简易画图板:实现与技术详解》 在软件开发领域,Microsoft Visual C++ 6.0(简称VC++ 6.0)是一款经典的集成开发环境,它提供了强大的MFC(Microsoft Foundation Classes)库,方便开发者构建Windows...
本程序完成的是一个类似于Windows画图板的画图程序,由于不是开发和设计专业的绘图和图像制作软件,所以,完成的程序的简单功能包括以下几项: 1.新建 2.打开或保存 3.绘制一些基本的图形组件 4.用鼠标在绘图板上单击...
这个画图板还待完善中,但部分功能已经包含
在IT领域,画图板工具通常用于设计、原型制作、教育和协作等多种场景。本文将深入探讨一个强大的画图板工具的功能、应用及其在技术博客中的价值。首先,我们需要理解画图板的基本概念:它是一种软件,允许用户通过...
本主题聚焦于"Flash交互画图板",这是一个利用ActionScript编程语言实现的一帧交互程序。ActionScript是Flash的核心,用于创建动态内容、控制影片剪辑、处理用户输入以及与其他软件进行数据交换。 首先,我们来看...
标题 "使用MFC制作的画图板" 暗示了我们正在构建一个基于MFC的应用程序,其核心功能是允许用户进行绘图操作。这样的程序通常会包含一系列的图形工具,如绘制不同形状、选择线宽、使用调色板以及擦除功能。 首先,...
本文将深入探讨“Flash画图板回放功能”这一主题,结合提供的源码,帮助读者理解如何在Flash环境中实现一个具有记录与回放用户绘画动作的画图板。 首先,我们要明白“Flash线条画图”是指使用Flash ActionScript...
【描述】:“画图板源码示例画图板源码示例画图板源码示例”可能是重复强调了源码示例是关于画图板功能实现的,暗示这个示例可能涵盖了多个关键功能,如颜色选择、线条绘制、形状绘制、橡皮擦、撤销/重做等。...
4. 多媒体集成:教学用画图板通常能与多媒体软件兼容,可以插入图片、视频,甚至进行简单的动画制作,丰富教学手段。 5. 反馈与评估:部分高级画图板还具备智能识别功能,可以自动评估学生的作业,提供反馈,帮助...
使用C#制作的高效画图板,之前见过的C#制作的画图板效率不高,画线的时候很占用CPU,我弄的这个画图板基本功能齐全,并且可以将画出的图像进行导出,并且方便功能扩充,好资源大家要顶啊,很辛苦才做出这个Demo,...
为了制作网络拓扑图,可以扩展这个画图板,添加更多类型的图形元素,如节点(用`QGraphicsEllipseItem`或`QGraphicsRectItem`表示)和连接线(用`QGraphicsPathItem`表示)。还可以实现拖放功能,使用户能够从工具箱...
"huituban.rar_画图板" 小程序作为一个实用的工具,以简易的形式和丰富的功能满足了用户在图形创作上的多种需求,尤其适用于那些寻求快速绘图和初步图形编辑的场景。 画图板程序的核心功能包括绘制几何图形,如矩形...
标题中的“一个纯API编写的画图板”指的是使用操作系统提供的基本图形用户界面(GUI)函数,而不是依赖特定的库或框架,来实现一个简单的绘图应用。在本例中,开发者选择了API作为编程接口,这通常指的是Windows API...