中南大学JAVA课程设计报告Word格式文档下载.docx
《中南大学JAVA课程设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《中南大学JAVA课程设计报告Word格式文档下载.docx(14页珍藏版)》请在冰点文库上搜索。
本次试验简单的采用流式布局,当然我们希望画图的时候有一个特定的区域,以便我们能够控制边界,采用一个JPanel,将这个JPanel添加到JFrame中,我们在面板中画各种图形。
当然我们还要有一些按钮,来标明形状和颜色。
因此,我们的整个界面分为两大部分,上面为形状颜色按钮,下面为画图板。
JAVA中自带有画出各种图形的函数,只需要我们获取一个画笔,然后利用这个画笔来调用各种方法即可。
但是我们怎么控制利用我们的鼠标来画图呢,及在这里,鼠标就相当于一支笔。
当然是利用监听器。
在这个程序中,我们要用到三种监听器,ActionListener、MouseListener、MouseMotionListener。
前面我们讲到我们的窗体中上一层是按钮,而这些按钮就要用到ActionListener监听器,后面两个监听器主要是在画图的过程中用到。
我们再来看看我们的这个画图板要实现的功能。
首先,要能画出各种图形,包括矩形,圆形,三角形,直线,曲线,当然还可以有其他的一些图形,在这里只列出一些有代表性的图形;
其次,要能改变图形的颜色,当然,JAVA中的颜色有多种,在这里也只列出一些有代表性的颜色,比如黑色,红色,蓝色,绿色,黄色。
在JAVA中画图有两种方式,一种直接画线条,里面还是背景色,还有一种就是用填充的方式来画图。
这两种方式在JAVA中都有自带的方法,只需要我们去调用就可以了。
然后,要能知道画出的图形是什么图形,以及画出图形的面积大小。
这就需要在界面中添加两个文本框来显示形状和面积。
在这里,要注意的是这个面积是根据鼠标移动的位置来计算的,算出的单位是像素。
最后,要有个橡皮擦按钮,只要一点击这个按钮,鼠标就像一块橡皮一样,可以擦掉画出来的图形。
到此,我们已经分析的本次试验的大体结构以及要实现的目标功能。
我们现在应该要对本次实验有一个清晰的认识,通过上面的分析,我们知道,本次试验只需要一个窗体JFrame、一个面板JPanel、三个监听器以及若干按钮就可以实现。
2、程序结构
3、功能及说明
在本次实验中,总共设计了三个类,每个类都有特定的作用,下面就意义介绍着三个类。
DrawSe.java
Mouse.java
Shape.java
(1)、DrawSe.java
首先我们开始这个项目的第一步是从界面开始的,创建一个界面比较简单,就是那么几个语句。
在DrawSe.java这个类的设计中,除了主方法,只有两个方法,其中一个就是将那个界面展示在我们面前,还有一个就是要实现重绘的功能。
熟悉了整个类的功能后我们来分解这个类,让我们来看看这些功能具体是怎么实现出来的。
首先在publicvoidshowDS()这个方法中,主要功能是要将那个界面展示在我们面前,当然首先要用到以下语句来创建一个窗体。
JFramejf=newJFrame();
jf.setTitle("
画图板二"
);
jf.setSize(800,600);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setLocationRelativeTo(null);
jf.setLayout(newFlowLayout());
jf.setVisable(true);
这些语句是固定的,每个界面用到的可能也就是这些,这些语句的作用分别是:
设置标题、设置大小、设置关闭方法、设置居中、设置流式布局、使之可见。
此时一运行程序就会产生出一个JFrame窗体。
在我们前面的分析中,在这个窗体中应该有一些按钮、文本框、JPanel等,因此,下面我们就来一步步添加这些组件。
在这里,我们要注意的一点就是所有组件的添加要放在setVisable()之前,这样才能让添加的组件可见。
我们的形状按钮中,我们将它设置成一个个小的图片,要添加图片我们可以用到ImageIcon,首先利用下面语句创建出这些ImageIcon对象。
ImageIconim1=newImageIcon(this.getClass().getResource("
直线.PNG"
));
ImageIconim2=newImageIcon(this.getClass().getResource("
矩形.PNG"
ImageIconim3=newImageIcon(this.getClass().getResource("
椭圆.PNG"
ImageIconim4=newImageIcon(this.getClass().getResource("
三角.PNG"
ImageIconim5=newImageIcon(this.getClass().getResource("
曲线.PNG"
ImageIconim6=newImageIcon(this.getClass().getResource("
橡皮擦.PNG"
ImageIconim7=newImageIcon(this.getClass().getResource("
动直线.PNG"
ImageIconim8=newImageIcon(this.getClass().getResource("
扇形.PNG"
ImageIconim9=newImageIcon(this.getClass().getResource("
多边.PNG"
创建好这些对象后,使用下面的语句创建按钮对象,并将这些图片添加到按钮中。
其中jb11.setActionCommand("
)语句的作用是设置点击该按钮是应该获取的信息,即当点击这个按钮时就会返回"
这个字符串。
JButtonjb11=newJButton(im6);
jf.add(jb11);
jb11.setPreferredSize(newDimension(22,22));
jb11.setActionCommand("
JButtonjb1=newJButton(im1);
//添加形状按钮
jf.add(jb1);
jb1.setPreferredSize(newDimension(22,22));
jb1.setActionCommand("
JButtonjb2=newJButton(im2);
jf.add(jb2);
jb2.setPreferredSize(newDimension(22,22));
jb2.setActionCommand("
JButtonjb3=newJButton(im3);
jf.add(jb3);
jb3.setPreferredSize(newDimension(22,22));
jb3.setActionCommand("
JButtonjb4=newJButton(im4);
jf.add(jb4);
jb4.setPreferredSize(newDimension(22,22));
jb4.setActionCommand("
JButtonjb8=newJButton(im5);
jf.add(jb8);
jb8.setPreferredSize(newDimension(22,22));
jb8.setActionCommand("
JButtonjb10=newJButton(im7);
jb10.setPreferredSize(newDimension(22,22));
jb10.setActionCommand("
jf.add(jb10);
JButtonjb9=newJButton(im8);
jb9.setPreferredSize(newDimension(22,22));
jb9.setActionCommand("
jf.add(jb9);
JButtonjb14=newJButton(im9);
jf.add(jb14);
jb14.setPreferredSize(newDimension(22,22));
jb14.setActionCommand("
然后添加颜色按钮,这和添加形状按钮类似,只是颜色安妮中什么都不要放,只要设置一下按钮的背景颜色就可以了,也不要重新设置点击按钮时的监听信息。
这样,颜色按钮就可以和形状按钮区分开来,点击按钮,当返回一个字符串时,就是形状按钮,当返回一个空字符串就是颜色按钮。
接下来添加文本框用来显示信息。
jla1=newJLabel("
形状"
jf.add(jla1);
jte1=newJTextField(8);
jf.add(jte1);
jla2=newJLabel("
面积"
jf.add(jla2);
jte2=newJTextField(8);
jf.add(jte2);
这个方法的最后一部分就是将这些按钮添加监听器,添加监听器的方法是先拿到监听器的对象,然后利用jb1.addActionListener(mouse)这个语句来添加监听器。
由于监听是一个接口,因此我们不能直接new出监听器接口的对象,必须要先用一个子类来实现监听器接口,new出子类的对象,在这个语句中mouse就是一个实现了ActionListener接口的类的对象。
在这个类中还有一个重绘的方法publicvoidpaint(Graphicsg),这个方法是JPanel中的,在这里重写这个方法,在程序运行的时候,程序会自动调用这个方法。
这个方法的作用是在我们移动后拉伸窗体的时候,我们画出的图形还是在那里不变。
(2)、Mouse.java
前面我们也说了,监听器是一个接口,不能直接实例化,我们要先用一个子类来实现这个接口,因此,这个类的主要作用就是实现监听器接口。
这个类共实现了以下三个监听器MouseListener,ActionListener,MouseMotionListener
实现接口的时候就要重写接口中的抽象方法。
首先我们看看按钮添加的动作监听器,我们要点击按钮,要获取一个返回值,根据这个返回值来做出不同的反应。
比如当我们点击矩形按钮时,我们的画笔就要能够画出一个矩形来,如果我们还点了红色按钮,那么,我们的画笔就要能画出一个红色矩形来。
那么,怎么才能实现这些功能呢,这就是监听器中的抽象方法要做的事。
动作监听器中比较简单,只需要获取按钮中的信心,如果是一个字符串,就不要管,留给另外两个监听器去处理。
当返回一个空字符串时,就是动作监听器要处理的事了。
返回空字符串表示点击的是颜色按钮,要将画笔的颜色设置为该按钮的背景色。
因此首先要获取该按钮的背景色,然后将画笔设置为该颜色。
publicvoidactionPerformed(ActionEvente){//动作监听器
str=e.getActionCommand();
if("
"
.equals(str)){
JButtonjb=(JButton)e.getSource();
color=jb.getBackground();
g.setColor(color);
str="
;
//默认为直线
}
}
当我们点击形状按钮时,就要画出各种形状的图形出来。
当我们点击直线时,画笔要画出一条直线。
前面说过JAVA中有画各种图形的方法,只需要我们去调用就可以了。
JAVA中有直接画直线的方法,因此画直线比较简单。
if("
g.drawLine(x1,y1,x2,y2);
Shapeline=newShape(x1,x2,y1,y2,"
直线"
color);
//创建出一个Shape对象
shape[index++]=line;
//保存下画出的直线
jte1.setText("
jte2.setText("
+0);
画矩形的方法如下:
g.drawRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),
Math.abs(y1-y2));
Shapeju=newShape(x1,x2,y1,y2,"
矩形"
shape[index]=ju;
//存下矩形
index++;
floats=Math.abs(x1-x2)*Math.abs(y1-y2);
+(int)s);
System.out.println("
矩形面积:
+s);
g.drawOval(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),
Shapetuo=newShape(x1,x2,y1,y2,"
椭圆"
shape[index++]=tuo;
doubles=3.14*Math.abs(x1-x2)*Math.abs(y1-y2)/4;
椭圆面积:
Shapes1=newShape(x1,x2,y1,y2,"
三角形"
shape[index++]=s1;
x=x1;
//暂时保存x1,y1,x2,y2这两个坐标,以便第二次点击时用到
y=y1;
x0=x2;
y0=y2;
.equals(str)){
if(x!
=x0){//str为“三角”且为第二次点击***
g.drawLine(x,y,x1,y1);
Shapes2=newShape(x,x1,y,y1,"
shape[index++]=s2;
g.drawLine(x0,y0,x1,y1);
Shapes3=newShape(x0,x1,y0,y1,"
shape[index++]=s3;
doublea,b,c,p,s;
a=Math.sqrt(Math.abs(x1-x0)*Math.abs(x1-x0)+Math.abs(y1-y0)*Math.abs(y1-y0));
b=Math.sqrt(Math.abs(x-x0)*Math.abs(x-x0)+Math.abs(y-y0)*Math.abs(y-y0));
c=Math.sqrt(Math.abs(x1-x)*Math.abs(x1-x)+Math.abs(y1-y)*Math.abs(y1-y));
p=(a+b+c)/2;
s=Math.sqrt(p*(p-a)*(p-b)*(p-c));
jte1.setText("
jte2.setText("
System.out.println("
三角形面积:
}
到这里,这个类的基本功能已经实现的差不多了。
(3)、Shape.java
这个类的主要作用是定义一个形状类,将画出的图形保存。
4、操作方法
在画图板的这个小项目中,首先从主函数进入
publicstaticvoidmain(String[]args){//主方法
DrawSeds=newDrawSe();
ds.showDS();
调用showDs()这个方法,将界面展示在我们面前。
若我们不点任何按钮直接在面板中画图,就会画出一条直线(默认是直线)。
当我们点击按钮时,进入动作监听的方法,获取返回值,根据返回值的类型做出不同的反应。
比如点击矩形按钮就会进入publicvoidmouseReleased(MouseEvente)这个方法画出一个矩形。
每当一个图形画好后,在文本框的显示区显示出该图形的形状以及面积。
当点击颜色按钮时,又进入动作监听器,设置画笔的颜色。
5、实验结果
刚开始运行:
画图: