`
微Smile
  • 浏览: 34897 次
  • 性别: Icon_minigender_2
  • 来自: 湖南
社区版块
存档分类
最新评论

画图板开发第一阶段感悟

    博客分类:
  • java
 
阅读更多

  到今天为止,我的第一个java开发的小项目——画图板终于可以算是出来了。都记不清楚做了有多久了,只清晰的记得一开始以为挺简单的,哪个该怎样怎样做好像有那么个大体思路,但等真动起手来才发现有那么多问题根本就不清楚。先不说细节,就是整体的逻辑思想也并未形成,只是实现一个算一个。所以仅从这点就收获经验,逻辑思路最重要,在未搞清楚整体思路前不能急于动手。
    不过,怎么说勉强还算完成了,最终结果如下:



    
    下面就来具体说说这看起来小小的画图板的实现吧,对于尚处于菜鸟之菜鸟的我,还真不简单啊。
      首先,它实现的功能有 1 画几种形状:曲线(为默认)、直线、矩形、多边行、椭圆、圆角矩形这几种;2 最挫的橡皮擦功能(你看到的断断续续的就是被擦掉的, );3 重绘功能(即画板最小化后重新显示所画的形状会被重新显示)。
      也就这几种了,至于这上面的菜单、形状按钮、颜色按钮等都是用各种布局管理器个加上去的,这个后面再说。先说说每个实现的功能的关键点吧。
      最简单的,画直线和矩形:
     
shape = new DrawLine(x1, y1, x2, y2, color);

      此处,DrawLine是一个继承了shape这个抽象类的画直线的类,类中调用了Graphics中的drawLine()方法。
       矩形:
      
shape = new DrawRect(x1, y1, x2, y2, Color.orange);
同理,在此类中调用drawRect(x,y,weight,height)方法。
        注意:此方法中(x,y)是指矩形左上角的坐标。关键:x可设置为Math.min(x1,x2),y可设置为Math.min(y1,y2),这样就可以画任意方向的矩形。
        曲线:
        首先,曲线可以看做是无数条直线所组成的,只要把起始坐标和下一个坐标交换即可。看代码:
// 默认为画曲线,即默认为铅笔
	public void mouseDragged(MouseEvent e) {
		//前者为曲线,后者为橡皮擦
		if (command == "images/draw6.jpg" || command == "images/draw2.jpg") {
			System.out.println("鼠标拖动");
			x2 = e.getX();
			y2 = e.getY();
			System.out.println("默认为画曲线");
			if(command == "images/draw6.jpg") {
				shape = new DrawLine(x1, y1, x2, y2, color);
			} else {
				shape = new DrawLine(x1,y1,x2,y2,Color.white);
			}
			x1 = x2;
			y1 = y2;
			shape.draw(g);//画曲线
			shapes.add(shape);//保存曲线到shapes队列中
		}

	}

       别看这段代码这么短,可没少费我时间 后来发现是在画布上加了MouseActionListener的监听器,却没有加MouseMontionListener这个控制鼠标拖动的监听器,要知道mouseDragged()这个方法是在MouseMontionListener中才有滴。真汗!附:后面的那个else就是实现那最挫的橡皮擦的,你会发现,都是在鼠标拖动时绘制直线,只是把颜色设置为白色。只要再把绘制的直线加粗就可以得到橡皮擦的效果,此还有待笔者研究,期待牛人指点! 呵呵
         多边形的绘制和曲线差不多,得注意的地方是得在鼠标释放后恢复现场。看代码:
public void mousePressed(MouseEvent e) {
System.out.println("鼠标按下");
		x1 = e.getX();
		y1 = e.getY();
		//画多边形时保存点击第一下时的位置
		if(command == "images/draw13.jpg" && flag == 0) {
			x0 = x1;
			y0 = y1;
			x3 = x1;
			y3 = y1;
			flag ++;
		}
}
 public void mouseClicked(MouseEvent e) {
		 System.out.println("被点击");
		 System.out.println(e.getX()+ " " + e.getY());
		 if( command == "images/draw13.jpg" && e.getClickCount() ==2 ) {
			 shape = new DrawLine(x0,y0,x3,y3,color.green);
			 shape.draw(g);
			 shapes.add(shape);//保存到内存
			 flag =0;//恢复现场
		 }
	 }

注意:读者可以试试没有flag==0这句的后果,我想说的就很明显了。

      实现的功能就是这些,再说说那仿xp画板的界面。其实就是几个JPanel容器堆积木似地堆出来的。拿左边的形状工具栏而言,把每个加有图片的按钮加到一个JPanel中,把这个JPanel加到JToolBar这个工具栏中,工具栏加到整个JFrame的西边,大体轮廓就出来了。再用setBorder()等设置一下组件的边界,那酷似原版的颜色工具栏就完成了。
      需要注意的是,有的组件得设置为透明,如下:
JPanel ColCheck = new JPanel(new GridLayout(2, 12));
for (int i = 0; i < 24; i++) {
			JLabel jl = new JLabel();// 循环得到16个标签
			jl.setBorder(new BevelBorder(BevelBorder.LOWERED, Color.white,
					Color.gray));
			jl.setOpaque(true);//设置组件透明
			jl.setBackground(ColGroup[i]);// 设置标签颜色
			jl.setPreferredSize(new Dimension(15, 15));// 设置按钮的大小
			
			ColCheck.add(jl);
		
		}

这是未设置透明时的效果:

     
      到此为止,这是全部已经实现的功能,但是此结果却离我想要达到的效果还有一定距离,比如面板不能缩放、颜色还不能选取、不能画不同粗细的线条等,都尚待完善。在此,再次像各位牛人请教哈。

      最后附录一些开发这次项目(算是个项目吧,虽然小)的其他技术方面的感悟或注意点:
       1 必须在setVisible(true)之后得到画布,在之前添加组件,否则有可能组件显示不出来,貌似曾经遇到过此情况。
        2 系统自动调用的paint(Graphics g)方法中的画布参数是从JFrame上面得到滴,若自己从别的JPanel jp上面得到画布则需注意得把它赋给JFrame上的画布,即this.g = jp.getGraphics();再传参。
        3 在按钮组ButtonGroup中加JButton得不到谁选中了,只有加JRadioButton才能得到它的选中命令,并且JRadioButton默认为未被选中,当鼠标点击一下按钮时,状态改变。
        注意:用到JRadioButton时还得设置一个按钮组ButtonGroup(在awt包中),才能保证单选。
       4  要自己定义组件的大小和位置时,得设布局管理器为null,用setbround(),传四个参数
       5 最重要滴,在代码设计上,一般得把监听器类和主类分开,注意构造函数的传参使用。这次在这点上久摔了大跟头,导致整个的代码看上去凌乱无章,耗费了大量时间。
       6 经常性的打印结果,对调试代码有好处。     
  • 大小: 48.7 KB
  • 大小: 24.5 KB
4
1
分享到:
评论

相关推荐

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

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

    C#开发的简单画图板

    C# 开发的简单画图板 含源代码 C# 开发的简单画图板 含源代码 C# 开发的简单画图板 含源代码

    小小画图板的开发,java课程设计源代码

    本次我们关注的项目是“小小画图板”的开发,这是一个利用Java编程语言实现的简单图形编辑器。下面,我们将深入探讨这个项目的各个知识点,并分析其背后的编程原理和技术应用。 首先,我们要理解Java作为一种面向...

    QTcreator写画图板

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

    JAVA开发的画图板

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

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

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

    画图板,window画图板

    Windows画图板,作为一款简单易用的图形编辑软件,是微软操作系统内置的一个基础工具,尤其适合初学者和儿童进行简单的绘图活动。它提供了丰富的基本画图功能,让用户能够轻松地进行创意表达。本文将深入探讨Windows...

    画图板软件开发和设计

    在本项目中,我们主要探讨的是使用Java编程语言开发一个画图板软件的过程。这个软件设计的核心目标是提供一个用户友好的界面,让用户能够进行基本的绘画操作,如选择颜色、线条宽度,以及绘制直线、曲线、圆形等图形...

    java画图板程序代码

    1. Java 画图板程序的结构 Java 画图板程序的结构主要包含了以下几个部分: (1)主窗口(JFrame):用于显示画板的主窗口。 (2)工具栏(JToolBar):提供了基本的绘图工具,如画笔、直线、椭圆、矩形等。 (3...

    Java画图板应用

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

    QT画图板详例

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

    画图板_Vc_

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

    仿XP画图板

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

    基于qt实现的画图板

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

    JavaFx开发Windows画图板工具

    本项目“JavaFx开发Windows画图板工具”旨在模仿Windows操作系统内置的画图应用,为用户提供一个简单的绘图环境。 首先,JavaFX的Scene类是构建应用界面的基础,它包含了所有可视组件和交互行为。在这个画图板工具...

    基于c++开发画图板

    在本项目中,我们主要探讨的是如何利用C++语言来开发一个类似Windows自带的画图应用程序。这个项目对于初学者来说是一个很好的实践,因为它涵盖了基本的图形用户界面(GUI)编程和事件处理,同时也能帮助理解C++在...

    Java实现隐形画图板开发

    NULL 博文链接:https://1975417219.iteye.com/blog/1982691

    canvas 画图板.zip

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

    Java简易画图板

    【Java简易画图板】是一个基于Java编程语言开发的简单图形绘制工具,它为用户提供了一个基本的画布,用户可以通过各种绘图工具进行创作。这个程序包含了一系列基础的图形元素和编辑功能,如直线、铅笔、圆形和矩形,...

Global site tag (gtag.js) - Google Analytics