简易计算器---JAVA

这篇博客旨在介绍如何使用Eclipse和Java Swing来创建一个具备基本运算和输入验证功能的计算器。计算器支持加减乘除及百分比运算,并集成了复制、粘贴、剪切功能,同时提供退出选项。此外,还利用了Math类进行对数和幂运算,并在界面上展示了作者的个人信息。代码实现中特别注意了数据合法性的检查,确保用户输入的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验题目:基于Java Swing的应用程序实验

实验目的:学习使用Eclipse编写运行Java程序,综合应用Java的SWING、输入输出流和数据库的相关操作

实验内容:设计并实现一个GUI简易计算器

要求:

1)至少实现“+”“-”“*”“/”“%”运算

2)调用Math类的相关方法,至少实现对数运算、幂运算;

3利用菜单条、菜单项、菜单至少实现数值复制粘贴剪切退出功能,并添加相应的快捷键分别为“Ctrl+c”“Ctrl+v”“Ctrl+x”“Ctrl+e”

4检查数据合法性,若输入数据不合法,则调用文本框类的相关方法,弹出窗口提示用户进行正确输入;

5体现自己的工作量界面至少显示作者的班级、姓学号


具体代码:

Computer.java

public class computer {
    public static void main(String args[]){
   	 WindowOperation win=new WindowOperation();
   	 win.setBounds(700,300,500,400);
   	 win.setTitle("简易计算器");
    }
}

ComputerListener.java

import java.awt.event.*;
import  javax.swing.*;
import java.awt.*;
	
public  class ComputerListener implements ActionListener {
    JTextField  inputNumberOne,inputNumberTwo;
    JTextArea textShow;
    String fuhao=" ";

    public void setJTextFieldOne(JTextField t){
 	   inputNumberOne =t;
    }
    public void setJTextFieldTwo(JTextField t){
 	   inputNumberTwo =t;
    }
    public void setJTextArea(JTextArea area){
 	   textShow =area;
    }
    public void setFuhao(String s){
 	   fuhao=s;
    }
    static public double log(double value, double base) {
 	   double a=0;
 	   a=Math.log(value)/Math.log(base);  	   
 	   return a;
 	   }
    public void actionPerformed(ActionEvent e){
     try{
 	       double number1;
 	       double number2;
 		   double result=0;
 		   number1=Double.parseDouble(inputNumberOne.getText());
 		   number2=Double.parseDouble(inputNumberTwo.getText());
 		   if(fuhao.equals("+")){
 			   result=number1+number2;
 		   }
 		   else if(fuhao.equals("-")){
 			   result=number1-number2;  
 			   }
 		   else if(fuhao.equals("*")){
 			   result=number1*number2;  
 			   }
 		   else if(fuhao.equals("/")){
 			   result=number1/number2;  
 			   }
 		   else if(fuhao.equals("%")){
 			   result=number1%number2;  
 			   }
 		   else if(fuhao.equals("幂运算")){
 			   result=Math.pow(number1, number2);
 		   }
 		   else if(fuhao.equals("对数运算")){
 			   result=log(number1,number2);
 		   }
            
             if(fuhao.equals(" ")){
         	   JOptionPane.showMessageDialog(null,"请输入运算符号","警告对话框",JOptionPane.WARNING_MESSAGE);
            }
            else{
 		   textShow.append(number1+" "+fuhao+" "+number2+"="+result+"\n");
            }
     }
     catch(Exception exp){
     	JOptionPane.showMessageDialog(null,"请输入数字","警告对话框",JOptionPane.WARNING_MESSAGE);
     }
    }
}

ConcreteMediator.java

import javax.swing.*;
import java.awt.datatransfer.*;


public class ConcreteMediator {
     JMenu menu;
     JMenuItem copyItem,cutItem,pasteItem;
     JTextArea text;
     public void openMenu(){
    	 Clipboard clipboard =text.getToolkit().getSystemClipboard();
    	 String str =text.getSelectedText();
    	 if(str==null){
    		 copyItem.setEnabled(false);
    		 cutItem.setEnabled(false);
    	 }
    	 else{
    		 copyItem.setEnabled(true);
    		 cutItem.setEnabled(true);
    	 }
    	 boolean boo =clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor);
    	 if(boo){
    		 pasteItem.setEnabled(true);
    	 }
     }
     public void paste(){
    	 text.paste();
     }
     public void copy(){
    	 text.copy();
     }
     public void cut(){
    	 text.cut();
     }
     public void registerMenu(JMenu menu){
    	 this.menu=menu;
     }
     public void registerPasteItem(JMenuItem item){
    	 pasteItem=item;
     }
     public void registerCopyItem(JMenuItem item){
    	 copyItem=item;
    	 copyItem.setEnabled(false);
     }
     public void registerCutItem(JMenuItem item){
    	 cutItem =item;
    	 cutItem.setEnabled(false);
     }
     public void registerText(JTextArea text){
    	 this.text=text;
     }
}

WindowOperation.java

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.border.EmptyBorder;

import java.awt.FlowLayout;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
public class WindowOperation extends JFrame {
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	JTextField inputNumberOne,inputNumberTwo;
    JComboBox<String>choiceFuhao;
    JTextArea textShow;
    JButton button;
    JMenuBar menubar;
    JMenu menu;
    JMenuItem copyItem,cutItem,pasteItem,quitItem;
    OperatorListener operator;
    ComputerListener computer;
    private JTextField textField;
    public WindowOperation(){
    	init();
    	setVisible(true);
    	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    void init(){
    	getContentPane().setLayout(new FlowLayout());
    	inputNumberOne =new JTextField(5);
    	inputNumberTwo =new JTextField(5);
    	choiceFuhao =new JComboBox<String>();
    	button = new JButton("计算");
    	choiceFuhao.addItem("选择运算符号");
    	String []a={"+","-","*","/","%","幂运算","对数运算"};
    	for(int i=0; i<a.length;i++){
    		choiceFuhao.addItem(a[i]);
    	}
    textShow =new JTextArea(9,30);
    operator =new OperatorListener();
    computer =new ComputerListener();
    ConcreteMediator mediator=new ConcreteMediator();
    menubar=new JMenuBar();
    menu=new JMenu("编辑");
    menu.addMenuListener(new MenuListener(){
    	public void menuSelected(MenuEvent e){mediator.openMenu();}
    	public void menuDeselected(MenuEvent e){}
    	public void menuCanceled(MenuEvent e){}
    	
    });
    copyItem=new JMenuItem("复制");
    copyItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
    copyItem.addActionListener(new ActionListener(){
    	public void actionPerformed(ActionEvent e){mediator.copy();
    	}
    	});
    cutItem=new JMenuItem("剪切");
    cutItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
    cutItem.addActionListener(new ActionListener(){
    	public void actionPerformed(ActionEvent e){mediator.cut();
    	}
    	});
    pasteItem=new JMenuItem("粘贴");
    pasteItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
    pasteItem.addActionListener(new ActionListener(){
    	public void actionPerformed(ActionEvent e){mediator.paste();
    	}
    	});
	quitItem = new JMenuItem("退出");
	quitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CTRL_MASK));
	quitItem.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			System.exit(0);
		}
	});
    
    operator.setJComboBox(choiceFuhao);
    operator.setWorkTogether(computer);
    computer.setJTextFieldOne(inputNumberOne);
    computer.setJTextFieldTwo(inputNumberTwo);
    computer.setJTextArea(textShow);
    choiceFuhao.addItemListener(operator);
    button.addActionListener(computer);
    
    menubar.add(menu);
    menu.add(cutItem);
    menu.add(copyItem);
    menu.add(pasteItem);
    menu.add(quitItem);
    setJMenuBar(menubar);
    add(textShow,BorderLayout.CENTER);

    mediator.registerMenu(menu);
	mediator.registerCopyItem(copyItem);
	mediator.registerCutItem(cutItem);
	mediator.registerPasteItem(pasteItem);
	mediator.registerText(textShow);
    
    getContentPane().add(inputNumberOne);
    getContentPane().add(choiceFuhao);
    getContentPane().add(inputNumberTwo);
    getContentPane().add(button);
    getContentPane().add(new JScrollPane(textShow));
    JLabel biaoqian=new JLabel("软件154 201507207 魏煜昊 ");
    getContentPane().add(biaoqian);


    }
}


OperatorListener.java

import java.awt.event.*;
import  javax.swing.*;
public class OperatorListener implements ItemListener {
      JComboBox <String>choice;
      ComputerListener workTogether;
      public void setJComboBox(JComboBox<String> box){
    	  choice=box;
      }
      public void setWorkTogether(ComputerListener computer){
    	  workTogether =computer;
    	  
      }
      public void itemStateChanged(ItemEvent e){
    	  String fuhao =choice.getSelectedItem().toString();
    	  workTogether.setFuhao(fuhao);
      }
}

实现效果:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值