Java保存计算过程的计算器(小课设)

 下载:

不知道怎么放文件,按照以下文件名建Java文件到一个包中即可使用


效果:

 

 

 

源代码: 

启动.java


import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.Box;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.plaf.basic.BasicSplitPaneUI.BasicVerticalLayoutManager;

public class 启动 {
	public static void main(String[] args) {
		计算器 start = new 计算器();
        start.启动();
	}
}

计算器.java

import java.awt.Dimension;
import java.awt.*;

import javax.swing.*;


public class 计算器{
	//界面
	
	JFrame frame = new JFrame("计算器");
	//文本域,从左及右
	JTextArea area1 = new JTextArea(1,13);
	JTextArea area2 = new JTextArea(1,2);
	JTextArea area3 = new JTextArea(1,13);
	JTextArea area4 = new JTextArea(1,50);//右边结果输出小框
	JTextArea area5 = new JTextArea(16,50);//右边大框
	//水平盒子布局
	Box hbox套三area = Box.createHorizontalBox();
	Box hbox套三按钮 = Box.createHorizontalBox();
	//网格布局,计算器界面
	GridLayout gridLayout = new GridLayout(5,5);
	//面板1  计算器按钮面板
	JPanel jPanel1 = new JPanel();//文本
	JPanel jPanel2 = new JPanel();//键盘
	JPanel jPanel3 = new JPanel();//左大块
	
	//面板2
	JPanel jPanel4 = new JPanel();//右大块
	
	
	//右边底下按钮
	JButton buttona = new JButton("保存");
	JButton buttonc = new JButton("复制");
	JButton buttonz = new JButton("清除");
	
	//1-9
	JButton[] button数字 = new JButton[10];
	JButton button加 = new JButton("+");
	JButton button减 = new JButton("-");
	JButton button乘 = new JButton("*");
	JButton button除 = new JButton("/");
	JButton button清空 = new JButton("C");
	
	JButton button分式 = new JButton("1/x");
	JButton button相反值 = new JButton("+/-");
	JButton button小数点 = new JButton(".");
	JButton button开方 = new JButton("sqrt");
	JButton button退格 = new JButton("退格");
	
	JButton button等于 = new JButton("=");
	//其他运算符,,,,为了简便
	JButton[] button其他 = {button加,button减,button乘,button除,button开方,button分式,button相反值,button小数点,button退格,button清空,button等于};		
	
	
	//监听器
	//定义监听器类
	
button数字listenner button数字listenner1 = new button数字listenner(this);
button其他1 button其他1 = new button其他1(this);
button其他2 button其他2 = new button其他2(this);
button其他3 button其他3 = new button其他3(this);
button小数点 button小数点a = new button小数点(this);
myfocus myfocus1 = new myfocus(this);
myfocus myfocus3 = new myfocus(this);
buttonaczlistenner buttonaczlistenner = new buttonaczlistenner(this);


	
	




void 组装监听器() {
	    area1.addFocusListener(myfocus1);
	    area3.addFocusListener(myfocus3);
	    
	    area4.setEditable(false);
	    area5.setEditable(false);
	    
	    buttona.addActionListener(buttonaczlistenner);
		buttonc.addActionListener(buttonaczlistenner);
		buttonz.addActionListener(buttonaczlistenner);
		for(int i=0;i<4;i++) {
			button其他[i].addActionListener(button其他1);
		}
		for(int i=4;i<7;i++) {
			 button其他[i].addActionListener(button其他2);
		}
		for(int i=8;i<11;i++) {
			 button其他[i].addActionListener(button其他3);
		}
		button小数点.addActionListener(button小数点a);
}



	void 命名() {
		area1.setName("1");
		area3.setName("3");
			button其他[7].setName(".");
			button其他[8].setName("退格");
			button其他[9].setName("C");
			button其他[10].setName("=");
			buttona.setName("保存");
			buttonc.setName("复制");
			buttonz.setName("清除");
	}




   void 组装布局() {
	   命名();
	   组装监听器();
	   
	 //计算器组装按钮
	 		jPanel2.setLayout(gridLayout);//方格布局
	 		for(int i=0;i<=9;i++) {
	 			button数字[i]=new JButton(""+i);
	 			button数字[i].setPreferredSize(new Dimension(60, 60));
	 			jPanel2.add(button数字[i]);
	 			button数字[i].addActionListener(button数字listenner1);
	 		}
	 		
	 		
	 		for(int i=0;i<button其他.length;i++) {
	 			button其他[i].setPreferredSize(new Dimension(50, 30));
	 			jPanel2.add(button其他[i]);
	 		}
	 		
	 		
	 		
	 		
	 		//左上方组装
	 		hbox套三area.add(area1);
	 		hbox套三area.add(hbox套三area.createHorizontalStrut(5));
	 		hbox套三area.add(area2);
	 		hbox套三area.add(hbox套三area.createHorizontalStrut(5));
	 		hbox套三area.add(area3);
	 		jPanel1.add(hbox套三area);
	 		
	 		//右下角按钮水平组装
	 		hbox套三按钮.add(hbox套三按钮.createHorizontalStrut(10));
	 		hbox套三按钮.add(buttona);
	 		hbox套三按钮.add(hbox套三按钮.createHorizontalStrut(5));
	 		hbox套三按钮.add(buttonc);
	 		hbox套三按钮.add(hbox套三按钮.createHorizontalStrut(5));
	 		hbox套三按钮.add(buttonz);
	 		hbox套三按钮.add(hbox套三按钮.createHorizontalStrut(10));
	 		
	 		
	 		//组装左边大框
	 		jPanel3.add(jPanel1,BorderLayout.NORTH);
	 		jPanel3.add(jPanel2,BorderLayout.CENTER);
	 				
	 				
	 				
	 		//组装右边大框
	 		jPanel4.add(area4,BorderLayout.NORTH);
	 		jPanel4.add(area5,BorderLayout.CENTER);
	 		jPanel4.add(hbox套三按钮,BorderLayout.SOUTH);
	 	
	 		
   }


	
	
	
	void 启动(){
	
		
        组装布局();//组装组件
		
		
		JSplitPane jSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,jPanel3,jPanel4);
		frame.setResizable(false);
		frame.add(jSplitPane);//添加最终窗格,他是拆分的
		frame.setBounds(350,350,832,400);
		//frame.pack();
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
	}
}
	

myfocus.java

import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

class myfocus implements FocusListener{
	计算器 计算器;
	public myfocus(计算器 计算器) {
		super();
		this.计算器 = 计算器;
	}
	@Override
	public void focusGained(FocusEvent e) {
	
		if(计算器.area1.getName().equals(e.getComponent().getName())) {
			计算器.area1.setName("框一");
			计算器.area3.setName("3");
			
		}
		else if(计算器.area3.getName().equals(e.getComponent().getName())) {
			计算器.area3.setName("框三");
			计算器.area1.setName("1");
		}
		
	}

	@Override
	public void focusLost(FocusEvent e) {
		
	}
}

button小数点.java

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

public class button小数点 implements ActionListener {
	计算器 计算器;
	public button小数点(计算器 计算器) {
		super();
		this.计算器 = 计算器;
	}
	@Override
	public void actionPerformed(ActionEvent e) {
	//	String buttonname =e.getActionCommand(); 
	//	double n=Double.parseDouble(计算器.area1.getText());
	//	String content =计算器.area1.getText();
	
			
		
		if(计算器.area1.getName().equals("框一")){
			String content = 计算器.area1.getText();
			if(content.equals(null)); if(content.contains(".")) ;else {计算器.area1.setText(content+".");}
			
			
		}if(计算器.area3.getName().equals("框三")){
			String content =计算器.area3.getText();
			if(content.equals(null)); if(content.contains(".")) ;else {计算器.area3.setText(content+".");}
		}
	
		
		
	}
}

button数字listenner.java

import java.awt.Color;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import javax.swing.JComponent;
import javax.swing.JTextArea;

import org.w3c.dom.Text;

import com.sun.source.tree.CatchTree;

public class button数字listenner implements ActionListener {
	计算器 计算器;
	public button数字listenner(计算器 计算器) {
		super();
		this.计算器 = 计算器;
	}

	@Override
	public void actionPerformed(ActionEvent e) {
	if(计算器.area1.getName().equals("框一")) {
		String s1 = 计算器.area1.getText();
		计算器.area1.setText(s1+e.getActionCommand());
		
		}
	
	if(计算器.area3.getName().equals("框三")) {
		String s1 = 计算器.area3.getText();
		计算器.area3.setText(s1+e.getActionCommand());
		}
	}
}

















button其他3.java

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

class button其他3 implements ActionListener{
	计算器 计算器;
	public button其他3(计算器 计算器) {
		super();
		this.计算器 = 计算器;
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		
		try {
			
		
		
		
		String text5=计算器.area5.getText();
		String oper0=e.getActionCommand();
		
		if(oper0.equals(计算器.button清空.getName())) {
			
			计算器.area1.setText("");
			计算器.area2.setText("");
			计算器.area3.setText("");
			
			
		}else if(oper0.equals(计算器.button退格.getName())) {
			
			if(计算器.area1.getName().equals("框一")){
			String s=计算器.area1.getText();
			if(s!=null) {
			String ss=s.substring(0, s.length()-1);
			计算器.area1.setText(ss);
			}else {}
		}else if(计算器.area3.getName().equals("框三")){
				String s=计算器.area3.getText();
				if(s!=null) {
					String ss=s.substring(0, s.length()-1);
					计算器.area3.setText(ss);
				}else {}
			}
			//等号很多事
		}else if(oper0.equals(计算器.button等于.getName())){
			
			if(计算器.area1!=null && 计算器.area3!=null && 计算器.area2!=null) {
		
				
			
			String oper1=计算器.area2.getText();	
			double sum=0;
			double n=Double.parseDouble(计算器.area1.getText());
			double m=Double.parseDouble(计算器.area3.getText());	
			switch(oper1) {
			case  "+" : sum=n+m; break;
			 case  "-" : sum=n-m; break;
			 case  "*": sum=n*m; break; 
			 case "/": sum=n/m; break;
			}
			计算器.area4.setText(""+"="+sum);
			String result=n+""+oper1+""+m+"="+sum;
			计算器.area5.setText(text5+""+result+"\n");
	
	
			
		}
	  }
		
		
		}catch (Exception e2) {
			// TODO: handle exception
		}
		
		
	}
}
	

		

	

button其他2.java

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

class button其他2 implements ActionListener{
	计算器 计算器;
	public button其他2(计算器 计算器) {
		super();
		this.计算器 = 计算器;
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		
		try {
		
		
		String buttonname =e.getActionCommand(); 
		if(计算器.area1.getName().equals("框一")){
			 if(计算器.area1!=null) {
				 double sum = 0;
				 double n=Double.parseDouble(计算器.area1.getText());
				 switch(buttonname) {
				 case  "1/x" : sum=1/n; break;
				 case  "+/-" : sum=-n; break;
				 case  "sqrt": sum=Math.sqrt(n); break; 
				 }
				 计算器.area1.setText(""+sum);
			 }

		}else if(计算器.area3.getName().equals("框三")){
			if(计算器.area3!=null) {
				 double sum = 0;
				 double n=Double.parseDouble(计算器.area3.getText());
				 switch(buttonname) {
				 case  "1/x" : sum=1/n; break;
				 case  "+/-" : sum=-n; break;
				 case  "sqrt": sum=Math.sqrt(n); break; 
				 }
				 计算器.area3.setText(""+sum);	
			}
		}
		
		
		
		
	}catch (Exception ee) {
		
	}
		
		
		
   }
}

button其他1.java

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

class button其他1 implements ActionListener{
	计算器 计算器;
	public button其他1(计算器 计算器) {
		super();
		this.计算器 = 计算器;
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		计算器.area2.setText(e.getActionCommand());
	}
}

buttonaczlistenner.java

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JOptionPane;

public class buttonaczlistenner implements ActionListener {
	计算器 计算器;
	public buttonaczlistenner(计算器 计算器) {
		super();
		this.计算器 = 计算器;
	}
	save save = new save();
	
	@Override
	public void actionPerformed(ActionEvent e) {
		String name=e.getActionCommand();
		if(name.equals("保存")) {
			try {
				save.f(计算器.area5.getText());
				JOptionPane.showMessageDialog(null, "保存成功");


			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}else if(name.equals("复制")) {
			计算器.area5.copy();
			JOptionPane.showMessageDialog(null, "复制成功");
		}else if(name.equals("清除")) {
			
			计算器.area4.setText("");
			计算器.area5.setText("");
			JOptionPane.showMessageDialog(null, "清除成功");
		}
		
		
			
	}
}

class save{
	 void f(String s) throws IOException {
		 FileWriter fw = new FileWriter("data.txt",true);
		 BufferedWriter bfw =new BufferedWriter(fw);
		 bfw.write(s+"\n");
		 bfw.close();
	 }
}

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简易计算器增加历史记录功能的Java代码示例: ```java import javax.swing.*;import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class CalculatorWithHistory extends JFrame { private JTextField result_Jtf; private JButton CE; private JButton history; private JButton equal; private String str = ""; private String[] historyArr = new String[5]; private int countEqu = 0; public CalculatorWithHistory() { setTitle("Calculator"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); result_Jtf = new JTextField(); result_Jtf.setEditable(false); add(result_Jtf, BorderLayout.NORTH); JPanel panel3 = new JPanel(); panel3.setLayout(new GridLayout(1, 2)); CE = new JButton("CE"); CE.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { str = ""; result_Jtf.setText(str); } }); history = new JButton("历史记录"); history.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { StringBuilder historyStr = new StringBuilder(); for (int i = 0; i < historyArr.length; i++) { if (historyArr[i] != null) { historyStr.append(historyArr[i]).append("\n"); } } JOptionPane.showMessageDialog(null, historyStr.toString(), "历史记录", JOptionPane.INFORMATION_MESSAGE); } }); panel3.add(CE); panel3.add(history); add(panel3, BorderLayout.SOUTH); JPanel panel1 = new JPanel(); panel1.setLayout(new GridLayout(4, 4)); String[] buttonLabels = {"7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+"}; for (String label : buttonLabels) { JButton button = new JButton(label); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String actionBut = e.getActionCommand(); str = str + actionBut; result_Jtf.setText(str); } }); panel1.add(button); } add(panel1, BorderLayout.CENTER); equal = new JButton("="); equal.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { str = calculate(str); result_Jtf.setText(str); countEqu = countEqu % 5; historyArr[countEqu] = str; countEqu++; str = ""; } }); add(equal, BorderLayout.EAST); pack(); setVisible(true); } private String calculate(String expression) { // 实现表达式求值的逻辑 // ... return result; } public static void main(String[] args) { new CalculatorWithHistory(); } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值