`
沐刃青蛟
  • 浏览: 6954 次
  • 性别: 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画图板java画图板

    java画图板java画图板java画图板

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

    用java实现的windows画图板的简单模式,对于java初学者的事件触发器学习有很好的帮助。。。

    win10画图板软件下载

    win10画图板下载,解压点击即可用 win10画图板下载,解压点击即可用 win10画图板下载,解压点击即可用 win10画图板下载,解压点击即可用 win10画图板下载,解压点击即可用 win10画图板下载,解压点击即可用 win10...

    画图板源码示例画图板源码示例

    画图板源码示例画图板源码示例画图板源码示例

    C# 高仿 Windows 画图板

    C# 高仿 Windows 画图板,实现图片的打开/保存/文字绘制/矩形/圆形/椭圆形/圆角矩形/画刷/画笔/喷枪/曲线/取色等功能。

    仿windows画图板

    仿windows画图板程序,基本实现windows画图板的功能

    画图板_Vc_

    类似Windows画图板的小程序,功能和界面全部模仿于Windows自带的画图板,界面如截图。功能主要有: 手绘线、简单图形、文字输入、图块拖放、重复撤销、画面缩放、打开保存图片文件

    JAVA开发的画图板

    本程序完成的是一个类似于Windows画图板的画图程序,由于不是开发和设计专业的绘图和图像制作软件,所以,完成的程序的简单功能包括以下几项: 1.新建 2.打开或保存 3.绘制一些基本的图形组件 4.用鼠标在绘图板上单击...

    JAVA简易画图板

    简易画图板。有基本形状绘制,加铅笔和橡皮,可撤销清除。可保存打开。

    仿XP画图板

    自己做的一个仿XP的画图板练手 实现了画图板大多数常用功能 界面和XP的画图板非常相似 可以给新手参考用

    canvas 画图板.zip

    canvas 画图板的实现

    仿XP画图板.rar

    功能有: 1、工具栏中功能:截图并保存,橡皮擦,取色笔,铅笔,刷子,喷枪,文本框,直线,矩形,椭圆,圆角矩形等功能 2、颜色选择功能(2处):底部...4、清空画图面板的功能 5、打开图片,保存修改后的图片的功能

    C#画图板-直线、曲线、矩形

    C#画图板包含直线、曲线、矩形等,还可以选择线条颜色。

    画图板,window画图板

    动态画图,画图板,可以动态画图,基本画图功能

    Qt画图板_源代码

    Qt实现的简易画图板,可供初学者参考学习。

    java swing 画图板

    java swing 实现的仿照win的画图板,欢迎交流学习

    基于qt实现的画图板

    基于qt实现的画图板,内含基本的绘画功能,例如选取画笔,填充,图像打开和保存等。

    C#画图板程序

    C#编写的画图板程序,能实现画刷、画笔,以及直线方形和椭圆等功能,还有文件菜单栏的相关功能

    QT画图板详例

    未入门学习QT的神程序画图板.内含各种功能以及使用范例,

Global site tag (gtag.js) - Google Analytics