Java实验报告三[数组与图形用户界面]

时间:2024.3.15

    Java面向对象编程

实验报告

   目:数组与图形化界面

   业:               

   级:               

   号:               

   名:               

太原工业学院计算机工程系

       

一、实验目的与要求

   1、掌握Java编程中的数组的应用

   2、掌握Java GUI编程的应用以及API的查阅

   3、掌握Java GUI 窗体容器、布局管理器、基本组件、事件的注册

实验内容

Java GUI实现如下图简单计算器

三、实施步骤

1. 创建类CalculatorDemo继承JFrame

package abc;

import java.awt.BorderLayout;

import java.awt.GridLayout;

importjava.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;

publicclass  CalculatorDemoextends 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>();

    /*操作标识*/

    privateboolean operFlag = false;

  

    publicvoid setOperFlag(boolean operFlag) {

       this.operFlag = operFlag;

    }

    public CalculatorDemo(){

       initComp();

       initMainWindow();

       addListenerHandler();

    }

   /*初始化组件*/

   privatevoid 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窗体

    * **/

    privatevoid 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);  

    }

    /**

     * 注册事件监听

     * **/

    privatevoid 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)); 

      }

    }

    /*入口*/

    publicstaticvoid main(String[] args) {

       // TODO Auto-generated method stub

       new 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;

    }

    publicboolean isOperFlag() {

       return operFlag;

    }

    }

2.新建类 CleanButtonActionListenerImpl,在类的基础上建立接口ActionListener

package abc;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JTextField;

publicclass CleanButtonActionListenerImpl implements ActionListener {

    private CalculatorDemo cal;

    public CleanButtonActionListenerImpl(CalculatorDemo c){

       this.cal = c;

    }

    @Override

    publicvoid actionPerformed(ActionEvent arg0) {

       // TODO Auto-generated method stub

        JTextField  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,在类的基础上建立接口WindowListener

package abc;

import java.awt.event.WindowEvent;

import java.awt.event.WindowListener;

publicclass MainWindowListenerImpl implements WindowListener {

    @Override

    publicvoid windowActivated(WindowEvent arg0) {

       // TODO Auto-generated method stub

    }

    @Override

    publicvoid windowClosed(WindowEvent arg0) {

       // TODO Auto-generated method stub

    }

    /***

     * 当主窗体关闭时,推出整个程序

     * */

    @Override

    publicvoid windowClosing(WindowEvent arg0) {

       // TODO Auto-generated method stub

       System.out.println("退出计算器程序");

       System.exit(0);

    }

    @Override

    publicvoid windowDeactivated(WindowEvent arg0) {

       // TODO Auto-generated method stub

    }

    @Override

    publicvoid windowDeiconified(WindowEvent arg0) {

       // TODO Auto-generated method stub

    }

    @Override

    publicvoid windowIconified(WindowEvent arg0) {

       // TODO Auto-generated method stub

    }

    @Override

    publicvoid windowOpened(WindowEvent arg0) {

       // TODO Auto-generated method stub

            System.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;

publicclass MouseListenerImpl implements MouseListener {

    private EventObject event;

    @Override

    publicvoid mouseClicked(MouseEvent arg0) {

       // TODO Auto-generated method stub

    }

    @Override

    publicvoid mouseEntered(MouseEvent event) {

       // TODO Auto-generated method stub

       JButton bt = (JButton)event.getSource(); 

      

       bt.setForeground(Color.RED);

    }

    @Override

    publicvoid mouseExited(MouseEvent event) {

       // TODO Auto-generated method stub

        JButton bt = (JButton)event.getSource(); 

      

       bt.setForeground(Color.BLACK);

    }

    @Override

    publicvoid mousePressed(MouseEvent arg0) {

       // TODO Auto-generated method stub

    }

    @Override

    publicvoid mouseReleased(MouseEvent arg0) {

       // TODO Auto-generated method stub

    }

}

5.新建类 NumKeyActionListenerImpl,在类的基础上建立接口ActionListener

package abc;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

importjava.util.EventObject;

import javax.swing.JButton;

importjavax.swing.JTextField;

publicclass NumKeyActionListenerImpl implements ActionListener {

   

    private CalculatorDemo cal;

    public NumKeyActionListenerImpl(CalculatorDemo c){  

       this.cal = c;

    }

    @Override

    publicvoid 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,在类的基础上建立接口ActionListener

 package abc;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

importjava.util.EventObject;

import javax.swing.JButton;

importjavax.swing.JTextField;

publicclass OperKeyActionListenerImpl implements ActionListener {

   

    private CalculatorDemo cal;

   

    public OperKeyActionListenerImpl(CalculatorDemo c){

    this.cal = c;

    }

   

 /* 如果按下操作键盘,依据操作键表示的操作类型,执行相关的计算

           计算步骤:1>取得操作键之前的缓存输入

          2>获取操作键之后的数字键输入

            3>获取相关操作类型,执行计算

*/

    @Override

    publicvoid actionPerformed(ActionEvent event) {

       // TODO Auto-generated method stub

        /*获取操作键*/  

        JButton but = (JButton)event.getSource();

        //置空结果显示

        cal.getResult().setText("");

       cal.setOperFlag(true);

   

    }

}

四、实验结果

五、出现的问题及解决的方法

更多相关推荐:
用户使用报告

用户使用报告用户使用报告研制样机样品的图片及数据1光载WiFi中央控制机WiFi中央控制机完成主要信号处理其集中管理简单易行功能强大系统主要部件集中于WiFi中央控制机其安全性和可靠性得到极大增强远端天线极为简...

用户报告

用户报告宿州市水利局防汛抗旱指挥中心防汛抗旱调度自动化系统由安徽金海迪尔信息技术有限责任公司负责实施主要负责完成防汛抗旱调度自动化系统的现地监控远方控制系统的设计制造集成实验包装运输安装调试交付及试运转等宿州市...

用户使用报告

用户使用报告上海教育资源库的分布式多媒体教学资源管理平台是20xx年1月开始面向用户对外使用的经过多次的培训之后各区县学校教师能充分利用资源管理平台检索和浏览自己所需的多媒体教学资源并相应看展了一些教学活动目前...

用户报告模板

用户报告因业务开拓及公司发展需要,我公司xx时间购买了xx公司xx产品。该产品对我公司的xx事务上取得了重大,给公司带来了巨大的效益,在公司xx方面起了非常重大的作用。通过使用,我们发现该产品具有以下几点优势:…

用户使用报告

项目用户使用报告用户使用报告XXX编制第2页

用户使用报告

用户使用报告本公司使用XXX公司生产的产品广泛用于了经使用可达到等功能其产品质量性能环保要求交货期限售后服务等均符合本公司的要求使用后反馈具体意见如下产品名称产品质量稳定程度使用及维护方便程度外观质量和同类产品...

用户使用报告(20xx)

用户使用报告永一阀门集团有限公司我公司于20xx年8月在你永一阀门集团有限公司购买的AY42H400DN25安全溢流阀经我单位使用其性能稳定整定压力准确启闭压差小未出现质量问题满足了我公司生产工艺的要求在售后服...

用户使用报告

用户使用报告本公司使用苏州金海薄膜科技发展有限公司生产的抗刮耐污屏幕保护膜广泛用于了各种液晶显示屏的屏幕保护经总结该产品易安装可快速自动排除气泡移除后屏面不留残胶移除屏幕后可反复粘贴使用并且具有抗刮伤耐磨度佳防...

用户验收报告

用户验收报告用户单位签章填表人北京鼎华创新数码科技公司北京鼎华创新数码科技公司工程质量验收单尊敬的客户为了使您的工程质量得到保证售后服务工作得以顺利的进行本公司规定工程在完工后须用一整天的时间进行验收分二次进行...

腾讯发布20xx微信用户数据报告

腾讯发布20xx微信用户数据报告cnBeta18小时前微信已不单单只是一个充满创新功能的手机应用它已成为中国电子革命的代表覆盖90以上的智能手机并称为人们生活中不可或缺的日常使用工具截止今年第一季度末微信每月活...

腾讯20xx微信用户数据报告

腾讯20xx微信用户数据报告覆盖了90以上智能手机的微信成为人们生活中不可或缺的日常使用工具截止今年第一季度末微信每月活跃用户已达到549亿用户覆盖200多个国家超过20种语言此外各品牌的微信公众账号总数已经超...

用户善后处理措施报告

用户善后处理措施报告,内容附图。

用户报告(53篇)