java制作简易计算器

1.首先思考一下制作计算器需要哪些Swing组件,下面列出一些制作计算器的一些常用组件:

     JFrame    Jpanel    JButton     JTextField

2.选用布局管理器:

    这里采用的是GridBagLayout,即网格包布局管理器。

3.如何处理按钮事件:

   这里可以分两种情况来考虑,一:处理0~9的数字按钮和"."按钮,这种按钮的单击事件很简单,只需要获取监听的对象,并在文本框中显示对象的数据即可。

                                                       二:处理操作按钮即文本为+,-,*,/,C(清除),D(删除)和=的按钮,这些按钮的事件处理稍微复杂。

4.具体实现代码如下:

      1.创建Calculator类,该类继承自JFrame类

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Calculator extends JFrame {
	private static final long serialVersionUID = 1L;
    private JTextField jtf=new JTextField();
    private JPanel panel=new JPanel();
    private GridBagLayout gridbaglayout=new GridBagLayout();
    private GridBagConstraints constraints=new GridBagConstraints();
    private int select=0;
//    private String command="";
    private double temp=0.0;
    private double number;
    
    public Calculator(){                                                           //创建Calculator类的构造方法
    	this.setTitle("计算器");
    	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	this.add(jtf,BorderLayout.NORTH);
    	this.add(panel, BorderLayout.CENTER);
    	panel.setLayout(gridbaglayout);                                           //将panel面板设置成网格包布局管理器   
    	this.add(panel);
    	jtf.setHorizontalAlignment(JTextField.RIGHT);                             //文本靠右          
    	ActionListener nums=new CalculatorAction1();
    	ActionListener opin=new CalculatorAction2();
    	constraints.fill=GridBagConstraints.BOTH;
//    	constraints.weightx=0.1;
//    	constraints.weighty=0.1;
    	constraints.gridheight=GridBagConstraints.REMAINDER;
    	addButton("",nums);
    	constraints.gridheight=1;
    	addButton("C",opin);
    	addButton("7",nums);
    	addButton("4",nums);
    	addButton("1",nums);
    	constraints.gridheight=GridBagConstraints.REMAINDER;
    	addButton("%",nums);
    	
    	constraints.gridheight=1;
    	addButton("D",opin);
    	addButton("8",nums);
    	addButton("5",nums);
    	addButton("2",nums);
    	constraints.gridheight=GridBagConstraints.REMAINDER;
    	addButton("0",nums);
    	
    	constraints.gridheight=1;
    	addButton("/",opin);
    	addButton("9",nums);
    	addButton("6",nums);
    	addButton("3",nums);
    	constraints.gridheight=GridBagConstraints.REMAINDER;
    	addButton(".",nums);
    	
    	constraints.gridheight=1;
    	addButton("*",opin);
    	addButton("-",opin);
    	addButton("+",opin);
    	constraints.gridheight=GridBagConstraints.REMAINDER;
    	addButton("=",opin);
    }
    private void addButton(String str,ActionListener list){                     //添加按钮方法
    	JButton button=new JButton(str);
    	if(str.equals("")||str.equals("%")){
    		button.setEnabled(false);
    	}
    	
    	button.addActionListener(list);      //向按钮添加事件
    	gridbaglayout.setConstraints(button, constraints);
    	panel.add(button);                   //将按钮添加到JPanel容器中 
    }
    
    class CalculatorAction1 implements ActionListener{                       //创建内部类并实现ActionListener接口,实现数字按钮的监听事件
    	public void actionPerformed(ActionEvent e){
    		String input = e.getActionCommand();
//    		System.out.println(input);
    		jtf.setText(jtf.getText()+input);   //在文本中显示用户单击的按钮文本内容
    	}
    }
    
    class CalculatorAction2 implements ActionListener{                      //创建内部类并实现ActionListener接口,实现操作按钮的监听事件
    	public void actionPerformed(ActionEvent e){
    		String command=e.getActionCommand();
    		if(command.equals("+")){
    			temp=Double.parseDouble(jtf.getText());
    			jtf.setText("");
    			select=1;
    		}
    		if(command.equals("-")){
    			temp=Double.parseDouble(jtf.getText());
    			jtf.setText("");
    			select=2;
    		}
    		if(command.equals("*")){
    			temp=Double.parseDouble(jtf.getText());
    			jtf.setText("");
    			select=3;
    		}
    		if(command.equals("/")){
    			temp=Double.parseDouble(jtf.getText());
    			jtf.setText("");
    			select=4;
    		}
    		if(command.equals("C")){
    			jtf.setText("");
    		}
    		if(command.equals("D")){
    			jtf.setText(jtf.getText().substring(0, jtf.getText().length()-1));
    		}
    		if(command.equals("=")){
    			if(select==1){
    				number=Double.parseDouble(jtf.getText());
    				jtf.setText((temp+number)+"");
    			}
    			else if(select==2){
    				number=Double.parseDouble(jtf.getText());
    				jtf.setText((temp-number)+"");
    			}
    			else if(select==3){
    				number=Double.parseDouble(jtf.getText());
    				jtf.setText((temp*number)+"");
    			}
    			else if(select==4){
    				number=Double.parseDouble(jtf.getText());
    				if(number==0){
    					JOptionPane.showMessageDialog(panel, "除数不能为0");
    				}
    				else
    				jtf.setText((temp/number)+"");
    			}
    		}
    	}
    }
 }
     2.创建CalculatorTest类

         

public class CalculatorTest {

	public static void main(String[] args) {
		Calculator mainFrame=new Calculator();
        mainFrame.setBounds(300, 200, 200, 200);
        mainFrame.setVisible(true);
        mainFrame.setResizable(false);
	}

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值