前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第十五节:事件实验

第十五节:事件实验

作者头像
达达前端
发布2019-07-03 11:21:12
5440
发布2019-07-03 11:21:12
举报
文章被收录于专栏:达达前端达达前端

标题图

目的

1 事件机制 2 单选按钮及事件

要求

1. 实现一个计算器(能实现加减乘除运算 )

图片

2.实现界面上单选按钮中的事件

当按下某一单选按钮时将结果显示到最后一个输入框

3.当用户输入错误时提示。提示“请输入数字”,输入的值可以整数或小数。不能是其它字符

捕获输入错误时的异常,给出相应提示到结果框。

实验步骤:

1.定义类显示窗口,标题为“计算器”

2.在类中添加窗口组件作为类的成员变量, JLabel文本, JRadioButton为单选按钮, JTextField为输入框, JPanel为容器, ButtonGroup 为单选组按钮

3.在构造方法为每个组件及容器申请内存空间

4.设置窗口的布局为网格布局,有4行1列

5.将所有组件添加到容器中,将单选按钮再次添加到ButtonGroup,再添加容器到窗口

6.实现ItemListener接口,并实现itemStateChanged方法,在方法判断事件源,根据用户选择进行算术运算,将计算结果显示到第三个输入框。添加给事件源添加监听。

7.捕获输入错误时的异常NumberFormatException,并给出错误提示到输入框中。

代码

代码语言:javascript
复制
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.*;


public class CaculateDemo extends JFrame implements ItemListener{
//在类中添加窗口组件作为类的成员变量
//JLabel文本
    JLabel j11,j12,j13;
//JTextField为输入框
    JTextField jtf1,jtf2,jtf3;
//JPanel为容器
    JPanel jp1,jp2,jp3,jp4;
//JRadioButton为单选按钮
    JRadioButton j1,j2,j3,j4;
//ButtonGroup 为单选组按钮
    ButtonGroup gd;

    CaculateDemo(){
//在构造方法为每个组件及容器申请内存空间
        super("计算器");
        j11=new JLabel("操作数1");
        j12=new JLabel("操作数2");
        j13=new JLabel("计算结果是:");
            
        jtf1=new JTextField(10);
        jtf2=new JTextField(10);
        jtf3=new JTextField(10);    
        
        jp1=new JPanel();
        jp2=new JPanel();
        jp3=new JPanel();
        jp4=new JPanel();
        
        j1=new JRadioButton("+");
        j2=new JRadioButton("-");
        j3=new JRadioButton("*");
        j4=new JRadioButton("/");
        
        gd=new ButtonGroup();
        
    }
    public void init(){
        this.setSize(300,300);
        this.setLocation(100,100);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
        this.setLayout(new GridLayout(4,1));
        
        jp1.setLayout(new FlowLayout(FlowLayout.LEFT));
        jp2.setLayout(new FlowLayout(FlowLayout.LEFT));
        jp3.setLayout(new FlowLayout(FlowLayout.LEFT));
        jp4.setLayout(new FlowLayout(FlowLayout.LEFT));
        
        //在容器1中加文本,输入框
        jp1.add(j11);
        jp1.add(jtf1);
        //在容器2中加文本,输入框
        jp2.add(j12);
        jp2.add(jtf2);
        
        jp3.add(j1);
        jp3.add(j2);
        jp3.add(j3);
        jp3.add(j4);
        
        gd.add(j1);
        gd.add(j2);
        gd.add(j3);
        gd.add(j4);
        
        //在容器4中加文本,输入框
        jp4.add(j13);
        jp4.add(jtf3);
        
        
        this.add(jp1);
        this.add(jp2);
        this.add(jp3);
        this.add(jp4);
        
        //添加给事件源添加监听
        j1.addItemListener(this);
        j2.addItemListener(this);
        j3.addItemListener(this);
        j4.addItemListener(this);
    }
    
    public static void main(String[] args) {
        new CaculateDemo().init();
    
    }
    //实现itemStateChanged方法
    @Override
    public void itemStateChanged(ItemEvent e) {
        
        
            try{
            double num1=Double.parseDouble(jtf1.getText());
            double num2=Double.parseDouble(jtf2.getText());
            double res=0;
            
            if(e.getSource()==j1){
                res=num1+num2;
            }else if(e.getSource()==j2){
                res=num1-num2;
            }else if(e.getSource()==j3){
                res=num1*num2;
            }else if(e.getSource()==j4){
                res=num1/num2;
            }
            jtf3.setText(res+"");
            }
            //捕获输入错误时的异常NumberFormatException,并给出错误提示到输入框中
        catch(NumberFormatException eee){
            jtf3.setText("请输入数字");
        }
    }
}

运行结果图

图片

小礼物走一走 or 点赞

图片

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.07.29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目的
  • 要求
  • 实验步骤:
  • 代码
  • 运行结果图
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档