Java实训项目之编写计算器(练习书中例题)

编写了一个例题后始终觉得自己的效率太低了:
下面是源码:

编写一个测试类:

public class Example8_9 {
    public static void main(String [] args){
     NumberView win = new NumberView();
     win.setBounds(100,100,600,360);
     win.setTitle("计算器");
    }
}

编写监听器(注册监视器):

import javax.swing.*;
import java.awt.*;

public class NumberView extends JFrame {
    public JTextField inputNunmberOne ,inputNumberTwo;
    public JComboBox <String> choiceFuhao;
    public JTextArea textShow;
    public JButton button;
    public OperatorListener operator;      //监听ItemEvent事件的监视器
    public  ComputerListener computer;     //监听ActionEvent事件的监视器
    public NumberView(){
        init();
        setVisible(true);
        SetDefaultCloseOpertion(JFrame.EXIT_ON_CLOSE);
    }

    private void SetDefaultCloseOpertion(int exitOnClose) {
    }

    private void init() {
        setLayout(new FlowLayout());
        Font font = new Font("宋体",Font.BOLD,22);
        inputNumberTwo = new JTextField(5);
        inputNunmberOne = new JTextField(5);
        inputNunmberOne.setFont(font);
        inputNumberTwo.setFont(font);
        choiceFuhao = new JComboBox<>();
        choiceFuhao.setFont(font);
        button = new JButton("计算");
        button.setFont(font);
        choiceFuhao.addItem("选择运算符号:");
        String [] a = {"+","-","*","/"};
        for (int i=0;i<a.length;i++){
            choiceFuhao.addItem(a[i]);
        }
        choiceFuhao.setSelectedIndex(-1);      //初始状态列表没有选项被选中
        textShow = new JTextArea(9,30);
        textShow.setFont(font);
        operator = new OperatorListener();
        computer = new ComputerListener();
        operator.setView(this);   //将当前窗口传递给operator组合的窗口
        computer.setView(this);   //将当前窗口传递给computer组合的窗口
        choiceFuhao.addItemListener(operator);   //operator是监视器
        choiceFuhao.addActionListener(operator); //operator是监视器
        button.addActionListener(computer);      //computer是监视器
        add(inputNunmberOne);
        add(choiceFuhao);
        add(inputNumberTwo);
        add(button);
        add(new JScrollPane(textShow));
    }
}

编写事件:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

public class OperatorListener implements ItemListener, ActionListener {
    NumberView view;
    public void setView(NumberView view){
        this.view=view;
    }
    public void itemStateChanged(ItemEvent e){
        String fuhao = view.choiceFuhao.getSelectedItem().toString();
        view.computer.setFuhao(fuhao);
    }
    public void actionPerformed(ActionEvent e){
        String fuhao = view.choiceFuhao.getSelectedItem().toString();
        view.computer.setFuhao(fuhao);
    }
}

编写计算实现类:

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ComputerListener implements ActionListener {
    NumberView view;
    String fuhao;
    public void setView(NumberView view){
        this.view=view;
    }
    public  void setFuhao(String s){
        fuhao=s;
    }
    public void actionPerformed(ActionEvent e){
        try {
            double number1=Double.parseDouble(view.inputNunmberOne.getText());
            double number2=Double.parseDouble(view.inputNumberTwo.getText());
            double result = 0;
            boolean isShow = true;
            if (fuhao.equals("+")){
                result=number1+number2;
            }
           else if (fuhao.equals("-")){
                result=number1-number2;
            }
           else if (fuhao.equals("*")){
                result=number1*number2;
            }
           else if (fuhao.equals("/")){
                result=number1/number2;
            }
           else {
               isShow=false;
            }
           if (isShow){
               view.textShow.append(number1+" "+fuhao+" "+number2+" = "+result+"\n");
           }
        }
        catch (Exception exp){
            view.textShow.append("\n请输入数字字符\n");
        }
    }
}

下面是实现图:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

r1ng_x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值