利用java原生控件生成简易计算器

设计思路

界面整体窗口采用边界布局,布局策略:North位置的上放一个面板,文本框放入其中,用于显示运算中的数据和结果。Center位置。。。

主要功能

  1. 点击“帮助”菜单后,界面如下:
    在这里插入图片描述

  2. 点击“关于”菜单项,弹出对话框,界面如下:
    在这里插入图片描述

  3. 点击“文件”菜单项,并点击“退出”,会关闭弹窗,结束程序。界面如下:
    在这里插入图片描述

  4. 能够进行基本的加减乘除运算

代码实现

package com.duguangming.test;
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.lang.Math; 
public class Demo extends JFrame{ 
JButton b1,b2,b3,b4,b5,b6, b7,b8,b9,b12,a1,a2,n1,n2,n3,n4,n5,n6,n7,n8,n9,n0;
JMenu fil,hp,fil2;
JMenuItem gy,tu,jz; 
JTextField tex; 
JPanel pan1; 
JPanel pan2; 
JPanel pan3; 
double result = 0; 
double num=0; String ch = "="; //定义字符,用来存放运算符 
boolean start; 
public Demo (String s) {
	super(s); pan1=new JPanel(); 
	pan2=new JPanel(); 
	pan3=new JPanel(); 
	tex=new JTextField();//创建文本框 
	BorderLayout border=new BorderLayout (); 
	setSize(300,240); 
	setLocation(400, 400); 
	setResizable(false); //窗口大小不可变 
	setLayout(border); 
	//**************//生成按键*************************************/ 
	b1=new JButton("."); b2=new JButton("+"); b3=new JButton("-"); 
	b4=new JButton("*"); b5=new JButton("÷"); b6=new JButton("="); 
	b7=new JButton("sqrt"); b8=new JButton("%"); b9=new JButton("1/x"); 
	a1=new JButton("Back"); a2=new JButton("C"); b12=new JButton("+/-"); 
	n1=new JButton("1"); n2=new JButton("2"); n3=new JButton("3");
	n4=new JButton("4"); n5=new JButton("5"); n6=new JButton("6");
	n7=new JButton("7"); n8=new JButton("8"); n9=new JButton("9"); 
	n0=new JButton("0"); pan1.add(tex);
	GridLayout grid2=new GridLayout ();
	pan1.setLayout(grid2); 
	//pan3布局策略为网格 
	tex.setBounds(45,25,200,35); tex.setHorizontalAlignment(JTextField.RIGHT); 
	//将文本输入框里的文字设成右对齐
	pan1.setBounds(45,25,200,40); GridLayout grid1=new GridLayout (1,2);
	pan2.setLayout(grid1); 
	//pan3布局策略为网格 
	pan2.setBounds(45,25,200,30); pan2.add(a1);pan2.add(a2); 
	GridLayout grid=new GridLayout (5,4); pan3.setLayout(grid); 
	//pan3布局策略为网格 
	pan3.setBounds(45,25,200,180); 
	pan3.add(n7);pan3.add(n8);pan3.add(n9);pan3.add(b5); pan3.add(n4);pan3.add(n5);pan3.add(n6);pan3.add(b4);
	pan3.add(n1);pan3.add(n2);pan3.add(n3);pan3.add(b3); pan3.add(n0); pan3.add(b12); pan3.add(b1); pan3.add(b2); 
	pan3.add(b9); pan3.add(b8); pan3.add(b7); pan3.add(b6); add(pan1, BorderLayout.NORTH); add(pan3, BorderLayout.SOUTH); 
	add(pan2, BorderLayout.CENTER); 
	//**************//生成一个菜单栏*************************************/ 
	JMenuBar bar=new JMenuBar(); setJMenuBar(bar); ButtonGroup g=new ButtonGroup(); 
	fil=new JMenu("文件"); hp=new JMenu("帮助"); fil2=new JMenu("文件"); gy=new JMenuItem("关于"); 
	fil.add(fil2); bar.add(fil); bar.add(hp); hp.add(gy); String [] s1={"打开","保存"}; 
	JRadioButtonMenuItem []jj=new JRadioButtonMenuItem[ (s1.length) ]; 
	for(int i=0;i<s1.length;i++) {
		jj[i]=new JRadioButtonMenuItem(s1[i]); fil2.add(jj[i]); g.add(jj[i]); 
	} 
	//**************//退出事件实现*************************************/ 
	tu=new JMenuItem("退出");
	fil.add(tu); 
	tu.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			System.exit(0);
		} 
	}); 
	//******************禁止用户编辑事件*****************************************/
	jz=new JMenuItem("禁止编辑");
	fil.add(jz);
	jz.addActionListener(new ActionListener() {
		@Override
		public void actionPerformed(ActionEvent e) {
			tex.setVisible(false);
		}
	});
	//**************//关于事件实现*************************************/ 
	gy.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			JMenuItem m=(JMenuItem)e.getSource(); 
			if(m==gy)	
				JOptionPane.showMessageDialog(hp, "请查看帮助文档","帮助",JOptionPane.WARNING_MESSAGE); 
		} 
	}); 
	//**************//注册事件*************************************/ 
	b1.addActionListener(new anniu());
	b2.addActionListener(new operation()); 
	b3.addActionListener(new operation()); 
	b4.addActionListener(new operation());
	b5.addActionListener(new operation()); 
	b6.addActionListener(new operation()); 
	b7.addActionListener(new pingfang()); 
	b8.addActionListener(new operation()); 
	b9.addActionListener(new pingfang());
	a1.addActionListener(new anniu()); 
	a2.addActionListener(new anniu()); 
	b12.addActionListener(new anniu()); 
	n1.addActionListener(new anniu()); 
	n2.addActionListener(new anniu()); n3.addActionListener(new anniu()); 
	n4.addActionListener(new anniu()); n5.addActionListener(new anniu());
	n6.addActionListener(new anniu()); n7.addActionListener(new anniu()); 
	n8.addActionListener(new anniu()); n9.addActionListener(new anniu());
	n0.addActionListener(new anniu()); 
} 
//**************//“关于”平方实现事件*************************************/ 
class pingfang implements ActionListener {
	public void actionPerformed(ActionEvent e) {
		String get= e.getActionCommand(); 
		if(get.equals("sqrt")) { 
			num=Double.parseDouble(tex.getText()); 
			if(num>=0) tex.setText(""+Math.sqrt(num));
			else { tex.setText("输入函数无效"); } 
		} 
		if(get.equals("1/x")) { 
			num=Double.parseDouble(tex.getText());
			if(num!=0) tex.setText(""+1/num); else { 
				tex.setText("输入函数无效"); 
			} 
		} 
	} 
}
//*************定义内部类anniu*************************************/
	class anniu implements ActionListener {
		public void actionPerformed(ActionEvent e) { 
			String get = e.getActionCommand();
			//得到事件源(即按钮)上的文字 
			if (start) { tex.setText(""); if (get.equals("+/-"))
				//如果按了"-/+"按钮,就将数设成相反数
				tex.setText(tex.getText() + "-"); 
			start = false; 
			} if (!get.equals("+/-")) { 
				if (get.equals("Back")) {
					String str = tex.getText(); 
					if (str.length() > 0) 
						tex.setText(str.substring(0, str.length() - 1));
				} else if ( get.equals("C")) {
						tex.setText(""); tex.setText("0"); 
						start = true; 
				} else tex.setText(tex.getText() + get); 
			} 
		}
	} 
	class operation implements ActionListener { 
		public void actionPerformed(ActionEvent e) {
			String get=e.getActionCommand(); 
			if(start) ch=get; 
			else { 
			calculate(Double.parseDouble(tex.getText())); ch = get; start = true; 
			} 
		} 
	} 
	public void calculate(double x) {
		if (ch.equals("+")) result =result+ x; 
		else if(ch.equals("-")) result -= x; 
		else if (ch.equals("*")) result *= x; 
		else if (ch.equals("÷")) result /= x; 
		else if (ch.equals("%")) result %= x; 
		else if (ch.equals("=")) result = x; 
		tex.setText("" + result); 
	} 
	public static void main(String[] args){
		Demo frm=new Demo("计算器"); 
		frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frm.setVisible(true); 
	} 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

sinJack

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

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

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

打赏作者

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

抵扣说明:

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

余额充值