java实验:完成一个可以完成加、减、乘、除的简易计算器(窗体)


前言

最近学习了java的窗体,运用了java中的swing库以及awt库

Swing是一个用于开发Java应用程序用户界面的开发工具包。

以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。 工具包中所有的包都是以swing作为名称,例如javax.swing,javax.swing.event。

AWT(Abstract Window Toolkit),中文译为抽象窗口工具包,该包提供了一套与本地图形界面进行交互的接口,是Java提供的用来建立和设置Java的图形用户界面的基本工具。AWT中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系,称之为peers,当利用AWT编写图形用户界面时,实际上是在利用本地操作系统所提供的图形库。由于不同操作系统的图形库所提供的样式和功能是不一样的,在一个平台上存在的功能在另一个平台上则可能不存在。为了实现Java语言所宣称的“一次编写,到处运行(write once, run anywhere)”的概念,AWT不得不通过牺牲功能来实现平台无关性,也即AWT所提供的图形功能是各种操作系统所提供的图形功能的交集。


一、实验内容

完成一个可以完成加、减、乘、除的简易计算器。如图1所示。


图 1 简易计算器结果展示

二、实验思路

创建出想要的窗体以及各种组件(按钮),以及窗口的各种设置,(如大小,初始位置,是否可以拖动等等,注意,所有的设置都要在setVisible(true) 窗体可视化之前

窗体初始化,并写出监听器类对象(内部匿名类),调用事件源组件对象的addXXXlistener方法把监听器注册到事件源上(即计算方法)

三、实验代码

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

//两种创建顶层窗体的方法
//1、JFarame frame=new JFrame("我的窗口")
//2、定义一个类继承自JFrame
public class calculator extends JFrame {
    JLabel l_num1,l_op,l_num2,l_result;
    JTextField t_num1,t_op,t_num2,t_result;
    JButton b_cal,b_reset;
    public calculator(String title){
        super(title);//设置窗体标题
        setSize(300,350);//设置窗体大小
        setLocation(300,300);//设置窗体弹出的初始位置
        getContentPane();setBackground(new Color(100, 192, 43));
        setResizable(false);//不可改变大小
        init();
        setVisible(true);//设置窗体是否可见
    }
    public void init(){
        l_num1 = new JLabel("操作数1",JLabel.CENTER);
        l_op = new JLabel("操作符:",JLabel.CENTER);
        l_num2 = new JLabel("操作数2",JLabel.CENTER);
        l_result = new JLabel("计算结果:",JLabel.CENTER);
        t_num1 = new JTextField();
        t_op = new JTextField();
        t_num2 = new JTextField();
        t_result = new JTextField();
        b_cal = new JButton("计算");//事件源
        MyListener listener=new MyListener();//创建监听器类对象
        b_cal.addActionListener(listener);//调用事件源组件对象的addXXXlistener方法把监听器注册到事件源上
        b_reset = new JButton("重置");//事件源
        b_reset.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                reset();
            }
        });//匿名内部类,监听器三合一
        setLayout(new GridLayout(5,2));
        add(l_num1);add(t_num1);
        add(l_op);add(t_op);
        add(l_num2);add(t_num2);
        add(l_result);add(t_result);
        add(b_cal);add(b_reset);
    }
    //监听器的使用步骤
    //1、自定义一个类,让他实现XXXListener这个接口
    //2、创建事件监听器类对象(第一步中自定义的类)
    //3、调用事件源组件对象的addXXXlistener方法吧监听器注册到事件源上
    public class MyListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e){
            // TODO Auto-generated method stud
            cal();
        }
        }
    //完成计算功能
    public void cal(){
        try{
            if(t_num1.getText().equals("")||t_op.getText().equals("")||t_num2.getText().equals("")){
                JOptionPane.showMessageDialog(null,"操作数或运算符不能为空","操作数或运算符为空",JOptionPane.WARNING_MESSAGE);
            }
            double num1 = Double.parseDouble(t_num1.getText());
            char op = t_op.getText().charAt(0);
            double num2 = Double.parseDouble(t_num2.getText());
            switch(op){
                case '+':t_result.setText(num1+num2+"");break;
                case '-':t_result.setText(num1-num2+"");break;
                case '*':t_result.setText(num1*num2+"");break;
                case '/':t_result.setText(num1/num2+"");break;
                default:JOptionPane.showMessageDialog(null,"非法的运算符");
        }
        } catch(NumberFormatException e){
            JOptionPane.showMessageDialog(null,"操作数非法");
        }


    }
    //完成重置功能
    public void reset(){
        t_num1.setText("");
        t_op.setText("");
        t_num2.setText("");
        t_result.setText("");
    }

}

//测试类
public class TestCalculator {
    public static void main(String[] args){
        calculator ca = new calculator("计算器");

    }
}

四、实验结果截图

以上


总结

这就是对计算器窗体化的全部内容了,不得不说窗体作为一个可视化的做起来还是非常有趣味性和成就感的。

java编写的计算器,能实现乘除。 //***该梦幻计算器与Windows附件自带计算器的标准版功能、界面相仿***// //******但还不支持键盘操作,如有需要,下一次等级将满足你**********// import java.awt.*; import java.lang.*; import javax.swing.*; import javax.swing.event.*; import java.awt.event.*; import java.awt.Component.*; import java.awt.color.*; import java.text.DecimalFormat; //*****************************************************************************// //*****************************************************************************// public class Calculator implements ActionListener //导入动作监听接口 { //******************************// //*****设计计算器界面的单位*****// JFrame frame; //定义框架 JTextField textAnswer; //定义输出显示框 JPanel panel, panel1, panel2, panel3;//定义面板作为子容器,从而达到要求的界面效果 JMenuBar mainMenu; JTextField textMemory; JLabel labelMemSpace; //labelMemSpace单纯做摆设,控制面板的形状 JButton buttonBk, buttonCe, buttonC; JButton button[]; JButton buttonMC, buttonMR, buttonMS, buttonMAdd; JButton buttonDot, buttonAddAndSub, buttonAdd, buttonSub, buttonMul,buttonDiv, buttonMod; JButton buttonSqrt, buttonDao, buttonEqual; JMenu editMenu, viewMenu, helpMenu; JMenuItem copyItem, pasteItem, tItem, sItem, numberGroup, topHelp, aboutCal,myCollege; DecimalFormat df; //设置数据输出精度 boolean clickable; //控制当前能否按键 double memoryd; //使用内存中存储的数字 int memoryi; double vard, answerd; //用来保存double型数据的中间值(vard)和最后结果(answerd) short key = -1, prekey = -1; //key用来保存当前进行何种运算,prekey用来保存前次进行何种运算 boolean clear = false; String copy; //做复制用 JTextArea help; //帮助 JScrollPane scrollHelp; static boolean One =true; //******************// //*****构造函数开始*****// public Calculator() { clickable = true; answerd = 0; frame = new JFrame("梦幻计算器--SWE08008"); frame.setResizable(false);//不允许改变计算器的大小 frame.setLocation(250,150);//设置计算器的起始位置 frame.setBackground(Color.YELLOW); df = new DecimalFormat("0.##############"); //设置数据输出精度(对于double型值)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值