上机实验7 组件及事件处理

实验一 设计以下应用程序的界面

一、实验目的

掌握图形用户界面中的容器和组件的基本设计方法

二、实验内容

1、设计一个用户注册页面

import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class MyJFrame extends JFrame{
	JLabel jl1,jl2,jl3,jl4,jl5,jl6,jl7;
	JTextField jtf;//文本框
	JPasswordField jpf1,jpf2;//密码
	JTextArea jta;
	JButton jb1,jb2;
	JRadioButton jrb1,jrb2;
	JCheckBox jcb1,jcb2,jcb3;
	JComboBox<String> jc;
 public MyJFrame() {
	this.setTitle("注册");
	setBounds(300,300,500,600);
	//设置窗体为流式布局
	//setLayout(new FlowLayout());
	//设置窗体为网格布局
	setLayout(new GridLayout(20,1));
	//空布局
	setLayout(null);
	init();
	setVisible(true);
	setDefaultCloseOperation(EXIT_ON_CLOSE);
	jb1.addActionListener(new ActionListener(){

		@Override
		public void actionPerformed(ActionEvent arg0) {
			String info="";
			info="姓名:"+jtf.getText();
			info+="\r\n"+"密码:"+jpf1.getText();
			info+="\r\n"+"密码:"+jpf2.getText();
			info+="\r\n"+"性别:";
			if (jrb1.isSelected())
				info+=jrb1.getText();
			if (jrb2.isSelected())
				info+=jrb2.getText();
			info+="\r\n爱好:";
			if(jcb1.isSelected())
				info+=jcb1.getText();
			if(jcb2.isSelected())
				info+=jcb2.getText();
			if(jcb3.isSelected())
				info+=jcb3.getText();
			info+="\r\n学历:"+jc.getSelectedItem();
			info+="\r\n简历:"+jta.getText();
			JOptionPane.showMessageDialog(null, info);
		}

	});
	jb2.addActionListener(new ActionListener() {

		@Override
		public void actionPerformed(ActionEvent e) {
		//	System.exit(0);
			//获取事件源对象
			JButton jb=(JButton)e.getSource();
			jtf.setText(jb.getText());
		}
	});
}
 //注册用的组件初始化
 public void init() {
	// TODO Auto-generated method stub
	jl1=new JLabel("用户名:");
	jl2=new JLabel("密码:");
	jl7=new JLabel("再次密码:");
	jl3=new JLabel("简历:");
	jl4=new JLabel("性别:");
	jtf=new JTextField(10);
	jpf1=new JPasswordField(10);
	jpf2=new JPasswordField(10);
	jta=new JTextArea(4,20);
	jb1=new JButton("注册");
	jb2=new JButton("取消");
	jl1.setBounds(100,30,180,30);
	jtf.setBounds(200,30,180,30);
	jl2.setBounds(100, 70, 180, 30);
	jpf1.setBounds(200, 70, 180, 30);
	jl7.setBounds(100, 110, 180, 30);
	jpf2.setBounds(200, 110, 180, 30);
	jl3.setBounds(100, 280, 100, 30);
	jta.setBounds(100,280,400,200);
	JScrollPane jsp=new JScrollPane(jta);
	jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
	jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
	jsp.setBounds(170, 280, 240, 100);
	jb1.setBounds(100, 400, 100, 30);
	jb2.setBounds(220, 400, 100, 30);
	jrb1=new JRadioButton("男");
	jrb2=new JRadioButton("女");
	jl4.setBounds(100, 150, 180, 30);
	jrb1.setBounds(200,150, 100, 30);
	jrb2.setBounds(300,150, 100, 30);
	ButtonGroup bg=new ButtonGroup();
	bg.add(jrb1);
	bg.add(jrb2);
	jl5=new JLabel("爱好:");
	jcb1=new JCheckBox("游戏");
	jcb2=new JCheckBox("篮球");
	jcb3=new JCheckBox("旅游");
	jl5.setBounds(100	, 240, 100, 30);
	jcb1.setBounds(160	, 240, 100, 30);
	jcb2.setBounds(260	, 240, 100, 30);
	jcb3.setBounds(360	, 240, 100, 30);
	jl6=new JLabel("学历:");
	jc=new JComboBox<>();
	jc.addItem("高中");
	jc.addItem("大专");
	jc.addItem("本科");
	jc.addItem("研究生");
	jl6.setBounds(100	, 200, 100, 30);
	jc.setBounds(200	, 200, 100, 30);
	add(jl1);
	add(jtf);
	add(jl2);
	add(jpf1);
	add(jl7);
	add(jpf2);
	add(jl3);
	add(jsp);
	add(jl4);
	add(jrb1);
	add(jrb2);
	add(jl5);
	add(jcb1);
	add(jcb2);
	add(jcb3);
	add(jl6);
	add(jc);
	add(jb1);
	add(jb2);
}
public static void main(String[] args) {
	new MyJFrame();
}
}

2、设计一个用户登录页面

import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class Regulation extends JFrame{
	JLabel jl1,jl2,jl3,jl4;
	JTextField jtf;//文本框
	JPasswordField jpf;//密码
	JButton jb1,jb2;
 public Regulation() {
	this.setTitle("登录窗口");
	setBounds(300,300,500,400);
	//设置窗体为流式布局
	setLayout(new GridLayout(20,1));
	//空布局
	setLayout(null);
	init();
	setVisible(true);
	setDefaultCloseOperation(EXIT_ON_CLOSE);
	jb1.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent arg0) {
			String info="";
			info="姓名:"+jtf.getText();
			info+="\r\n"+"密码:"+jpf.getText();
			JOptionPane.showMessageDialog(null, info);
		}
	});
	jb2.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
		//	System.exit(0);
			//获取事件源对象
			JButton jb=(JButton)e.getSource();
			jtf.setText(jb.getText());
		}
	});
}
 public void init() {
	jl1=new JLabel("企业人事管理系统");
	jl2=new JLabel("用户名:");
	jl3=new JLabel("密码:");
	jtf=new JTextField(10);
	jpf=new JPasswordField(10);
	jb1=new JButton("注册");
	jb2=new JButton("取消");
    jl1.setBounds(150,30,200,60);
	jl2.setBounds(100, 120, 180, 30);
	jtf.setBounds(200, 120, 180, 30);
	jl3.setBounds(100, 180, 180, 30);
	jpf.setBounds(200, 180, 180, 30);
	jb1.setBounds(100, 260, 100, 30);
	jb2.setBounds(220, 260, 100, 30);
	Font font = new Font("楷体",Font.PLAIN,25);
	jl1.setFont(font);
	jl1.setForeground(Color.red);
	add(jl1);
	add(jl2);
	add(jtf);
    add(jl3);
    add(jpf);
	add(jb1);
	add(jb2);
}
public static void main(String[] args) {
	new Regulation(); 
	}
}

3、设计一个计算器的页面

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class CalcJFrame extends JFrame{
  JButton[] jbs;
  JButton jb2;
  JTextField jtf;
  String[] cons={"1","2","3","+","4","5","6","-","7","8","9","*","0",".","/","="};
  JPanel jp1;
  String op1="",ops="";
  double num1,num2;
  //flag=0,表示连续输入操作数,flag=1表示新的操作数开始
  int flag=0;
  public CalcJFrame() {
	setTitle("计算器");
	setBounds(400,300,400,500);
	setDefaultCloseOperation(EXIT_ON_CLOSE);
	init();
	setVisible(true);
	for(int i=0;i<16;i++){
		jbs[i].addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				 JButton jb=(JButton)e.getSource();
				 //获取用户单击的按钮上面的文本
				 char ch=jb.getText().charAt(0);
				 //判断单击的按钮属于哪个类型
				 if (ch>='0' && ch<='9'|| ch=='.'){
					 //如果是数字
					 if (flag==1) {
						 //如果之前进行了计算,文本框中是计算结果,准备接收下一个操作数,op1清空,
						 op1="";
						 //准备接收下一个操作数的连续输入
						 flag=0;
					 }
					 //数字连接,并显示在文本框
					 op1=op1+ch;
				 	 jtf.setText(op1);
				 }else if (ch=='='){//表示要对两个操作数进行运算
					 //记录刚才单击的是等号
					 flag=1;
					 //获取第二个操作数
					 num2=Double.parseDouble(op1);
					 //根据运算符进行计算
					 switch(ops){
						 case "+": num1=num1+num2;break;
						 case "-": num1=num1-num2;break;
						 case "*": num1=num1*num2;break;
						 case "/": if (num2!=0) {num1=num1/num2;}
						 else JOptionPane.showMessageDialog(null, "出错!除数不能为零");
						 num1=0.0;break;
					 }
					 //运算符清空
					 ops="";
					 //将结果放在op1中
					 op1=num1+"";
					 //结果显示在文本框
					 jtf.setText(op1);

				 }else{//单击了运算符,表示第二个操作数录入结束
					 if (ops!=""){//如果连续运算
						 //记录要进行计算,
						 flag=1;

						 //将文本框中的内容保存在num2中
						 num2=Double.parseDouble(jtf.getText());
						 //根据运算符计算结果
						 switch(ops){
							 case "+": num1=num1+num2;break;
							 case "-": num1=num1-num2;break;
							 case "*": num1=num1*num2;break;
//							 case "/": if (num2!=0) num1=num1/num2;break;
						 }
						 //获取运算符到ops中
						 ops=ch+"";
						 //将计算结果放在op1中
						 op1=num1+"";
						 //将结果显示在文本框
						 jtf.setText(op1);
					 }else{//独立的单个运算,只需要记录运算符和第一个操作数
					 ops=ch+"";
					 num1=Double.parseDouble(op1);
					 //保存完第一个操作数后,清空op1内容,准备存储第二个操作数。
					 op1="";
					 }
				 }
			}
		});
		jb2.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				num1=0;
				op1="";
				jtf.setText("");
				jtf.requestFocus();
			}
		});
	}
}
public void init() {
	jtf=new JTextField();
	jtf.setFont(new Font("宋体", 0, 30));
	jtf.setHorizontalAlignment(jtf.RIGHT);
	jtf.setText("");
	add(jtf,BorderLayout.NORTH);
	jp1=new JPanel();
	GridLayout gridLayout = new GridLayout(4,4);
	gridLayout.setHgap(8);
	gridLayout.setVgap(8);
	jp1.setLayout(gridLayout);
	jbs=new JButton[16];
	for(int i=0;i<16;i++){
		jbs[i]=new JButton();
		jbs[i].setText(cons[i]);
		jbs[i].setFont(new Font("宋体",0,30));
		jp1.add(jbs[i]);
	}
	add(jp1);
	jb2=new JButton("清空");
	jb2.setFont(new Font("宋体", 0, 30));
	add(jb2,BorderLayout.SOUTH);
}
public static void main(String[] args) {
	new CalcJFrame();
}
}

实验二 登录设计

一、实验目的

掌握ActionEvent动作事件实现界面的运行

二、实验内容

1、登录窗体类:NullLayout_Example

import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class Regulation extends JFrame{
	JLabel jl1,jl2,jl3,jl4;
	JTextField jtf;//文本框
	JPasswordField jpf;//密码
	JButton jb1,jb2;
 public Regulation() {
	this.setTitle("登录窗口");
	setBounds(300,300,500,400);
	//设置窗体为流式布局
	setLayout(new GridLayout(20,1));
	//空布局
	setLayout(null);
	init();
	setVisible(true);
	setDefaultCloseOperation(EXIT_ON_CLOSE);
	jb1.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent arg0) {
			String info="";
			info="姓名:"+jtf.getText();
			info+="\r\n"+"密码:"+jpf.getText();
			JOptionPane.showMessageDialog(null, info);
		}
	});
	jb2.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
		//	System.exit(0);
			//获取事件源对象
			JButton jb=(JButton)e.getSource();
			jtf.setText(jb.getText());
		}
	});
}
 public void init() {
	jl1=new JLabel("企业人事管理系统");
	jl2=new JLabel("用户名:");
	jl3=new JLabel("密码:");
	jtf=new JTextField(10);
	jpf=new JPasswordField(10);
	jb1=new JButton("注册");
	jb2=new JButton("取消");
    jl1.setBounds(150,30,200,60);
	jl2.setBounds(100, 120, 180, 30);
	jtf.setBounds(200, 120, 180, 30);
	jl3.setBounds(100, 180, 180, 30);
	jpf.setBounds(200, 180, 180, 30);
	jb1.setBounds(100, 260, 100, 30);
	jb2.setBounds(220, 260, 100, 30);
	Font font = new Font("楷体",Font.PLAIN,25);
	jl1.setFont(font);
	jl1.setForeground(Color.red);
	add(jl1);
	add(jl2);
	add(jtf);
    add(jl3);
    add(jpf);
	add(jb1);
	add(jb2);
}
public static void main(String[] args) {
	new Regulation(); 
	}
}

2、用户名密码不正确,给出如下提示

3、用户名为admin密码为123456,则给出如下提示,并进入下个窗体

import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class Login extends JFrame{
	JLabel jl1,jl2,jl3,jl4;
	JTextField jtf;//文本框
	JPasswordField jpf;//密码
	JButton jb1,jb2;
 public Login() {
	this.setTitle("登录窗口");
	setBounds(300,300,500,400);
	//设置窗体为流式布局
	setLayout(new GridLayout(20,1));
	//空布局
	setLayout(null);
	init();
	setVisible(true);
	setDefaultCloseOperation(EXIT_ON_CLOSE);
	jb1.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e) {
			if(jtf.getText().trim().equals("admin")&&
			new String(jpf.getPassword()).trim().equals("123456")) 
			{JOptionPane.showMessageDialog(null, "欢迎进入本系统!");
			new MyFrameArea();}
			else if(jtf.getText().trim().length()==0||
			new String(jpf.getPassword()).trim().length()==0) 
			{JOptionPane.showMessageDialog(null, "用户名或密码不能为空!");}
			else {JOptionPane.showMessageDialog(null, "用户名或密码错误!");}
		}
	});
	jb2.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
		//	System.exit(0);
			//获取事件源对象
			JButton jb=(JButton)e.getSource();
			jtf.setText(jb.getText());
		}
	});
	
}
 public void init() {
	jl1=new JLabel("企业人事管理系统");
	jl2=new JLabel("用户名:");
	jl3=new JLabel("密码:");
	jtf=new JTextField(10);
	jpf=new JPasswordField(10);
	jb1=new JButton("登录");
	jb2=new JButton("取消");
    jl1.setBounds(150,30,200,60);
	jl2.setBounds(100, 120, 180, 30);
	jtf.setBounds(200, 120, 180, 30);
	jl3.setBounds(100, 180, 180, 30);
	jpf.setBounds(200, 180, 180, 30);
	jb1.setBounds(100, 260, 100, 30);
	jb2.setBounds(220, 260, 100, 30);
	Font font = new Font("楷体",Font.PLAIN,25);
	jl1.setFont(font);
	jl1.setForeground(Color.red);
	add(jl1);
	add(jl2);
	add(jtf);
    add(jl3);
    add(jpf);
	add(jb1);
	add(jb2);
}
public static void main(String[] args) {
	new Login(); 
	}
}

4、单击确定,显示如下

计算面积窗体类:MyFrame

在窗体中输入半径值,单击计算显示面积

import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class MyFrameArea extends JFrame{
	JLabel jl1,jl2;
	JTextField jtf;//文本框
	JButton jb;
	double PI=3.14;
	double r,S;
 public MyFrameArea() {
	this.setTitle("计算面积");
	setBounds(300,300,500,400);
	//设置窗体为流式布局
	setLayout(new GridLayout(20,1));
	//空布局
	setLayout(null);
	init();
	setVisible(true);
	setDefaultCloseOperation(EXIT_ON_CLOSE);
	jb.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e) {
			String info="";
			info=jtf.getText();
			r=Double.parseDouble(info);
			S=PI*r*r;
			JOptionPane.showMessageDialog(null, S);
		}});}
 public void init() {
	jl1=new JLabel("请输入半径:");
	jtf=new JTextField();
	jb=new JButton("计算");
    jl1.setBounds(20,34,200,60);
	jtf.setBounds(180, 50, 150, 30);
	jb.setBounds(350, 49, 100, 30);
	Font font = new Font("楷体",Font.PLAIN,25);
	jl1.setFont(font);
	jl1.setForeground(Color.black);
	add(jl1);
	add(jtf);
	add(jb);
}
public static void main(String[] args) {
	new MyFrameArea(); 
	}
}

三、实验指导

  1、涉及到两个窗体类,登录窗体、计算面积窗体,一个测试类

  2、为了完成界面的正常运行,需要对相应的组件添加监视器,并实现接口中的方法

       例如:

             jbt.addActionListener(new ActionListener() {

                          @Override

                          public void actionPerformed(ActionEvent e) {

                          //判断用户输入是否正确的代码

                          }

                  });

3、显示消息的对话框的方法

JOptionPane.showMessageDialog(null, "欢迎进入本系统");

JOptionPane类不仅可以弹出消息对话框,还可以弹出输入对话框(参看API)

实验三 算术测试

一、实验目的

掌握处理ActionEvent事件的方法

二、实验内容

编写一个算术测试小软件,用来训练小学生的算术能力。程序有3个类组成,其中Teacher类的对象充当监视器,负责给出算术题目,并判断回答者的答案是否正确;ComputerFrame类的对象负责为算术题目提供视图,比如用户可以通过ComputerFrame对象提供的GUI界面看到题目,并通过改GUI界面给出题目的答案;MailClass是软件的主类。

三、程序代码

MainClass.java

public class MainClass {
  public static void main(String args[]) {
     ComputerFrame frame;
     frame=new ComputerFrame(); 
     frame.setTitle("算术测试");  
     frame.setBounds(100,100,650,180);
  }
}

ComputerFrame.java

import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextField;
public class ComputerFrame extends JFrame {
   JMenuBar menubar;
   JMenu choiceGrade; //选择级别的菜单
   JMenuItem  grade1,grade2;
   JTextField textOne,textTwo,textResult;
   JButton getProblem,giveAnwser;
   JLabel operatorLabel,message;
   Teacher teacherZhang;
   ComputerFrame() { 
      teacherZhang=new Teacher();
      teacherZhang.setMaxInteger(20);
      setLayout(new FlowLayout());
      menubar = new JMenuBar(); 
      choiceGrade = new JMenu("选择级别"); 
      grade1 = new JMenuItem("幼儿级别");
      grade2 = new JMenuItem("儿童级别");
      grade1.addActionListener(new ActionListener() {
                                   public void actionPerformed(ActionEvent e) {
                                      teacherZhang.setMaxInteger(10);
                                   }
                              });
      grade2.addActionListener(new ActionListener() {
                                   public void actionPerformed(ActionEvent e) {
                                      teacherZhang.setMaxInteger(50);
                                   }
                              }); 
      choiceGrade.add(grade1);
      choiceGrade.add(grade2);
      menubar.add(choiceGrade);
      setJMenuBar(menubar); 
      textOne=new JTextField(5);//创建textOne,其可见字符长是5
      textTwo=new JTextField(5);
      textResult=new JTextField(5);  
      operatorLabel=new JLabel("+");
      operatorLabel.setFont(new Font("Arial",Font.BOLD,20)); 
      message=new JLabel("你还没有回答呢");
      getProblem=new JButton("获取题目");
      giveAnwser=new JButton("确认答案");
      add(getProblem); 
      add(textOne);
      add(operatorLabel);
      add(textTwo);
      add(new JLabel("="));
      add(textResult);
      add(giveAnwser); 
      add(message);
      textResult.requestFocus();
      textOne.setEditable(false);
      textTwo.setEditable(false);
      getProblem.setActionCommand("getProblem");
      textResult.setActionCommand("answer");
      giveAnwser.setActionCommand("answer");
      teacherZhang.setJTextField(textOne,textTwo,textResult);
      teacherZhang.setJLabel(operatorLabel,message); 
      getProblem.addActionListener(teacherZhang);//将teacherZhang注册为getProblem的ActionEvent事件监视器  
      giveAnwser.addActionListener(teacherZhang);//将teacherZhang注册为giveAnwser的ActionEvent事件监视器
      textResult.addActionListener(teacherZhang);//将teacherZhang注册为textResult的ActionEvent事件监视器
      setVisible(true);
      validate();
      setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    }
}

Teacher.java

import java.util.Random;
import java.awt.event.*;
import javax.swing.*;
public class Teacher implements ActionListener {
   int numberOne,numberTwo;
   String operator="";
   boolean isRight;
   Random random;  //用于给出随机数
   int maxInteger;  //题目中最大的整数
   JTextField textOne,textTwo,textResult;
   JLabel operatorLabel,message;
   Teacher() {
      random = new Random(); 
   }
   public void setMaxInteger(int n) {
      maxInteger=n;
   }
   public void actionPerformed(ActionEvent e) {
      String str = e.getActionCommand();
      if(str.equals("getProblem")) {
          numberOne = random.nextInt(maxInteger)+1;//1至maxInteger之间的随机数;
          numberTwo=random.nextInt(maxInteger)+1;
          double d=Math.random(); // 获取(0,1)之间的随机数
          if(d>=0.5)
             operator="+";
          else
            operator="-";  
          textOne.setText(""+numberOne);
          textTwo.setText(""+numberTwo); 
          operatorLabel.setText(operator); 
          message.setText("请回答");
          textResult.setText(null); 
      }
      else if(str.equals("answer")) {
          String answer=textResult.getText();
          try{  int result=Integer.parseInt(answer); 
                if(operator.equals("+")){
                  if(result==numberOne+numberTwo)
                     message.setText("你回答正确");
                  else
                    message.setText("你回答错误");
                }
                else if(operator.equals("-")){
                  if(result==numberOne-numberTwo)
                     message.setText("你回答正确");
                  else
                    message.setText("你回答错误");
                }
          }
          catch(NumberFormatException ex) {
                message.setText("请输入数字字符");
          }
      }
   }
   public void setJTextField(JTextField ... t) {
      textOne=t[0];
      textTwo=t[1];
      textResult=t[2]; 
   }
   public void setJLabel(JLabel ...label) {
      operatorLabel=label[0];
      message=label[1];
   }
}

四、实验指导

1、学习处理事件时,必须掌握事件源、监视器、处理事件的接口这3个概念。

2、JButton对象可以触发ActionEvent事件。为了能监视到此类型事件,事件源必须使用addActionListener方法获得监视器,创建监视器类必须实现接口ActionListener。

3、扩展功能:模仿本实验代码,再增加“小学生”级别;给程序增加测试乘法的功能。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Meteor.792

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值