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

📄 计算器.java

📁 复杂计算器的实现
💻 JAVA
字号:
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.BorderFactory;

public class Calculator {                         	
	public static void main(String []args){	                   //程序入口	
		
		CalculatorFrame CalculatorFrame=new CalculatorFrame(); //创建CalculatorFrame类实例

	}
}
/**************************************************************
 *  界面类
 *************************************************************/

class CalculatorFrame extends JFrame implements ActionListener{
	
		JRadioButton jRadioButton;                             //声明窗口中用到的各种组件 
		JTextField displayTextField;
		JButton backButton,clearButton,button;
		JPanel textPanel,controlPanel,mainPanel,digitalPanel,jinzhiPanel;         
	   
	    double result = 0;                         
	    String operator = "=";                                 //保存运算符的变量                     
	    boolean start = true;                                  //设置输入标志位                     
	    Calculate calculate;                            
		String getValue="";
	public CalculatorFrame(){
		
		this.setTitle("计算器");                               //设置计算器标题
		this.setLayout(new BorderLayout());                    //设置布局管理器
		calculate=new Calculate();                             //创建Calculate类的一个对象
		/*****************************************************
		 *  结果显示面板
		 *****************************************************/
		textPanel=new JPanel();                                //创建显示面板		
		displayTextField=new JTextField("0",24);		       //创建显示文本框
		textPanel.add(displayTextField);                       //将文本框添加到显示面板上
		this.add(textPanel,"North");
		
		
		controlPanel=new JPanel();                             //创建控制面板
		controlPanel.setLayout(new FlowLayout(FlowLayout.RIGHT,5,5));			
		backButton=new JButton("退格");                        //创建"退格"按钮
		clearButton=new JButton("清空");                       //创建"清空"按钮
		backButton.addActionListener(this);                    //为按钮添加事件监听器
		clearButton.addActionListener(this);
		backButton.setFont(new Font("SansSerif", Font.PLAIN, 12));//设置字体
		clearButton.setFont(new Font("SansSerif", Font.PLAIN, 12));		
		controlPanel.add(backButton);                          //将按钮添加到面板上
		controlPanel.add(clearButton);
		this.add(controlPanel,"Center");                       //将面板添加到框架窗口中
		
		/******************************************************
		 * 主面板
		 ******************************************************/
		mainPanel=new JPanel();                                   //创建主面板并设置布局管理
		mainPanel.setLayout(new BorderLayout());
		jinzhiPanel=new JPanel();
		jinzhiPanel.setLayout(new FlowLayout(FlowLayout.CENTER,4,4));		
		String jRadioButtons[]={"十进制","二进制","八进制","十六进制"};
		ButtonGroup buttonGroup=new ButtonGroup();               //创建单选按钮组
		
		for(int i=0;i<jRadioButtons.length;i++){                 //用循环语句生成按钮
			if(i==0){
				jRadioButton=new JRadioButton(jRadioButtons[i],true);
			}
			
			jRadioButton=new JRadioButton(jRadioButtons[i]);    //创建单选按钮  								
		    jRadioButton.setFont(new Font("SansSerif", Font.PLAIN, 12));
			jRadioButton.setForeground(Color.BLUE);
			jRadioButton.addActionListener(this);               //添加事件监听器
			buttonGroup.add(jRadioButton);                      //将单选按钮添加到组里
			jinzhiPanel.add(jRadioButton);			
		}
		digitalPanel=new JPanel();
		digitalPanel.setLayout(new GridLayout(4,4,5,5));        //将数字面板布局管理器设置为
		String buttons="789/456*123-0.=+";	                    //GridLayout,4行4列,间隔5像素
		
		for (int i = 0; i < buttons.length(); i++) {
      	 button = new JButton(buttons.substring(i, i + 1));
      	 button.setForeground(Color.BLUE);                      //设置按钮文本颜色为蓝色
      	 button.addActionListener(this);                        //为按钮注册事件监听器
      	 digitalPanel.add(button);      	                    //将按钮放置在数字面板上      
      	                  
        } 
        mainPanel.add(jinzhiPanel,"North");                     //将进制转换面板放置在顶部
        mainPanel.add(digitalPanel,"Center");                   //将数字面板放置在主面板的中部
		this.add(mainPanel,"South");                            //将主面板放置在框架底部	
	 /******************************************************
	  *      界面显示
	  ******************************************************/
	   setLocation(200,100);                                    //设置界面出现位置
	   setSize(285,260);                                        //设置界面大小
	   setResizable(false);		                                //将界面大小设置为不可编辑
	   setVisible(true);                                        //设置界面可见
	   	
		
	}
	
	public void actionPerformed(ActionEvent evt) {               //响应用户点击按钮事件
      
      String inputString = evt.getActionCommand();            
      if ('0' <= inputString.charAt(0) && inputString.charAt(0) <= '9' || inputString.equals(".")) {         
        if (start) 
        displayTextField.setText(inputString);                  //在文本框中显示用户输入
        else 
        displayTextField.setText(displayTextField.getText() + inputString);           
        start = false;
        getValue=displayTextField.getText();
        
      }
    else {
         if (start) {
            if (inputString.equals("-")) { 
               displayTextField.setText(inputString);            //显示用户输入的操作符或数字 
               start = false; 
            }
            else operator = inputString;                         //得到用户选择的运算符
         }
         else {         	
            double input = Double.parseDouble(displayTextField.getText());//取得用户输入并转换格式
            result=calculate.calculated(input,operator);         //调用Calculator类的计算方法获得结果
            operator = inputString;                              // 用operater保存用户要进行的操作的操作符
            start = true;
            displayTextField.setText(Double.toString(result));   //将结果显示在文本框中
         }
      }     
      
      
     if(inputString.equals("二进制")) {
      	
      	displayTextField.setText(calculate.toBinary(getValue));  //调用计算类的方法toBinary()
      }
      else if(inputString.equals("十进制")) {
        displayTextField.setText(getValue);
      }
      else if(inputString.equals("八进制")) {
      	displayTextField.setText(calculate.toOctal(getValue));   //调用计算类的方法toOctal()
      }    
      else if(inputString.equals("十六进制")) {
      	displayTextField.setText(calculate.toHex(getValue));     //调用计算类的方法toHex()
      }
      else if(inputString.equals("退格")) {      	
      	String getStr=displayTextField.getText();
      	if(getStr!=""){ 
      	     		
      		String subStr=getStr.substring(0,getStr.length()-1); //得到退格后的 字符串
      	    displayTextField.setText(subStr);                    //显示退格后的字符串
      	    
      	}
      	
      }    
      else if(inputString.equals("清空")) {                   
      	
      	displayTextField.setText("");                            //将显示文本框清空
      	
      }            
      
   } 
	
}
/***********************************************************
 *        计算类
 ***********************************************************/

class Calculate{                                                 
	
   public double result=0;                                       //存放中间结果及最终结果
   public Calculate() {
   	
    }
   public double calculated(double inputNum,String operator){
   	  
   	  
   	  if (operator.equals("+")) result += inputNum;              //根据用户选择的运算符执行不同的运算
      else if (operator.equals("-")) result -= inputNum;
      else if (operator.equals("*")) result *= inputNum;
      else if (operator.equals("/")) result /= inputNum;
      else if (operator.equals("=")) result = inputNum;
      return result;                                             //返回运算结果
   } 
   
   public String toBinary(String getValue){                      //转换为二进制
   	
   	return Integer.toBinaryString(Integer.parseInt(getValue));
   } 
   public String toOctal(String getValue){                       //转换为八进制 
   	
   	return Integer.toOctalString(Integer.parseInt(getValue));
   } 
   public String toHex(String getValue){                         //转换为十六进制
   	
   	return Integer.toHexString(Integer.parseInt(getValue));
   } 
}

⌨️ 快捷键说明

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