实验3:GUI编程
一、实验目的
1. 2. 3. 4.
掌握Java图形组件和布局管理器的使用 理解和掌握Java事件处理机制的使用。 掌握图形界面的各种常用控件的使用。 掌握常用对话框的使用。
二、实验要求
本次实验要求以Eclipse为开发平台。
三、实验内容与步骤
1.编写一个Java Application程序,该程序的运行结果如下所示。
2.编写一个Java Application程序,用GridLayout布局方式放置4个按钮,按钮背景为红、绿、蓝、黄色。该程序的运行结果如下所示。
3.编写一个Java Application程序,该程序的运行结果如下所示。
1
4. 编写程序,要求显示一个 300×100 像素的窗口,窗口中包含两个按钮和一个标签。当点击第一个按钮时,窗口标签中显示”button1 is pressed”; 当点击第二个按钮时,退出应用程序。如下图所示。
5.设计一个简单计算器,如下图所示。在“操作数:”标签右侧的两个文本框输入操作数,当单击操作符+,-,*,/按钮时,对两个操作数进行运算并将结果填入到“结 果:”标签右侧的文本框中。该程序模板已给出,请在要求位置补充若干代码,以完成程序要求的功能。
6.下面的程序是在顶层容器JFrame中创建一个表格,并在表格中显示两行内容。请将程序补充完整并上机运行。
import javax.swing.*; import java.awt.*;
import java.awt.event.*; public class jtable{ public jtable(){
JFrame f=new JFrame();
Object[][] playerInfo={
{\张华\Integer(66),new Integer(32),new Integer(98),new Boolean(false)},
{\阿宝\Integer(82),new Integer(69),new Integer(151),new
2
Boolean(true)},
};
String[] Names={\姓名\语文\数学\总分\及格\
//利用构造方法JTable(Object data[][], Object columnName[])创建表格对象
JTable table=new JTable( (1) );
JScrollPane scrollPane=new JScrollPane( (2) );//表格使用滚动面板 f.getContentPane().add( (3) ); //加到容器中 f.setTitle(\
f.setBounds(100, 100, 400, 200); f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); } }); }
public static void main(String[] args){ jtable b=new (4) ; } }
7.编写一个算术测试小软件,用来训练小学生的算术能力。程序有3个类组成,其中Teacher对象充当监视器,负责给出算术题目,并判断回答者的答案是否正确。ComputerFrame对象负责为算术题目提供视图,比如用户可以通过ComputerFrame对象提供的GUI界面看到题目,并通过该GUI界面给出题目的答案;MailClass是软件的主类。请按如下的程序模板中的要求,将【代码】替换为Java程序代码,以完成该程序。 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.*;
import java.awt.event.*; import javax.swing.*;
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() {
3
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);
【代码1】 //创建textOne,其可见字符长是5 textTwo=new JTextField(5);
textResult=new JTextField(5); operatorLabel=new JLabel(\
operatorLabel.setFont(new Font(\ 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(\ textResult.setActionCommand(\ giveAnwser.setActionCommand(\
teacherZhang.setJTextField(textOne,textTwo,textResult); teacherZhang.setJLabel(operatorLabel,message);
【代码2】//将teacherZhang注册为getProblem的ActionEvent事件监视器 【代码3】//将teacherZhang注册为giveAnwser的ActionEvent事件监视器 【代码4】//将teacherZhang注册为textResult的ActionEvent事件监视器 setVisible(true);
4
validate();
setDefaultCloseOperation(EXIT_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(\ 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(\ textTwo.setText(\ operatorLabel.setText(operator); message.setText(\请回答\ textResult.setText(null); }
else if(str.equals(\
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(\
5