• 第十五节:事件实验


    标题图

    目的

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

    要求

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

    图片

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

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

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

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

    实验步骤:

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

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

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

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

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

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

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

    代码

    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 点赞

    图片

  • 相关阅读:
    spring mvc注解文件上传下载
    html,图片上传预览,input file获取文件等相关操作
    three.js、webGL、canvas区别于关联
    html添加新元素兼容和访问
    关于HTML,css3自适应屏幕,自适应宽度
    数据库设计的规则 入门
    mysql 索引入门
    一 .linux上安装 python git redis nginx
    一 .git和github
    一 .Django+Alipay(支付宝支付使用)和微信支付
  • 原文地址:https://www.cnblogs.com/dashucoding/p/11932582.html
Copyright © 2020-2023  润新知