利用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); 
	} 
}
展开阅读全文

Git 实用技巧

11-24
这几年越来越多的开发团队使用了Git,掌握Git的使用已经越来越重要,已经是一个开发者必备的一项技能;但很多人在刚开始学习Git的时候会遇到很多疑问,比如之前使用过SVN的开发者想不通Git提交代码为什么需要先commit然后再去push,而不是一条命令一次性搞定; 更多的开发者对Git已经入门,不过在遇到一些代码冲突、需要恢复Git代码时候就不知所措,这个时候哪些对 Git掌握得比较好的少数人,就像团队中的神一样,在队友遇到 Git 相关的问题的时候用各种流利的操作来帮助队友于水火。 我去年刚加入新团队,发现一些同事对Git的常规操作没太大问题,但对Git的理解还是比较生疏,比如说分支和分支之间的关联关系、合并代码时候的冲突解决、提交代码前未拉取新代码导致冲突问题的处理等,我在协助处理这些问题的时候也记录各种问题的解决办法,希望整理后通过教程帮助到更多对Git操作进阶的开发者。 本期教程学习方法分为“掌握基础——稳步进阶——熟悉协作”三个层次。从掌握基础的 Git的推送和拉取开始,以案例进行演示,分析每一个步骤的操作方式和原理,从理解Git 工具的操作到学会代码存储结构、演示不同场景下Git遇到问题的不同处理方案。循序渐进让同学们掌握Git工具在团队协作中的整体协作流程。 在教程中会通过大量案例进行分析,案例会模拟在工作中遇到的问题,从最基础的代码提交和拉取、代码冲突解决、代码仓库的数据维护、Git服务端搭建等。为了让同学们容易理解,对Git简单易懂,文章中详细记录了详细的操作步骤,提供大量演示截图和解析。在教程的最后部分,会从提升团队整体效率的角度对Git工具进行讲解,包括规范操作、Gitlab的搭建、钩子事件的应用等。 为了让同学们可以利用碎片化时间来灵活学习,在教程文章中大程度降低了上下文的依赖,让大家可以在工作之余进行学习与实战,并同时掌握里面涉及的Git不常见操作的相关知识,理解Git工具在工作遇到的问题解决思路和方法,相信一定会对大家的前端技能进阶大有帮助。
©️2020 CSDN 皮肤主题: 创作都市 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值