Java图形用户界面实验报告
- 格式:doc
- 大小:144.50 KB
- 文档页数:13
西安邮电大学(计算机学院)课内实验报告实验名称:图形用户界面专业名称:计算机科学与技术班级:计科1405班学生姓名:高宏伟学号:04141152指导教师:刘霞林实验日期:2016.11.24一、实验目的了解图形用户界面基本组件窗口、按钮、文本框、选择框、滚动条等的使用方法,了解如何使用布局管理器对组件进行管理,以及如何使用Java 的事件处理机制。
二、实验要求1. 掌握使用布局管理器对组件进行管理的方法。
2. 理解Java 的事件处理机制,掌握为不同组件编写事件处理程序的方法。
3. 掌握编写独立运行的窗口界面的方法。
4. 掌握组件的使用方法。
5. 了解对话框的使用方法。
三、实验内容(一)算术测试。
✧实验要求:编写一个算术测试小软件,用来训练小学生的算术能力。
程序由3个类组成,其中Teacher类对象负责给出算术题目,并判断回答者的答案是否正确;ComputerFrame类对象负责为算术题目提供视图,比如用户可以通过ComputerFrame类对象提供的GUI界面看到题目,并通过该GUI界面给出题目的答案;MainClass是软件的主类。
✧程序模板:Teacher.javapublic class Teacher{ int numberOne,numberTwo;String operator="";boolean right;public int giveNumberOne(int n){ numberOne=(int)(Math.random()*n)+1;return numberOne;}public int giveNumberT wo(int n){ numberTwo=(int)(Math.random()*n)+1;return numberTwo;}public String giveOperator(){ double d=Math.random();if(d>=0.5)operator="+";elseoperator="-";return operator;}public boolean getRight(int answer){ if(operator.equals("+")){ if(answer==numberOne+numberTwo)right=true;elseright=false;}else if(operator.equals("-")){ if(answer==numberOne-numberTwo)right=true;elseright=false;}return right;}}ComputerFrame.javaimport java.awt.*;import java.awt.event.*;public class ComputerFrame extends Frame implements ActionListener { TextField textOne,textTwo,textResult;Button getProblem,giveAnwser;Label operatorLabel,message;Teacher teacher;ComputerFrame(String s){ super(s);teacher=new Teacher();setLayout(new FlowLayout());textOne=【代码1】 //创建textOne,其可见字符长是10textTwo=【代码2】 //创建textTwo,其可见字符长是10textResult=【代码3】 //创建textResult,其可见字符长是10operatorLabel=new Label("+");message=new Label("你还没有回答呢");getProblem=new Button("获取题目");giveAnwser=new Button("确认答案");add(getProblem);add(textOne);add(operatorLabel);add(textTwo);add(new Label("="));add(textResult);add(giveAnwser);add(message);textResult.requestFocus();textOne.setEditable(false);textTwo.setEditable(false);【代码4】//将当前窗口注册为getProblem的ActionEvent事件监视器【代码5】//将当前窗口注册为giveAnwser的ActionEvent事件监视器【代码6】//将当前窗口注册为textResult的ActionEvent事件监视器 setBounds(100,100,450,100);setVisible(true);validate();addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0);}});}public void actionPerformed(ActionEvent e){ if(【代码7】) //判断事件源是否是getProblem{ int number1=teacher.giveNumberOne(100);int number2=teacher.giveNumberTwo(100);String operator=teacher.givetOperator();textOne.setText(""+number1);textTwo.setText(""+number2);operatorLabel.setText(operator);message.setText("请回答");textResult.setText(null);}if(【代码8】) //判断事件源是否是giveAnwser{ String answer=textResult.getText();try{int result=Integer.parseInt(answer);if(teacher.getRight(result)==true){ message.setText("你回答正确");}else{ message.setText("你回答错误");}}catch(NumberFormatException ex){ message.setText("请输入数字字符");}}textResult.requestFocus();validate();}}MainClass.javapublic class MainClass{ public static void main(String args[]){ ComputerFrame frame;frame=【代码9】//创建窗口,其标题为:算术测试}}✧实验后的练习:1. 给上述程序增加测试乘、除的功能。
实验五Java的图形用户界面
一、实验目的与要求
1.掌握AWT包中常用组件的使用方法。
2.熟悉布局管理器的适用场合,采用布局管理器进行界面的布局。
二、实验内容
1.程序改错
下列程序都有三个错误,按题中的要求,纠正错误并调试程序。
(1)问题描述:下面程序执行时会发生错误,请修改并调试程序。
程序的功能是在屏幕上输出如图5-9所示的图案,图案中每个方格大小是20*20像素。
2、P258实验五程序改错第一题。
3、编程题:设计一个Applet程序sy5_2.java,界面如图5-13所示,其中有两个按钮,当输入完姓名和密码内容后,按“确认”按钮出现图5-14所示界面,当按下“重新输入”按钮,又回到图5-13所示界面。
提示:用两个面板组件,第一个面板放3个标签和两个文本域,第二个面板放两个按钮。
图5-13
图5-14。
河南工业大学实验报告专业班级: 计科F1401 学号: 姓名:实验单元八【实验目的】1.掌握程序设计方法2.掌握程序设计方法3.掌握程序设计方法4.掌握程序设计方法5、掌握使用????程序设计方法。
【实验环境】安装了jdk软件的PC机。
【实验内容】第18章、图形界面。
【程序功能内容说明】设置标签的显示字体、大小背景及颜色。
【实验程序原码】import java.awt.Dimension ;import java.awt.Color ;import java.awt.Font ;import java.awt.Point ;import javax.swing.JLabel ;import javax.swing.JFrame ;public class JLabelDemo02{public static void main(String args[]){JFrame frame = new JFrame("Welcome To MLDN") ;JLabel lab = new JLabel("MLDN",JLabel.CENTER) ; // 实例化标签对象Font fnt = new Font("Serief",Font.ITALIC + Font.BOLD,28) ;lab.setFont(fnt) ;frame.add(lab) ; // 将组件件入到面板之中Dimension dim = new Dimension() ;frame.setBackground(Color.WHITE) ;//设置窗体的背景颜色dim.setSize(200,70) ;frame.setSize(dim) ;Point point = new Point(300,200) ; // 设置坐标frame.setLocation(point) ;frame.setVisible(true) ;}};【实验结果】【该程序关键技术说明】JFrame作为基本容器用于创建窗口。
java图形用户界面实验报告
《Java图形用户界面实验报告》
一、实验目的
本次实验旨在通过使用Java图形用户界面(GUI)工具,掌握Java程序设计的
基本原理和方法,加深对Java语言的理解和应用。
二、实验内容
1. 使用Java的Swing和AWT等图形用户界面工具,设计一个简单的窗口界面。
2. 在窗口中添加按钮、文本框、标签等组件,并实现相应的事件处理。
3. 编写Java代码,实现窗口界面的布局和交互功能。
三、实验步骤
1. 首先,创建一个新的Java项目,并新建一个窗口类。
2. 在窗口类中使用Swing和AWT工具,设计窗口界面,并添加所需的组件。
3. 编写事件处理方法,实现按钮点击、文本框输入等操作的响应。
4. 调试和运行程序,检查窗口界面的布局和功能是否符合预期。
四、实验结果
经过一系列的编码和调试,最终实现了一个简单的Java图形用户界面程序。
该
程序具有良好的界面布局和交互功能,用户可以通过按钮点击和文本框输入进
行相应的操作。
五、实验总结
通过本次实验,我深入理解了Java图形用户界面的设计原理和实现方法,掌握
了Swing和AWT等GUI工具的使用技巧。
在今后的学习和工作中,我将继续
加强对Java编程的实践,不断提升自己的技能水平,为今后的软件开发工作打
下坚实的基础。
实验报告2013学年第 1 学期任课老师:课程名称Java语言与系统设计班级学号姓名实验名称实验4 图形用户界面(GUI)实验时间实验环境PC/windows2000/2003/XP/Jcreator Pro/JBuild/JDK Eclipse/。
实验目的和内容要求实验4 图形用户界面(GUI)1.实验目的掌握布局管理器的使用,掌握JFrame框架、JButton按钮、JLabel标签、JTextField文本框、对话框等组件的使用及其事件处理。
2.实验内容(1)编程:创建有一个文本框和三个按钮的小程序。
当按下每个按钮时,使不同的文字显示在文本框中。
(2)编程:创建一用户登录界面,接受用户输入的帐号和密码,给三次输入机会。
实验过程记录(学生写出实验步骤及中间的结果与现象,在实验中做了什么,怎么做,发生的现象和中间结果)实验步骤:1.建立一个类继承JFrame,然后初始化界面,给三个按钮添加监听器,点击之后进行判断。
然后根据接收信息是不同的文字出现在文本框中。
2.登录界面共有5个键,登录提示有只能输入3次密码,在登录按钮上添加监听器,每次点击之后都判断,不成功就显示失败,成功就弹出成功弹窗;实验结果分析与总结1、程序运行结果(请提供所完成的各道题运行结果界面截图):2、实验过程中的发现与收获,未解决或需进一步解决的问题:实现的比较简单,界面做的非常简陋,但还算实现了基本功能。
指导老师评阅意见指导老师:***填写内容时,可把表格扩大。
附:实验源程序代码//第一题package com.miao;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTextField;public class Example extends JFrame implements ActionListener { private static final long serialVersionUID = 1L;private JPanel jPanel;private JButton jButton1,jButton2,jButton3;private JTextField tf1;public void test(String title) {init();}private void init() {jPanel=new JPanel();jPanel.setLayout(new FlowLayout());tf1=new JTextField(20);jButton1=new JButton("按钮1");jButton2=new JButton("按钮2");jButton3=new JButton("按钮3");jButton1.addActionListener(this);jButton2.addActionListener(this);jButton3.addActionListener(this);jPanel.add(tf1);jPanel.add(jButton1);jPanel.add(jButton2);jPanel.add(jButton3);this.add(jPanel);this.setSize(300,100);this.setResizable(false);this.setTitle("Show");this.setVisible(true);this.addWindowListener(new WindowAdapter() {public void windowClosing(final WindowEvent e) {System.exit(0);}});}public void actionPerformed(ActionEvent e) {if(e.getSource().equals(jButton1)){tf1.setText("lalalalalala");}if(e.getSource().equals(jButton2)){tf1.setText("heihei");}if(e.getSource().equals(jButton3)){tf1.setText("gaga");}}public static void main(String[] args){String s="文字转化";Example test=new Example();test.test(s);}}//第二题,登录package com.miao;import java.awt.HeadlessException;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.JPanel;import javax.swing.JPasswordField;import javax.swing.JTextField;@SuppressWarnings("serial")public class Test extends JFrame {JLabel lbl1 = new JLabel("用户名:");JLabel lbl2 = new JLabel("密码:");JTextField txt = new JTextField("admin",20);JPasswordField pwd = new JPasswordField(20);JButton btn = new JButton("登录");JPanel pnl = new JPanel();private int error = 0;public void text() throws HeadlessException {init();}private void init() {this.setResizable(false);this.setTitle("测试");pnl.add(lbl1);pnl.add(txt);pnl.add(lbl2);pnl.add(pwd);pnl.add(btn);this.getContentPane().add(pnl);btn.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if (error<3&&"123".equals(new String(pwd.getPassword()))){// pnl.removeAll();// JLabel lbl3 = new JLabel();// pnl.add(lbl3);JOptionPane.showMessageDialog(null,"登陆成功!");}else if(error < 3){JOptionPane.showMessageDialog(null,"密码输入错误,请再试一次");error++;}else if(error >=3){JOptionPane.showMessageDialog(null,"对不起,您不是合法用户"); // txt.setEnabled(false);// pwd.setEnabled(false);// btn.setEnabled(false);error++;}}});}public static void main(String[] args) {// String str="测试";Test frm = new Test();frm.text();frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setBounds(100, 100, 300, 120);frm.setVisible(true);frm.setLocationRelativeTo(null);// frm.text("测试");}}。
java图形实验报告篇一:java实验报告实验六Java图形用户界面信息工程学院Java程序设计实习报告JAVA图形用户界面实验六Java图形用户界面1.实验目的(1)掌握图形用户界面基本组件。
(2)了解如何使用布局管理器对组件进行管理。
(3)掌握Java事件处理机制。
2.实验内容实验题1 编写一个模拟计算器的程序,使用面板和网格布局,添加一个文本框,10个数字按钮(0-9),4个加减乘除按钮,一个等号按钮,一个清除按钮,要求将计算公式和结果显示在文本框中。
运行结果:实验报告的内容与格式按任课教师的要求书写。
加法:主要代码:private void initComponents() {setStub(null); jButton1 = new ; jButton2 = new ; jButton3 = new ; jButton4 = new ; jButton5 = new ;jButton6 = new ; jButton7 = new ; jButton8 = new ; jButton9 = new ; jButton10 = new ; jButton11 = new ; jButton12 = new ; jButton13 = new ; jButton14 = new ; jButton15 = new ; jTextField1 = new ;jButton1.setText("3"); jButton1.addActionListener(new {public voidactionPerformed( evt) {jButton2.setText("1"); jButton2.addActionListener(new}); } jButton1ActionPerformed(evt); {public voidactionPerformed( evt) {jButton3.setText("5"); jButton3.addActionListener(new}); } jButton2ActionPerformed(evt); {public voidactionPerformed( evt) {jButton4.setText("2"); jButton4.addActionListener(new}); } jButton3ActionPerformed(evt); {public voidactionPerformed( evt) {jButton5.setText("6");}); } jButton4ActionPerformed(evt);jButton5.addActionListener(new {public voidactionPerformed( evt) {jButton6.setText("8"); jButton6.addActionListener(new}); } jButton5ActionPerformed(evt); {public voidactionPerformed( evt) {jButton7.setText("4"); jButton7.addActionListener(new}); } jButton6ActionPerformed(evt); {public voidactionPerformed( evt) {jButton8.setText("7"); jButton8.addActionListener(new}); } jButton7ActionPerformed(evt); {public voidactionPerformed( evt) {jButton9.setText("0");jButton9.addActionListener(new}); } jButton8ActionPerformed(evt); {public voidactionPerformed( evt) {jButton10.setText("9"); jButton10.addActionListener(new}); } jButton9ActionPerformed(evt); {public voidactionPerformed( evt) {jButton11.setText("\u00f7"); jButton11.addActionListener(new}); } jButton10ActionPerformed(evt); {public voidactionPerformed( evt) {jButton12.setText("\u00d7"); jButton12.addActionListener(new}); } jButton11ActionPerformed(evt); {public voidactionPerformed( evt) {jButton13.setText("-"); jButton13.addActionListener(new}); } jButton12ActionPerformed(evt); {public voidactionPerformed( evt) {篇二:JAVA实验报告附件2:实验报告封皮20 —学年第学期课程实验报告学院:计算机科学技术专业:软件工程班级:姓名:学号:任课教师:王薇实验日期:XX年 11 月 02 日-1--2-实验日期:XX年 11 月 06 日-3--4-篇三:java图形用户界面实验报告南京工程学院实验报告课程名称 JAVA基础实验项目名称图形用户界面设计实验学生班级实验学生姓名学号同组学生姓名无实验时间 XX年11月实验地点实验成绩评定指导教师签字年月日一、实验目的和要求1.目的:掌握java AWT及Swing组件的使用方法,包括窗口、框架、对话框、布局方式、面板、文本编辑器、按钮、组合框等,合理利用委托事件处理模型,掌握不同组件,不同事件的事件处理方法,设计出能够响应事件的java图形用户界面。
JA V A实验报告实验目的:学习组件布局和组件事件的处理。
实验要求:编写程序,实现成绩的查询和排序。
具体要求为:①选择合适的布局管理设计美观的界面,包含成绩输入、成绩查询、成绩排序功能。
②成绩输入:从界面上输入学生的学号和成绩,点击“确认”按钮进行保存。
③成绩查询:输入学生的学号,点击“查询”按钮,显示该学生成绩。
④成绩排序:点击“排序”按钮,将按成绩从高到低显示学生的学号和成绩。
实验步骤:①定义一个类表示学生,包含学号和成绩两个域;②用java提供的V ector或Arrays类(也可使用自定义类)存储输入的学生信息,使用java 提供的方法或使用自定义方法实现学生信息的查询和排序;③界面设计,可考虑以下的界面设计策略:ⅰ在界面上放置成绩查询、成绩输入、成绩排序三个按钮和一个文本区:按下成绩输入按钮则弹出一个窗口,该窗口上有学号输入和成绩输入文本框,输入完毕关闭窗口后输入的学生信息出现在文本区中;按下成绩查询按钮弹出一个与成绩输入类似的窗口,在学号文本框中输入学号后,在成绩文本框中立即显示成绩;按下排序按钮,在文本区中显示排序后的结果。
ii 可在界面上用三个Panel分别实现查询、输入、排序功能,分别在各Panel上放置按钮、文本框、文本区等控件。
此步中,要求学生会使用各种布局管理器设计美观的界面。
④为程序添加事件处理机制。
ⅰ为查询、输入、排序按钮添加事件处理;ⅱ为学号、成绩输入文本框添加事件处理;ⅲ为窗口的关闭添加事件处理。
import java.awt.*;import java.awt.event.*;public class jj extends Frame implements ActionListener {private Button add=new Button("添加");private Button search=new Button("查询");private Button up=new Button("排序");private Label snLabel=new Label("学号");private Label gLabel=new Label("成绩");private List list=new List();private TextField taskInput =new TextField();public class WindowsCloser extends WindowAdapter{public void WindowClosing (WindowEvent we){System.exit(0);}}private viod setup(){Panel buttons=new Panel();buttons.setLayout(new FlowLayout());buttons.add(add);buttons.add(search);buttons.add(up);Panel input =new Panel();input.setLayout(new BorderLayout());input.add("West",snLabel);input.add("Center",taskInput);input.add("west",snLabel);input.add("Center",taskInput);Panel top=new Panel();top.setLayout(new GridLayout(2,1));}public TaskList(){}public void actionperformed(ActionEvent ae) {}public static void main (String args[]){List t1 =new List();}}。
J a v a面向对象编程实验报告题目: 数组与图形化界面专业:班级:学号:姓名:太原工业学院计算机工程系年月日一、实验目的与要求1.掌握Java编程中的数组的应用2.掌握Java GUI编程的应用以及API的查阅3.掌握Java GUI 窗体容器、布局管理器、基本组件、事件的注册实验内容Java GUI实现如下图简单计算器三、实施步骤1.创建类CalculatorDemo , 继承JFramepackage abc;import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.ActionListener;import java.util.Collection;import java.util.HashMap;import java.util.Map;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTextField;public class CalculatorDemo extends JFrame{/*结果输入框*/private JTextField result;/*操作键之前缓存*/private StringBuilder beforeCache = new StringBuilder();/*操作键之后缓存*/private StringBuilder afterCache = new StringBuilder();/*清除键*/private JButton clean;/*数字键*/private JButton[] numberButs = new JButton[10];/*操作键*/private Map<String,JButton> operKeyMap= new HashMap<String,JButton>();/*操作标识*/private boolean operFlag = false;public void setOperFlag(boolean operFlag) {this.operFlag = operFlag;}public CalculatorDemo(){initComp();initMainWindow();addListenerHandler();}/*初始化组件*/private void initComp(){/*清除按钮初始化*/clean = new JButton("清除");/*结果按钮初始化*/result= new JTextField(10);/*数字键初始化*/for(int i=0;i<10;i++){numberButs[i]=new JButton(""+i);}/*操作键的初始化*/operKeyMap.put("jia", new JButton("+"));operKeyMap.put("jian", new JButton("-"));operKeyMap.put("chen", new JButton("*"));operKeyMap.put("dengyu", new JButton("="));operKeyMap.put("dian", new JButton("."));operKeyMap.put("chu", new JButton("/"));}/*** 初始化Main窗体* **/private void initMainWindow(){this.setSize(300, 300);this.setLocation(350, 350);this.add(result,BorderLayout.NORTH);JPanel keyPanle = new JPanel();//设置JPanel的布局(GridLayout)GridLayout gl = new GridLayout(4,4);keyPanle.setLayout(gl);keyPanle.add(numberButs[7]);keyPanle.add(numberButs[8]);keyPanle.add(numberButs[9]);keyPanle.add(operKeyMap.get("chu"));keyPanle.add(numberButs[4]);keyPanle.add(numberButs[5]);keyPanle.add(numberButs[6]);keyPanle.add(operKeyMap.get("chen"));keyPanle.add(numberButs[1]);keyPanle.add(numberButs[2]);keyPanle.add(numberButs[3]);keyPanle.add(operKeyMap.get("jian"));keyPanle.add(numberButs[0]);keyPanle.add(operKeyMap.get("dian"));keyPanle.add(operKeyMap.get("jia"));keyPanle.add(operKeyMap.get("dengyu"));this.add(clean,BorderLayout.CENTER);this.add(keyPanle,BorderLayout.SOUTH);this.setVisible(true);}/*** 注册事件监听* **/private void addListenerHandler(){/*主窗体事件处理*/this.addWindowListener(new MainWindowListenerImpl());/*清除按钮事件处理*/clean.addMouseListener(new MouseListenerImpl());clean.addActionListener(new CleanButtonActionListenerImpl(this));/*数字键事件处理*/for(JButton numBut:numberButs){numBut.addMouseListener(new MouseListenerImpl());numBut.addActionListener(new NumKeyActionListenerImpl(this));}/*操作键事件处理*/Collection<JButton> operButtons= operKeyMap.values();for(JButton operBut:operButtons){operBut.addMouseListener(new MouseListenerImpl());operBut.addActionListener(new OperKeyActionListenerImpl(this));} }/*入口*/public static void main(String[] args) {// TODO Auto-generated method stubnew CalculatorDemo();}public JTextField getResult() {return result;}public StringBuilder getBeforeCache() {return beforeCache;}public StringBuilder getAfterCache() {return afterCache;}public JButton getClean() {return clean;}public JButton[] getNumberButs() {return numberButs;}public Map<String, JButton> getOperKeyMap() {return operKeyMap;}public boolean isOperFlag() {return operFlag;}}2.新建类 CleanButtonActionListenerImpl, 在类的基础上建立接口ActionListener package abc;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JTextField;public class CleanButtonActionListenerImpl implements ActionListener { private CalculatorDemo cal;public CleanButtonActionListenerImpl(CalculatorDemo c){this.cal = c;}@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stubJTextField result = cal.getResult();/*获取输入文本*/String resultText= result.getText();if(!resultText.equals("")){//文本內容, 重置為空result.setText("");//緩存清空StringBuilder beforeCache = cal.getBeforeCache();StringBuilder afterCache = cal.getAfterCache();beforeCache.delete(0, beforeCache.length());afterCache.delete(0, afterCache.length());cal.setOperFlag(false);}}}3.新建类 MainWindowListenerImpl, 在类的基础上建立接口WindowListenerpackage abc;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;public class MainWindowListenerImpl implements WindowListener {@Overridepublic void windowActivated(WindowEvent arg0) { // TODO Auto-generated method stub}@Overridepublic void windowClosed(WindowEvent arg0) { // TODO Auto-generated method stub}/**** 当主窗体关闭时, 推出整个程序* */@Overridepublic void windowClosing(WindowEvent arg0) { // TODO Auto-generated method stubSystem.out.println("退出计算器程序");System.exit(0);}@Overridepublic void windowDeactivated(WindowEvent arg0) { // TODO Auto-generated method stub}@Overridepublic void windowDeiconified(WindowEvent arg0) { // TODO Auto-generated method stub}@Overridepublic void windowIconified(WindowEvent arg0) { // TODO Auto-generated method stub}@Overridepublic void windowOpened(WindowEvent arg0) {// TODO Auto-generated method stubSystem.out.print("窗体打开");}}4.新建类 MouseListenerImpl, 在类的基础上建立接口MouseListener package abc;import java.awt.Color;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.util.EventObject;import javax.swing.JButton;public class MouseListenerImpl implements MouseListener {private EventObject event;@Overridepublic void mouseClicked(MouseEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent event) {// TODO Auto-generated method stubJButton bt = (JButton)event.getSource();bt.setForeground(Color.RED);}@Overridepublic void mouseExited(MouseEvent event) {// TODO Auto-generated method stubJButton bt = (JButton)event.getSource();bt.setForeground(Color.BLACK);}@Overridepublic void mousePressed(MouseEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void mouseReleased(MouseEvent arg0) {// TODO Auto-generated method stub}}5. 新建类 NumKeyActionListenerImpl, 在类的基础上建立接口ActionListener package abc;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.EventObject;import javax.swing.JButton;import javax.swing.JTextField;public class NumKeyActionListenerImpl implements ActionListener {private CalculatorDemo cal;public NumKeyActionListenerImpl(CalculatorDemo c){this.cal = c;}@Overridepublic void actionPerformed(ActionEvent event) {// TODO Auto-generated method stub/*获取当前操作的数字键对象*/JButton but =(JButton)event.getSource();/** 1.在没有按下操作键之前,* 所有的数字键的值被缓存到beforeCache*显示到输入框中*//*获取数字键对应的输入值*/String numVaue=but.getText();if(!cal.isOperFlag()){cal.getBeforeCache().append(numVaue);cal.getResult().setText(cal.getBeforeCache().toString());}else{cal.getAfterCache().append(numVaue);cal.getResult().setText(cal.getAfterCache().toString());}}}6.新建类 OperKeyActionListenerImpl, 在类的基础上建立接口ActionListenerpackage abc;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.EventObject;import javax.swing.JButton; import javax.swing.JTextField;public class OperKeyActionListenerImpl implements ActionListener { private CalculatorDemo cal;public OperKeyActionListenerImpl(CalculatorDemo c){this.cal = c;}/* 如果按下操作键盘, 依据操作键表示的操作类型, 执行相关的计算计算步骤: 1>取得操作键之前的缓存输入2>获取操作键之后的数字键输入3>获取相关操作类型, 执行计算*/@Overridepublic void actionPerformed(ActionEvent event) {// TODO Auto-generated method stub/*获取操作键*/JButton but = (JButton)event.getSource();//置空结果显示cal.getResult().setText("");cal.setOperFlag(true);}}四、实验结果五、出现的问题及解决的方法。
西安邮电大学(计算机学院)课内实验报告实验名称:图形用户界面专业名称:计算机科学与技术班级:计科1405班学生姓名:高宏伟学号:04141152指导教师:刘霞林实验日期:2016.11.24一、实验目的了解图形用户界面基本组件窗口、按钮、文本框、选择框、滚动条等的使用方法,了解如何使用布局管理器对组件进行管理,以及如何使用Java 的事件处理机制。
二、实验要求1. 掌握使用布局管理器对组件进行管理的方法。
2. 理解Java 的事件处理机制,掌握为不同组件编写事件处理程序的方法。
3. 掌握编写独立运行的窗口界面的方法。
4. 掌握组件的使用方法。
5. 了解对话框的使用方法。
三、实验内容(一)算术测试。
✧实验要求:编写一个算术测试小软件,用来训练小学生的算术能力。
程序由3个类组成,其中Teacher类对象负责给出算术题目,并判断回答者的答案是否正确;ComputerFrame类对象负责为算术题目提供视图,比如用户可以通过ComputerFrame类对象提供的GUI界面看到题目,并通过该GUI界面给出题目的答案;MainClass是软件的主类。
✧程序模板:Teacher.javapublic class Teacher{ int numberOne,numberTwo;String operator="";boolean right;public int giveNumberOne(int n){ numberOne=(int)(Math.random()*n)+1;return numberOne;}public int giveNumberT wo(int n){ numberTwo=(int)(Math.random()*n)+1;return numberTwo;}public String giveOperator(){ double d=Math.random();if(d>=0.5)operator="+";elseoperator="-";return operator;}public boolean getRight(int answer){ if(operator.equals("+")){ if(answer==numberOne+numberTwo)right=true;elseright=false;}else if(operator.equals("-")){ if(answer==numberOne-numberTwo)right=true;elseright=false;}return right;}}ComputerFrame.javaimport java.awt.*;import java.awt.event.*;public class ComputerFrame extends Frame implements ActionListener{ TextField textOne,textTwo,textResult;Button getProblem,giveAnwser;Label operatorLabel,message;Teacher teacher;ComputerFrame(String s){ super(s);teacher=new Teacher();setLayout(new FlowLayout());textOne=【代码1】//创建textOne,其可见字符长是10textTwo=【代码2】//创建textTwo,其可见字符长是10textResult=【代码3】//创建textResult,其可见字符长是10operatorLabel=new Label("+");message=new Label("你还没有回答呢");getProblem=new Button("获取题目");giveAnwser=new Button("确认答案");add(getProblem);add(textOne);add(operatorLabel);add(textTwo);add(new Label("="));add(textResult);add(giveAnwser);add(message);textResult.requestFocus();textOne.setEditable(false);textTwo.setEditable(false);【代码4】//将当前窗口注册为getProblem的ActionEvent事件监视器【代码5】//将当前窗口注册为giveAnwser的ActionEvent事件监视器【代码6】//将当前窗口注册为textResult的ActionEvent事件监视器setBounds(100,100,450,100);setVisible(true);validate();addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);}});}public void actionPerformed(ActionEvent e){ if(【代码7】) //判断事件源是否是getProblem{ int number1=teacher.giveNumberOne(100);int number2=teacher.giveNumberTwo(100);String operator=teacher.givetOperator();textOne.setText(""+number1);textTwo.setText(""+number2);operatorLabel.setText(operator);message.setText("请回答");textResult.setText(null);}if(【代码8】) //判断事件源是否是giveAnwser{ String answer=textResult.getText();try{int result=Integer.parseInt(answer);if(teacher.getRight(result)==true){ message.setText("你回答正确");}else{ message.setText("你回答错误");}}catch(NumberFormatException ex){ message.setText("请输入数字字符");}}textResult.requestFocus();validate();}}MainClass.javapublic class MainClass{ public static void main(String args[]){ ComputerFrame frame;frame=【代码9】//创建窗口,其标题为:算术测试}}✧实验后的练习:1. 给上述程序增加测试乘、除的功能。
(二)信号灯。
✧实验要求:编写一个带有窗口的应用程序。
在窗口的北面添加一个下拉列表,该下拉列表有“”、“”和“”三个选项。
在窗口的中心添加一个画布,当用户在下拉列表选择某项后,画布上绘制相应的信号灯。
✧程序模板:SignalCanvas.javaimport java.awt.*;public class SignalCanvas extends Canvas{ int red,green,yellow,x,y,r;SignalCanvas(){ setBackground(Color.white);}public void setRed(int r){ red=r;}public void setGreen(int g){ green=g;}public void setYellow(int y){ yellow=y;}public void setPosition(int x,int y){ this.x=x;this.y=y;}public void setRadius(int r){ this.r=r;}public void paint(Graphics g){ if(red==1){ g.setColor(Color.red);}else if(green==1){ g.setColor(Color.green);}else if(yellow==1){ g.setColor(Color.yellow);}g.fillOval(x,y,2*r,2*r);}}SignalFrame.javaimport java.awt.*;import java.applet.*;import java.awt.event.*;public class SignalFrame extends Frame implements ItemListener{ Choice choice;SignalCanvas signal=null;String itemRed="红灯",itemYellow="黄灯",itemGreen="绿灯";public SignalFrame(){ choice=【代码1】//创建choice【代码2】//创建choice添加itemRed【代码3】//创建choice添加itemYellow【代码4】//创建choice添加itemGreen【代码5】//将当前窗口注册为choice的ItemEvent事件监视器add(choice,BorderLayout.NORTH);try{ Class cs=Class.forName("SignalCanvas");signal=(SignalCanvas)cs.newInstance();add(signal,BorderLayout.CENTER);}catch(Exception e){ add(new Label("您还没有编写SignalCanvas类"),BorderLayout.CENTER);}setBounds(100,100,360,300);setVisible(true);validate();addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);}});}public void itemStateChanged(ItemEvent e){ String item= 【代码6】// choice返回被选中的条目int w=signal.getBounds().width;int h=signal.getBounds().height;int m=Math.min(w,h);signal.setRadius(m/6);if(item.equals(itemRed)){ if(signal!=null){ signal.setRed(1);signal.setYellow(0);signal.setGreen(0);signal.setPosition(w/3,0);signal.repaint();}}else if(item.equals(itemYellow)){ if(signal!=null){ signal.setRed(0);signal.setYellow(1);signal.setGreen(0);signal.setPosition(w/3,h/3);signal.repaint();}}else if(item.equals(itemGreen)){ if(signal!=null){ signal.setRed(0);signal.setYellow(0);signal.setGreen(1);signal.setPosition(w/3,2*h/3);signal.repaint();}}}}SignalMainClass.javapublic class SignalMainClass{ public static void main(String args[]){ SignalFrame frame;frame=new SignalFrame() ;frame.setTitle("信号灯");}}✧实验后的练习:1. 改进上述程序,在下拉列表中增加“熄灭所有灯”选项,当选中该项时,画布上绘制一个半径为0,位置是(0,0)的圆。