用java可视化编程实现计算器

我们可以用java实现一个简单的计算器
我们把它分为两个java文件一、计算器窗体部分,二、按键事件处理器部分。经过多次测试,解决了绝大部分bug,也许还有一些bug未发现,欢迎指正。
下附计算器截图,有点丑,呵呵,但是是可以用的





一、计算器窗体部分

/*****************************************************************/
package cn.lantian.Jisuan;

import javax.swing.JButton;

public class Jisuan{
public static void main(String[] args){
Jisuan js =new Jisuan();
js.init();
}
public String[] a1={"ln","log10","exp","sqrt","abs",
"sin","cos","tan","+","*",
"7","8","9","-","/",
"4","5","6",".","清除",
"1","2","3","0","=",};
public void init(){
//实例化一个窗体容器
javax.swing.JFrame frame=new javax.swing.JFrame();
frame.setTitle("计算器");
frame.setSize(380,390);
//实例化一个流动布局类
java.awt.FlowLayout f1=new java.awt.FlowLayout();
frame.setLayout(f1);
//将整个计算器分为两部分,两个面板容器panel1,panel2
//第一个面板容器
javax.swing.JPanel panel1=new javax.swing.JPanel();
//指定高度、宽度。除JFrame(setsize();)外,都用这个指定高宽
panel1.setPreferredSize(new java.awt.Dimension(380,120));
//实例化一个输入框
javax.swing.JTextField jt=new javax.swing.JTextField();
jt.setPreferredSize(new java.awt.Dimension(330,80));
jt.setEditable(false);
//设置输入数据从右边开始显示
jt.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
panel1.add(jt);
//第二个面板容器
javax.swing.JPanel panel2=new javax.swing.JPanel();
//实例化网格布局(宽,高,水平间距,垂直间距)
java.awt.GridLayout f2=new java.awt.GridLayout(5,5,5,12);
panel2.setLayout(f2);
//新建一个control类
Control con =new Control(jt);

//添加按键
/***************************************/
for (int i=0;i<25;i++){
JButton jb = new JButton(a1[i]);
panel2.add(jb);
jb.addActionListener(con);
}

/**************************/

//将两个面板添加到窗体
frame.add(panel1);
frame.add(panel2);
//善后工作
frame.setDefaultCloseOperation(2);
frame.setLocationRelativeTo(null); //主窗体屏幕居中
frame.setVisible(true);
}
}
/******************************************************************/




二、按键事件处理器部分

/******************************************************************/
package cn.lantian.Jisuan;

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

import javax.swing.JTextField;

public class Control implements ActionListener {
private String n1 = "";
private String n2 = "";
private String fa = "";
// t1用于判断第二个数输入清屏,
/*
* t2用于判断是否在输入第二个数完后继续使用运算符,继续使用为false 若继续使用,则运算结果(类似于等号+运算符)
*/
/*
* t3标记第二次是否输入数据,防止用户在没输入第二个数时,多次按加减乘除 造成多次运算
*/
private boolean t1 = true, t2 = true, t3 = false;
private JTextField jt;
private String c;

public Control(JTextField jt) {
this.jt = jt;
}

public void actionPerformed(ActionEvent e) {
c = e.getActionCommand();
switch (c) {
case ".":
case "0":
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
if (t1) {// 如果t1为真,则累加文本框中的数
jt.setText(jt.getText() + c);
} else {// 否则就清屏
jt.setText(c);
t1 = true;// 将t1设为真,让以后输入的数可以累加文本框中的内容
t3 = true;// 表明输入了第二个数,再输入运算符时可以进行运算  
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值