一、实验目的:(详见指导书,宋体小四)掌握Java图形Swing组件和布局管理器的使用;掌握使用Java事件处理机制的使用。
掌握图形界面的各种控件的使用,如:标签、文本框、按钮、复选框、列表框、窗框等。
二、实验要求:(详见指导书,宋体小四)1.采用布局管理器进行界面的布局;2. 学会对不同的事件用相应的事件处理器;3.写出实验报告。
要求记录编译和执行Java程序当中的系统错误信息提材示,并给出解决办法。
(附运行界面、源代码)。
三、实验内容及过程:(宋体小四,)1.编写Application程序,在JFrame中加入2个按钮(JButton)和1个标签(Label),单击两个按钮,显示按钮的标签于Label。
过程:首先建立一个主类,让主类继承JFrame 类实现 ActionListener 接口。
然后在主类中声明变量JButton ,JPanel。
创建一个面板panel然后在创建两个按钮,面板使用流式布局,然后将两个按钮添加到面板中,再将面板添加到窗体的上部。
然后在建立一个标签,将标签添加到窗体的下方。
最后要在两个按钮失眠分别添加监听器,保证当触动按钮时按钮上的字体能够出现在标签上。
2.在JApplet中加入1个文本框,1个文本区,每次在文本框中输入文本,回车后将文本添加到文本区的最后一行。
过程:首先创建一个窗体,窗体里插入一个文本框和一个文本区,分别将文本框放在窗体的上方,文本区放在窗体的下方。
重点就是在文本框上添加一个键盘监听器,保证当触动Enter键时能够将文本框中的内容复制到文本区中即可。
3.设计一个简单计算器,如下图所示。
在“操作数”标签右侧的两个文本框输入操作数,当单击操作符+,-,×,÷按钮时,对两个操作数进行运算并将结果填入到“结果”标签右侧的文本框中。
过程:首先创建一个窗体,窗体中含有七个组将,分别是三个可编辑文本框,四个按钮,按钮上分别是+、-、*、/,三个文本框中上面两个用来存储操作数,最后一个用来存储操作结果。
要在四个按钮上添加监听器,保证当触动对应的按钮时就能够产生对应的操作,得到正确的结果。
4.编写Application程序,在JFrame中加入80个按钮,分20行4列,用GridLayout布局方式,按钮背景为黄色(Color.yellow),按钮文字颜色为红色(Color.red)。
过程:首先创建一个窗体,窗体中使用的格式布局,由于是80个按钮,所以控制20行4列,而且按钮的数目太多,所以使用for 循环进行控制。
最后要注意按钮的背景颜色是黄色,字母颜色第红色,所以调用函数but.setBackground(Color.yellow);以及but.setForeground(Color.red)分别用来控制按钮的背景颜色和字母颜色。
5.编写Java JApplet程序,使它在浏览器中通过响应功能按钮的点击事件绘制各种简单的几何图形(矩形、圆形、扇形、多边形和他们的填充效果),并且能够通过接收传递参数控制图形的绘制。
过程:首先定义一个主类继承JApplet实现ActionListener接口,在窗体中添加四个按钮,按钮分别命名为“矩形”,“圆”,“扇形”,“多边形”,然后实例化一个Graphics 类的对象g,调用g.drawLine()绘制矩形,调用g.drawArc,并通过控制角度分别用来绘制圆以及扇形,调用drawLine(),并定义两个整数数组,分别用来表示x轴和y轴,每个数组都有五个元素。
调用setColor()以及fillArc(),fillLine()分别用来对矩形,圆...进行颜色的填充。
四、实验中的问题思考及讨论:(列出你实验中出现的问题,及解决的问题和解决的思路)实验一:注意把两个按钮添加到面板中,面板应该使用流式布局。
实验二:注意监听事件中的键盘监听事件,题目中要求必须是按Enter键才会把文本框中的字母传到文本区中,所以此处调用函数e.getKeyChar()==e.VK_ENTER.实验三:这一个题目中的监听器比较多,所以在重写监听器里面的函数时需要注意不要出现低级错误。
实验四:这个实验就是单纯的创建一个窗体,然后向里面增加80个按钮,在这里用到了for循环就简单的多了,注意填充背景颜色以及字母颜色是调用函数setBackground().setForeground()实验五:这个实验就是在窗体中绘制五种图像,并且每个图形的背景颜色不同,其实总的来说调用的函数并不是很多,主要是绘制直线的函数drawLine(),绘制曲线的函数drawArc(),以及确定颜色的函数setColor()还有起到填充作用的函数fillArc(),fillLine().五、实验总结:(简单、准确的总结本次实验的主要内容,个人收获)这次试验用到的只是主要是监听器和绘制图形的函数,相对来说监听器的使用难度更大,而绘制图形的函数相对单调。
通过本次试验我更加熟悉掌握了监听器的使用,以及绘制图形函数的使用。
六、源代码及运行结果实验一:package javaTest;import java.awt.BorderLayout;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JFrame;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JPanel;public class Gui_12 extends JFrame implements ActionListener{JButton[] but=new JButton[2];JLabel lab;JPanel panel;public void init(){setLayout(new BorderLayout());panel=new JPanel();panel.setBounds(0,0,400,200);panel.setLayout(new FlowLayout());but[0]=new JButton("确定");but[1]=new JButton("取消");lab=new JLabel();getContentPane().add(BorderLayout.SOUTH,lab);for(int i=0;i<2;i++){but[i].addActionListener(this);panel.add(but[i]);}getContentPane().add(BorderLayout.NORTH,panel);setBounds(400,200,400,300);setVisible(true);}public void actionPerformed(ActionEvent e){if(e.getSource()==but[0]){lab.setText("");String str=but[0].getText();lab.setText(str);}if(e.getSource()==but[1]){lab.setText("");String str=but[1].getText();lab.setText(str);}}public static void main(String[] args) {// TODO Auto-generated method stubnew Gui_12().init();}}实验二:package javaTest;import javax.swing.*;//import java.awt.*;import java.awt.event.*;public class Gui_3{public static void main(String[] args){JFrame frm=new JFrame("窗体");frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setLayout(null);JTextField input=new JTextField(25);input.setEditable(true);input.setBounds(45,5,400,40);frm.getContentPane().add(input);JTextArea output=new JTextArea(6,25);output.setBounds(45,60,400,200);frm.getContentPane().add(output);A b=new A(input,output);input.addKeyListener(b);frm.setBounds(400,200,500,400);frm.setVisible(true);}}class A implements KeyListener{JTextField input;JTextArea output;public A(JTextField input,JTextArea output) {this.input=input;this.output=output;}public void keyPressed(KeyEvent e ){if(e.getKeyChar()==e.VK_ENTER){String s=input.getText();output.setText(s);}}public void keyReleased(KeyEvent e){}public void keyTyped(KeyEvent e){}}实验三:package javaTest;import javax.swing.*;//import java.awt.*;import java.awt.event.*;public class Gui_6{public static void main(String[] args){JFrame frm=new JFrame("窗体");frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setLayout(null);JLabel label1=new JLabel("操作数");label1.setBounds(10,20,60,30);JTextField input1=new JTextField();input1.setEditable(true);input1.setBounds(80,20,100,30);frm.add(label1);frm.add(input1);JLabel label2=new JLabel("操作数");label2.setBounds(10,80,100,30);JTextField input2=new JTextField();input2.setEditable(true);input2.setBounds(80,80,100,30);frm.add(label2);frm.add(input2);JLabel label3=new JLabel("结果");label3.setBounds(10,140,100,30);JTextField input3=new JTextField();input3.setEditable(true);input3.setBounds(80,140,100,30);frm.add(label3);frm.add(input3);JButton but1=new JButton("+");but1.setBounds(250,20,100,30);frm.add(but1);JButton but2=new JButton("-");but2.setBounds(250,60,100,30);frm.add(but2);JButton but3=new JButton("*");but3.setBounds(250,100,100,30);frm.add(but3);JButton but4=new JButton("/");but4.setBounds(250,140,100,30);but1.addActionListener(new S(input1,input2,input3,but1,but2,but3,but4));but2.addActionListener(new S(input1,input2,input3,but1,but2,but3,but4));but3.addActionListener(new S(input1,input2,input3,but1,but2,but3,but4));but4.addActionListener(new S(input1,input2,input3,but1,but2,but3,but4));frm.add(but4);frm.setBounds(400,200,400,300);frm.setVisible(true);}}class S implements ActionListener{JTextField input1;JTextField input2;JTextField input3;JButton but1;JButton but2;JButton but3;JButton but4;int x,y;public S(JTextField input1,JTextField input2,JTextField input3,JButton but1,JButton but2,JButton but3,JButton but4){this.input1=input1;this.input2=input2;this.input3=input3;this.but1=but1;this.but2=but2;this.but3=but3;this.but4=but4;}public void actionPerformed(ActionEvent e2){try{int x=Integer.parseInt(input1.getText());int y=Integer.parseInt(input2.getText());if(e2.getSource()==but1)input3.setText(""+(x+y));if(e2.getSource()==but2)input3.setText(""+(x-y));if(e2.getSource()==but3)input3.setText(""+(x*y));if(e2.getSource()==but4)input3.setText(""+(x/y));}catch(NumberFormatException e){input3.setText("数字格式异常");}}}实验四:package javaTest;import javax.swing.*;import java.awt.*;public class Gui_4{public static void main(String[] args){JFrame frm=new JFrame("网格布局");frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setLayout(new GridLayout(20,4));for(int i=0;i<80;i++){JButton but=new JButton("确定"+i);but.setBackground(Color.yellow);but.setForeground(Color.red);frm.getContentPane().add(but);}frm.setBounds(400,100,500,600);frm.setVisible(true);}}实验五:package AppletTest;import java.awt.Color;import java.awt.FlowLayout;import java.awt.Graphics;import java.awt.Polygon;import java.awt.event.ActionEvent; import java.awt.event.ActionListener;import javax.swing.JApplet;import javax.swing.JButton;public class AppletTest_4 extends JApplet implements ActionListener{ JButton[] but=new JButton[4];public void init(){setLayout(new FlowLayout());but[0]=new JButton("画矩形");but[1]=new JButton("画圆");but[2]=new JButton("画扇形");but[3]=new JButton("画多边形");for(int i=0;i<4;i++){but[i].addActionListener(this);getContentPane().add(but[i]);}}public void actionPerformed(ActionEvent e){Graphics g=this.getGraphics();if(e.getSource()==but[0]){g.setColor(Color.red);g.drawLine(100, 50, 100, 60);g.fillRect(100, 50, 100, 60);}if(e.getSource()==but[1]){g.setColor(Color.green);g.drawArc(300, 200, 100, 100, 0, 360);g.fillArc(300, 200, 100, 100, 0, 360);}if(e.getSource()==but[2]){g.setColor(Color.black);g.drawArc(300,50, 100, 100, 0, 120);g.fillArc(300,50,100,100,0,120);}if(e.getSource()==but[3]){Polygon p=new Polygon();int[] x=new int[5];int[] y=new int[5];x[0]=200;x[1]=300;x[2]=300;x[3]=250;x[4]=200;y[0]=50;y[1]=50;y[2]=100;y[3]=150;y[4]=100;p.xpoints=x;p.ypoints=y;p.npoints=5;g.setColor(Color.blue);g.fillPolygon(x, y, 5);g.drawPolygon(p);}}}。