⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculator.java

📁 ⑴定义组件:0~9,+、-、*、/、sqrt()、1/x、%、C=按钮;显示屏文本行;菜单; ⑵要求能关闭窗口;点击按钮
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.lang.*;
import java.math.*;
import java.io.*;
import java.text.DecimalFormat;
public class Calculator extends JFrame implements ActionListener,ItemListener { //导入动作监听接口
  //设计面板中的单位
  JTextField textAnswer;      
  JPanel panel, panel1, panel2, panel3,panel4;
  JMenuBar mainMenu;     //菜单条
  JTextField textMemory;  //用于答案的输出
  JLabel labelMemSpace; //labelMemSpace单纯做摆设,控制面板的形状
  JButton buttonBk, buttonCe, buttonC;
  JButton button[];   //
  JButton buttonMC, buttonMR, buttonMS, buttonMAdd;
  JButton buttonDot, buttonAddAndSub, buttonAdd, buttonSub, buttonMul,
      buttonDiv, buttonMod;
  JButton buttonSqrt, buttonDao, buttonEqual,buttonsin,buttoncos,buttontan,buttonx,
      buttonasin,buttonacos,buttonatan,buttonx3,buttonabs,buttonlog,buttonn,buttonxy,
      buttonA,buttonB,buttonc,buttonD,buttonE,buttonF;
  JMenu editMenu, viewMenu, helpMenu;
  JMenuItem copyItem, pasteItem, tItem, sItem, numberGroup, topHelp, aboutCal;
  DecimalFormat df; //设置数据输出精度
  boolean clickable; //控制当前能否按键
  double memoryd; //使用内存中存储的数字
  double vard, answerd; //用来保存double型数据的中间值(vard)和最后结果(answerd)
  short key = -1, prekey = -1; //key用来保存当前进行何种运算,prekey用来保存前次进行何种运算
  String copy; //做复制用
  JTextArea help; //帮助
  JScrollPane scrollHelp;
  boolean cb=false,jb_16=false,jb_10=false,jb_8=false,jb_2=false;   //状态标志
  //构造函数
  public Calculator() {
    clickable = true;
    answerd = 0;
    df = new DecimalFormat("0.############################"); //设置数据输出精度(对于double型值)
    textAnswer = new JTextField(5);
    textAnswer.setText("");
    textAnswer.setEditable(false);   //不可编辑
    textAnswer.setBackground(Color.white);
    panel = new JPanel();
    Container container=getContentPane();  //获得一个容器
    container.add(panel);    //将一个面版主件添加到容器中
    panel1 = new JPanel();
    panel2 = new JPanel();
    panel.setLayout(new BorderLayout());//网格布局面板
    //设计整个面板
    ActionListener MenuB= new MenuBAction();
    mainMenu = new JMenuBar();
    editMenu = new JMenu("编辑(E)");
    viewMenu = new JMenu("查看(V)");
    helpMenu = new JMenu("帮助(H)");
    copyItem = new JMenuItem("   复制(C) Ctrl+C");
    copyItem.addActionListener(MenuB);
    pasteItem = new JMenuItem("   粘贴(V) Ctrl+V");
    pasteItem.addActionListener(MenuB);
    editMenu.add(copyItem);
    editMenu.add(pasteItem);
    tItem = new JMenuItem("●标准型(T)");
    tItem.addActionListener(MenuB);
    sItem = new JMenuItem("   科学型(S)");
    sItem.addActionListener(MenuB);
    numberGroup = new JMenuItem("   数字分组(I)");
    numberGroup.addActionListener(MenuB);
    viewMenu.add(tItem);
    viewMenu.add(sItem);
    viewMenu.add(numberGroup);
    topHelp = new JMenuItem("   帮助主题(H)");
    topHelp.addActionListener(MenuB);
    help = new JTextArea(15, 20);
    scrollHelp = new JScrollPane(help);
    help.setEditable(false);
    help.append("执行简单计算\n");
    help.append("1.  键入计算的第一个数字。\n");
    help.append("2.  单击“+”执行加、“-”执行减、“*”执行乘或“/”执行除。\n");
    help.append("3.  键入计算的下一个数字。\n");
    help.append("4.  输入所有剩余的运算符和数字。\n");
    help.append("15.  单击“=”。\n");
    aboutCal = new JMenuItem("   关于计算器(A)");
    aboutCal.addActionListener(MenuB);
    helpMenu.add(topHelp);
    helpMenu.add(aboutCal);
    mainMenu.add(editMenu);
    mainMenu.add(viewMenu);
    mainMenu.add(helpMenu);
    setJMenuBar(mainMenu);
    panel4=new JPanel();
    panel.add(textAnswer, BorderLayout.NORTH);
    panel.add(panel4, BorderLayout.CENTER);
    panel.add(panel1, BorderLayout.SOUTH);
    panel1.setLayout(new BorderLayout());//边缘布局
    textMemory=new JTextField(3);
    textMemory.setEditable(false);
    textMemory.setBackground(new Color(217, 217, 217));
    labelMemSpace=new JLabel("                   ");
    buttonBk=new JButton("Backspace");
    buttonBk.setForeground(new Color(255, 0, 0));
    buttonCe=new JButton("CE");
    buttonCe.setForeground(new Color(255, 0, 0));
    buttonC=new JButton("C");
    buttonC.setForeground(new Color(255, 0, 0));
    buttonBk.addActionListener(this);
    buttonCe.addActionListener(this);
    buttonC.addActionListener(this);
    CheckboxGroup cbg=new CheckboxGroup();      //复选框
    CheckboxGroup cbgs=new CheckboxGroup();    //复选框
  	Checkbox cbg1=new Checkbox("十六进制",false,cbg);
  	Checkbox cbg2=new Checkbox("十进制",true,cbg);
  	Checkbox cbg3=new Checkbox("八进制",false,cbg);
  	Checkbox cbg4=new Checkbox("二进制",false,cbg);
  	Checkbox cbg5=new Checkbox("角度",false,cbgs);//单选框
  	Checkbox cbg6=new Checkbox("弧度",true,cbgs);//单选框
    panel1.add(panel2, BorderLayout.NORTH);
    panel2.setLayout(new FlowLayout(FlowLayout.RIGHT));
    cbg1.addItemListener(this);     //"十六进制"单选按钮注册监听
    cbg2.addItemListener(this);     //"十进制"单选按钮注册监听
    cbg3.addItemListener(this);     //"八进制"单选按钮注册监听
    cbg4.addItemListener(this);     //"二进制"单选按钮注册监听
    cbg5.addItemListener(this);     //"角度"单选按钮注册监听
    cbg6.addItemListener(this);     //"弧度"单选按钮注册监听
    panel2.add(textMemory);
    panel2.add(labelMemSpace);
    panel2.add(buttonBk);
    panel2.add(buttonCe);
    panel2.add(buttonC);
    panel4.add(cbg1); 
    panel4.add(cbg2); 
    panel4.add(cbg3);
    panel4.add(cbg4); 
    panel4.add(cbg5); 
    panel4.add(cbg6);
    panel3=new JPanel();
    panel1.add(panel3, BorderLayout.CENTER);
    button=new JButton[10];
    for(int i=0;i<button.length;i++) {
      button[i]=new JButton(Integer.toString(i));
      button[i].setForeground(new Color(0, 0, 255));
    }
    buttonA=new JButton("A");   //按钮实例化
    buttonA.setForeground(Color.blue);
    buttonB=new JButton("B");
    buttonB.setForeground(Color.blue);
    buttonc=new JButton("C");
    buttonc.setForeground(Color.blue);
    buttonD=new JButton("D");
    buttonD.setForeground(Color.blue);
    buttonE=new JButton("E");
    buttonE.setForeground(Color.blue);
    buttonF=new JButton("F");
    buttonF.setForeground(Color.blue);
    buttonMC=new JButton("MC");
    buttonMC.setForeground(Color.red);  //
    buttonMR=new JButton("MR");
    buttonMR.setForeground(Color.red);
    buttonMS=new JButton("MS");
    buttonMS.setForeground(Color.red);
    buttonMAdd=new JButton("M+");
    buttonMAdd.setForeground(Color.red);
    buttonDot=new JButton(".");
    buttonDot.setForeground(Color.blue);
    buttonAddAndSub = new JButton("+/-");
    buttonAddAndSub.setForeground(Color.blue);
    buttonAdd=new JButton("+");
    buttonAdd.setForeground(Color.red);
    buttonSub=new JButton("-");
    buttonSub.setForeground(Color.red);
    buttonMul=new JButton("*");
    buttonMul.setForeground(Color.red);
    buttonDiv=new JButton("/");
    buttonDiv.setForeground(Color.red);
    buttonMod=new JButton("%");
    buttonMod.setForeground(Color.red);
    buttonSqrt=new JButton("sqrt");
    buttonSqrt.setForeground(Color.red);
    buttonDao=new JButton("1/x");
    buttonDao.setForeground(Color.red);
    buttonEqual=new JButton("=");
    buttonEqual.setForeground(Color.red);
    buttonsin=new JButton("sin"); //求正弦
    buttoncos=new JButton("cos"); //求余弦
    buttontan=new JButton("tan");  //求正切
    buttonx=new JButton("x^1/2");  //求平方根
    buttonasin=new JButton("asin"); //求反正弦
    buttonacos=new JButton("acos"); //求反余弦
    buttonatan=new JButton("atan"); //求反正切
    buttonx3=new JButton("x^3");   //求立方
    buttonabs=new JButton("abs");  //求绝对值
    buttonlog=new JButton("log");  //求以e为底的对数
    buttonn=new JButton("n!");     //求阶乘
    buttonxy=new JButton("x^y");   //求x的y次方
    //将所有行为与监听绑定
    panel3.setLayout(new GridLayout(7, 6));
    JButton addbutton[]={buttonx,buttonx3,buttonabs,buttonlog,buttonn,buttonxy,
    buttonsin,buttoncos,buttontan,buttonatan,buttonasin,buttonacos,
    buttonA,buttonB,buttonc,buttonD,buttonE,buttonF,    
    buttonMC,button[7],button[8],button[9],buttonDiv,buttonSqrt,
    buttonMR,button[4],button[5],button[6],buttonMul,buttonMod,
    buttonMS,button[1],button[2],button[3],buttonSub,buttonDao,
    buttonMAdd,button[0],buttonAddAndSub,buttonDot,buttonAdd,buttonEqual};
    addButton(addbutton);
    buttonA.setEnabled(false); 
    buttonB.setEnabled(false);
    buttonc.setEnabled(false); 
    buttonD.setEnabled(false);
    buttonE.setEnabled(false);
    buttonF.setEnabled(false);
    setSize(300,150);
    pack();
    setVisible(true);
    setResizable(false);
  }
   private void addButton(JButton button[])  //给按钮数组中的按钮分别注册监听并将他们放进一个面板中
	{
		for(int i=0;i<button.length;i++)
		{
			button[i].addActionListener(this);
		    panel3.add(button[i]);
		}
		
	}
	public void itemStateChanged(ItemEvent e)  //单选框注册事件
	{
		Checkbox temp=(Checkbox)e.getItemSelectable();
		if(temp.getLabel()=="角度") cb=true;
		else if(temp.getLabel()=="十六进制") 
		{
			try
			{
				if(textAnswer.getText()!="")
			{
				//对文本框中的数据进行转换
			if(jb_10==true) textAnswer.setText(Integer.toHexString(Integer.parseInt(textAnswer.getText())));
			else if(jb_8==true) {String k=Integer.valueOf(textAnswer.getText(),8).toString(); 
			textAnswer.setText(Integer.toHexString(Integer.parseInt(k)));}   
			else if(jb_2==true) {String k=Integer.valueOf(textAnswer.getText(),2).toString();
			textAnswer.setText(Integer.toHexString(Integer.parseInt(k)));}
			}
			}catch(NumberFormatException ie){}
			//设置标志位
		    jb_16=true; jb_10=false; jb_8=false; jb_2=false;
		    //更改按钮的状态
		    buttonsin.setEnabled(false); buttoncos.setEnabled(false);
		    buttontan.setEnabled(false); buttonasin.setEnabled(false);
		    buttonacos.setEnabled(false); buttonatan.setEnabled(false);
		    buttonA.setEnabled(true); buttonB.setEnabled(true);
		    buttonc.setEnabled(true); buttonD.setEnabled(true);
		    buttonE.setEnabled(true);buttonF.setEnabled(true);
		    button[8].setEnabled(true); button[9].setEnabled(true);
		    button[3].setEnabled(true); button[4].setEnabled(true);
		    button[5].setEnabled(true); button[6].setEnabled(true);
		    button[7].setEnabled(true); buttonDot.setEnabled(false);
		    button[2].setEnabled(true);
		}
		else if(temp.getLabel()=="十进制")

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -