先看下实现后的效果:
<!--StartFragment -->
要完成这东西,首先界面的东西是不能少的
public class DrawBorder extends JFrame{ public static void main(String [] args) { DrawBorder db=new DrawBorder(); db.initUI(); } public void initUI() { this.setTitle("画图板"); this.setSize(600,500); //居中 this.setLocationRelativeTo(null); //不可调大小 this.setResizable(false); //创建监听对象 DrawListener dl=new DrawListener();
到此停顿一下下,这里DrawBorder继承了JFrame,所以this就是指DrawBorder窗体了。
接着往下,用JPanel组件将整个窗体瓜分为三部分:西边(功能区)、南边(颜色区)、中间(画图区)
//西边 JPanel westPanel=new JPanel(); westPanel.setBackground(Color.GRAY); westPanel.setPreferredSize(new Dimension(65,0)); //一个字符串数组来保存图片名 String []shapeType={ "pencil","eraser","line","oval","rect","roundrect","five-pointed star","polygon","立体棋" }; //遍历数组,将图片添加到按钮上 for (int i=0;i<shapeType.length;i++) { ImageIcon im=new ImageIcon("image/"+shapeType[i]+".png"); JButton jb=new JButton(im); jb.setPreferredSize(new Dimension(24, 24)); //按钮动作命令值 jb.setActionCommand(shapeType[i]); jb.addActionListener(dl); westPanel.add(jb); } this.add(westPanel,BorderLayout.WEST); //南边(颜色) //与西边的差不多 JPanel southPanel=new JPanel(); southPanel.setPreferredSize(new Dimension(0, 100)); southPanel.setBackground(Color.CYAN); southPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); this.add(southPanel,BorderLayout.SOUTH); Color[]colorType={ Color.BLACK,Color.RED,Color.BLUE,Color.GREEN,new Color(12,23,34) }; for (int i=0;i<colorType.length;i++) { JButton jb=new JButton(); jb.setPreferredSize(new Dimension(24, 24)); jb.setBackground(colorType[i]); //给按钮添加监听器 jb.addActionListener(dl); southPanel.add(jb); } //中间 JPanel centerPanel=new JPanel(); centerPanel.setBackground(Color.WHITE); this.add(centerPanel); this.setDefaultCloseOperation(3); this.setVisible(true); //可见之后获取画笔,否则空指针异常 Graphics g=centerPanel.getGraphics(); //调用set函数,将画笔传到监听器中 dl.setG(g); //添加监听器 centerPanel.addMouseListener(dl); centerPanel.addMouseMotionListener(dl); }
接下来就是监听器里的内容了,大概是以下内容:
//获取传来的画笔之用 public void setG(Graphics g) { this.g=g; g.setColor(color); } public void actionPerformed(ActionEvent e) { if(e.getActionCommand()!=null&&!e.getActionCommand().equals("")) { shapetype=e.getActionCommand(); }else { JButton jb=(JButton)e.getSource(); color=jb.getBackground(); } } public void mouseClicked(MouseEvent e) { // if(flag==1) { x2=e.getX(); y2=e.getY(); g.drawLine(x1, y1, x2, y2); x1=x2; y1=y2; } int count=e.getClickCount(); if(count==2) { g.drawLine(x0, y0, x1, y1); flag=0; } } public void mousePressed(MouseEvent e) { if(flag!=1) { x1=e.getX(); y1=e.getY(); x0=x1; y0=y1; } g.setColor(color); } public void mouseReleased(MouseEvent e) { x2=e.getX(); y2=e.getY(); if(shapetype.equals("line")) { //画直线 g.drawLine(x1, y1, x2, y2); } else if(shapetype.equalsIgnoreCase("rect")) { //画矩形 g.drawRect(x1, y1, Math.abs(x2-x1),Math.abs(y2-y1)); } else if(shapetype.equals("oval")) { //画椭圆或者圆 g.drawOval(x1, y1, Math.abs(x1-x2), Math.abs(y1-y2)); } else if (shapetype.equals("roundrect")) { //画圆角矩形 g.drawRoundRect(x1, y1, Math.abs(x1-x2),Math.abs(y1-y2) , 20,20); } else if(shapetype.equals("five-pointed star")) { //画简陋的五角星 int width=Math.abs(x1-x2); int height=Math.abs(y1-y2); g.drawLine(x1+width/2, y1-height/5, x1+(2*width)/5, y1+height/5); g.drawLine(x1+(2*width)/5, y1+height/5, x1, y1+height/5); g.drawLine(x1, y1+height/5, x1+width/3, y1+(4*height)/9); g.drawLine(x1+width/3, y1+(4*height)/9, x1+width/5, y1+height); g.drawLine(x1+width/5, y1+height, x1+width/2, y1+(4*height)/5); g.drawLine(x1+width/2, y1+(4*height)/5, x1+(4*width)/5, y1+height); g.drawLine(x1+(4*width)/5, y1+height, x1+(2*width)/3, y1+(3*height)/5); g.drawLine(x1+(2*width)/3, y1+(3*height)/5, x1+width, y1+height/5); g.drawLine(x1+width, y1+height/5, x1+(3*width)/5, y1+height/5); g.drawLine(x1+(3*width)/5, y1+height/5,x1+width/2, y1-height/5); } else if(shapetype.equals("polygon")) { //多边形 flag=1; g.drawLine(x1, y1, x2, y2); x1=x2; y1=y2; } else if (shapetype.equals("立体棋")) { //画出多个圆,使其产生立体感 for(int i=0;i<50;i++) { Color c=new Color(200+i,200+i, 200+i); g.setColor(c); g.fillOval(x2+i, y2+i, 100-2*i, 100-2*i); } } } public void mouseDragged(MouseEvent e) { x2=e.getX(); y2=e.getY(); if(shapetype.equals("eraser")) { //橡皮的实现 //与铅笔一样,只不过这是与背景颜色相同,且更粗的铅笔 g2=(Graphics2D)g; g2.setColor(Color.WHITE); g2.setStroke(new BasicStroke(10)); g.drawLine(x1, y1, x2, y2); x1=x2; y1=y2; g2=(Graphics2D)g; g2.setColor(Color.BLACK); g2.setStroke(new BasicStroke(1)); }else if(shapetype.equals("pencil")) { //铅笔的实现 g.drawLine(x1, y1, x2, y2); x1=x2; y1=y2; } }
总而言之,引用胡哥的话,技术是很好学的(虽然我现在感觉不到)。我想慢慢的我会感觉到的
相关推荐
在Java编程语言中,实现一个简单的Windows画图板是一个经典的练习,它可以帮助初学者更好地理解图形用户界面(GUI)的设计以及事件处理机制。这个项目通常会涉及到Java的Swing库,这是一个用于创建桌面应用程序的GUI...
画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码...
这个"基于qt实现的画图板"项目提供了一个基础的图形用户界面(GUI)应用,让用户能够进行基本的绘画操作,比如选择画笔、填充颜色、打开和保存图像。以下是关于这个项目的一些关键知识点和相关技术的详细解释: 1. ...
Java 画图板程序设计与实现 Java 画图板是使用 Java 语言编写的图形绘制程序,提供了基本的绘图功能,如画笔、直线、椭圆、矩形等,用户可以使用该程序绘制简单的图形。下面我们将对 Java 画图板程序进行详细的分析...
《Windows画图板:探索动态画图的魅力》 Windows画图板,作为一款简单易用的图形编辑软件,是微软操作系统内置的一个基础工具,尤其适合初学者和儿童进行简单的绘图活动。它提供了丰富的基本画图功能,让用户能够...
《VC++实现的简易画图板程序解析》 在计算机编程领域,开发一款类似Windows画图板的小程序是一项常见的实践项目,它可以帮助初学者更好地理解图形用户界面(GUI)编程和基本的图像处理技术。本篇文章将深入探讨一个...
在本文中,我们将深入探讨如何使用C#编程语言高仿Windows自带的画图板应用程序,实现各种绘图功能。这个项目旨在提供一个类似的用户界面和功能集,包括打开和保存图片、文字绘制、多种形状绘制、画刷和画笔操作、...
QT画图板是一个基于Qt库开发的图形用户界面应用程序,主要功能是提供一个交互式的画布,用户可以在上面进行绘图操作。对于初学者来说,QT画图板是一个极好的学习资源,它展示了Qt库在图形绘制和用户交互方面的强大...
在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 库来创建一个简易的画图板应用程序。MFC 是微软为Windows平台提供的一种C++类库,它简化了Windows API的使用,使得开发Windows应用程序更加高效...
在本文档中,我们将探讨如何使用QtCreator来编写一个画图板程序。画图板是一个基础且功能丰富的应用,常常作为学习图形用户界面(GUI)编程的一个入门项目。本文将重点介绍Qt的GUI框架、主要组件以及编程概念。 ###...
【标题】"仿XP画图板"是一款基于JAVA编程语言开发的应用程序,旨在模拟Windows XP操作系统中的经典画图工具。这个项目是为那些希望学习或熟悉GUI(图形用户界面)编程和事件处理的初学者设计的,同时也为用户提供了...
下面我们将深入探讨 Canvas API 以及如何使用这些资源来实现一个画图板。 首先,`index.html` 是网页的主文件,它定义了页面的基本结构。在这个项目中,`index.html` 应该包含一个 `<canvas>` 元素,它是整个画图板...
【JAVA简易画图板】是一个基于Java编程语言开发的简单绘图应用程序,它为用户提供了一个基本的图形界面,用户可以通过这个界面进行简单的绘画操作。这个程序包含了一些基本的绘图功能,如绘制形状、使用铅笔工具以及...
在Android平台上,开发一个画图板应用涉及到许多关键的技术点,包括用户交互、图形渲染、数据存储以及资源管理等。以下是对"基于Android系统的画图板"这一主题的详细解析: 1. **用户交互**:Android系统提供了丰富...
Java画图板应用是一种基于Java编程语言开发的图形用户界面(GUI)程序,它提供了类似Windows操作系统内置画图板的功能。这个程序的核心是利用Java的Swing或JavaFX库来构建用户界面,允许用户进行基本的绘图操作,如...
在这个"java swing 画图板"项目中,开发者仿照了Windows操作系统中的“画图”程序,提供了一个基本的绘图环境。下面将详细讨论相关的Java Swing知识点。 1. **组件(Components)**:在Swing中,JFrame是窗口的基础...
在本文中,我们将深入探讨基于VC++的"vc画图板源码",这是一个用于创建图形界面应用程序的项目。这个项目的核心是利用MFC(Microsoft Foundation Classes)库,它是Microsoft为C++开发者提供的一个用于构建Windows...
在本项目中,我们探索的是一个简易的"画图板代码"实现,它允许用户绘制直线、矩形和椭圆。这个基础的图形界面应用程序旨在提供一个简单的平台,让用户能够进行基本的图形创作。我们将深入讨论这个画图板的核心功能和...
这款画图板工具名为“学生制作的画图板”,它并非是一般的图形软件,而是专为学生学习和作业设计的。在教育场景中,学生常常需要完成一些涉及绘制的作业,如绘制地理图表、生物细胞模型、物理光学路径等。这些作业...
在本文中,我们将深入探讨如何使用Microsoft Foundation Classes (MFC) 创建一个自定义的画图板应用程序。MFC 是微软为Visual C++ 提供的一套类库,它封装了Windows API,使得开发者能够更容易地构建Windows 应用...