`
沐刃青蛟
  • 浏览: 7489 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

画图板

阅读更多



先看下实现后的效果:






  
 
<!--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;
		}	
	}
  
总而言之,引用胡哥的话,技术是很好学的(虽然我现在感觉不到)。我想慢慢的我会感觉到的
 
  • 大小: 151.6 KB
分享到:
评论

相关推荐

    java 画图板 windows画图板简单实现

    在Java编程语言中,实现一个简单的Windows画图板是一个经典的练习,它可以帮助初学者更好地理解图形用户界面(GUI)的设计以及事件处理机制。这个项目通常会涉及到Java的Swing库,这是一个用于创建桌面应用程序的GUI...

    画图板 代码 画图板 代码 画图板 代码

    画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码...

    基于qt实现的画图板

    这个"基于qt实现的画图板"项目提供了一个基础的图形用户界面(GUI)应用,让用户能够进行基本的绘画操作,比如选择画笔、填充颜色、打开和保存图像。以下是关于这个项目的一些关键知识点和相关技术的详细解释: 1. ...

    java画图板程序代码

    Java 画图板程序设计与实现 Java 画图板是使用 Java 语言编写的图形绘制程序,提供了基本的绘图功能,如画笔、直线、椭圆、矩形等,用户可以使用该程序绘制简单的图形。下面我们将对 Java 画图板程序进行详细的分析...

    画图板,window画图板

    《Windows画图板:探索动态画图的魅力》 Windows画图板,作为一款简单易用的图形编辑软件,是微软操作系统内置的一个基础工具,尤其适合初学者和儿童进行简单的绘图活动。它提供了丰富的基本画图功能,让用户能够...

    画图板_Vc_

    《VC++实现的简易画图板程序解析》 在计算机编程领域,开发一款类似Windows画图板的小程序是一项常见的实践项目,它可以帮助初学者更好地理解图形用户界面(GUI)编程和基本的图像处理技术。本篇文章将深入探讨一个...

    C# 高仿 Windows 画图板

    在本文中,我们将深入探讨如何使用C#编程语言高仿Windows自带的画图板应用程序,实现各种绘图功能。这个项目旨在提供一个类似的用户界面和功能集,包括打开和保存图片、文字绘制、多种形状绘制、画刷和画笔操作、...

    QT画图板详例

    QT画图板是一个基于Qt库开发的图形用户界面应用程序,主要功能是提供一个交互式的画布,用户可以在上面进行绘图操作。对于初学者来说,QT画图板是一个极好的学习资源,它展示了Qt库在图形绘制和用户交互方面的强大...

    MFC 简易画图板

    在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 库来创建一个简易的画图板应用程序。MFC 是微软为Windows平台提供的一种C++类库,它简化了Windows API的使用,使得开发Windows应用程序更加高效...

    QTcreator写画图板

    在本文档中,我们将探讨如何使用QtCreator来编写一个画图板程序。画图板是一个基础且功能丰富的应用,常常作为学习图形用户界面(GUI)编程的一个入门项目。本文将重点介绍Qt的GUI框架、主要组件以及编程概念。 ###...

    仿XP画图板

    【标题】"仿XP画图板"是一款基于JAVA编程语言开发的应用程序,旨在模拟Windows XP操作系统中的经典画图工具。这个项目是为那些希望学习或熟悉GUI(图形用户界面)编程和事件处理的初学者设计的,同时也为用户提供了...

    canvas 画图板.zip

    下面我们将深入探讨 Canvas API 以及如何使用这些资源来实现一个画图板。 首先,`index.html` 是网页的主文件,它定义了页面的基本结构。在这个项目中,`index.html` 应该包含一个 `&lt;canvas&gt;` 元素,它是整个画图板...

    JAVA简易画图板

    【JAVA简易画图板】是一个基于Java编程语言开发的简单绘图应用程序,它为用户提供了一个基本的图形界面,用户可以通过这个界面进行简单的绘画操作。这个程序包含了一些基本的绘图功能,如绘制形状、使用铅笔工具以及...

    基于android系统的画图板

    在Android平台上,开发一个画图板应用涉及到许多关键的技术点,包括用户交互、图形渲染、数据存储以及资源管理等。以下是对"基于Android系统的画图板"这一主题的详细解析: 1. **用户交互**:Android系统提供了丰富...

    Java画图板应用

    Java画图板应用是一种基于Java编程语言开发的图形用户界面(GUI)程序,它提供了类似Windows操作系统内置画图板的功能。这个程序的核心是利用Java的Swing或JavaFX库来构建用户界面,允许用户进行基本的绘图操作,如...

    java swing 画图板

    在这个"java swing 画图板"项目中,开发者仿照了Windows操作系统中的“画图”程序,提供了一个基本的绘图环境。下面将详细讨论相关的Java Swing知识点。 1. **组件(Components)**:在Swing中,JFrame是窗口的基础...

    vc画图板源码

    在本文中,我们将深入探讨基于VC++的"vc画图板源码",这是一个用于创建图形界面应用程序的项目。这个项目的核心是利用MFC(Microsoft Foundation Classes)库,它是Microsoft为C++开发者提供的一个用于构建Windows...

    画图板代码(一)

    在本项目中,我们探索的是一个简易的"画图板代码"实现,它允许用户绘制直线、矩形和椭圆。这个基础的图形界面应用程序旨在提供一个简单的平台,让用户能够进行基本的图形创作。我们将深入讨论这个画图板的核心功能和...

    学生制作的画图板

    这款画图板工具名为“学生制作的画图板”,它并非是一般的图形软件,而是专为学生学习和作业设计的。在教育场景中,学生常常需要完成一些涉及绘制的作业,如绘制地理图表、生物细胞模型、物理光学路径等。这些作业...

    MFC做的画图板

    在本文中,我们将深入探讨如何使用Microsoft Foundation Classes (MFC) 创建一个自定义的画图板应用程序。MFC 是微软为Visual C++ 提供的一套类库,它封装了Windows API,使得开发者能够更容易地构建Windows 应用...

Global site tag (gtag.js) - Google Analytics