java Swing计算器

本文介绍了一个使用Java Swing实现的简易计算器应用程序。该计算器具备基本的算术运算功能,并通过图形用户界面提供良好的用户体验。文中详细展示了计算器的设计思路、组件布局及部分核心代码。

作业要求,实现一个计算器,写的还不完善,仅供参考。

package AWTCalc;

import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class Calc extends JFrame implements ActionListener {
	JMenuBar mb;
	JMenu jm1,jm2;
	JMenuItem mi11,mi12,mi13,mi21,mi22,mi23;	
	JTextField field;
	JButton[] b=new JButton[20];
	String[] s = new String[]{"%","^","CE","←","7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"};//声明button上面的label
	 
	public Calc(int x,int y ,int w, int h){
		createMenu();
		createPanel();		
		setLocation(x,y);		
	    setSize(w,h);	    
	    setVisible(true);	    
	    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);	
	    validate();
	}

	 void createMenu() {			 //创建menu
		 mb = new JMenuBar();
		 jm1 = new JMenu("Edit");
		 jm2 = new JMenu("look");
		 mi11 = new JMenuItem("copy");
		 mi12 = new JMenuItem("paste");
		 mi13 = new JMenuItem("close");
		 mi21 = new JMenuItem("standerd");
		 mi22 = new JMenuItem("scientific");
		 mi23 = new JMenuItem("math");
		 
		 jm1.add(mi11);
		 jm1.add(mi12);
		 jm1.add(mi13);		 
		 jm2.add(mi21);
		 jm2.add(mi22);
		 jm2.addSeparator();   //在菜单之间增加分隔线
		 jm2.add(mi23);
		 
		 mb.add(jm1);
		 mb.add(jm2);
		 setJMenuBar(mb);
		
	}
	 
	 
	 public void createPanel(){		//创建menu下面的按钮面板

		 //JButtonListener  jbl=new JButtonListener(this);//当前窗口做监视器
		 
		 Container container = this.getContentPane();
		 JPanel jpanel1 = new JPanel();		 
		 jpanel1.setLayout(new FlowLayout());	
		 field=new JTextField(25);
		 field.setPreferredSize(new Dimension(500, 40));//添加文本域
		 field.addActionListener(this);
		 jpanel1.add(field);	
		 
		 JPanel jpanel2 = new JPanel();
		 jpanel2.setLayout(new GridLayout(5,4));
		 Font f=new Font("",Font.BOLD,36);
		 
		for(int i =0;i < 20 ; i++){					
			b[i] = new JButton(s[i]);				
			b[i].addActionListener(this);
			jpanel2.add(b[i]);//把b[i]添加到frame对象		
		}
		 
		container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
		container.add(jpanel1);
		container.add(jpanel2);
	 }
	

	 public void actionPerformed(ActionEvent e) {		
		 
		 Object target = e.getSource();
		 
		 String label = e.getActionCommand();
			
		 if ("0123456789.".indexOf(label) > 0)
	           handleNumber(label);
	     else
	           handleOperator(label);
	     }


	 
	 boolean isFirstDigit = true;
	    /**
	     * Number handling.
	     * @param key the key of the button.
	     */
	    public void handleNumber(String key) {
	       if (isFirstDigit)
	           field.setText(key);
	       else if ((key.equals(".")) && (field.getText().indexOf(".") < 0))
	           field.setText(field.getText() + ".");
	       else if (!key.equals("."))
	           field.setText(field.getText() + key);
	       isFirstDigit = false;
	    }
	   

	    double number = 0.0;
	    String operator = "=";
	   
	  void handleOperator(String key) {
	       if (operator.equals("+"))
	           number += Double.valueOf(field.getText());
	       else if (operator.equals("-"))
	           number -= Double.valueOf(field.getText());
	       else if (operator.equals("*"))
	           number *= Double.valueOf(field.getText());
	       else if (operator.equals("/"))
	           number /= Double.valueOf(field.getText());
	       else if (operator.equals("="))
	           number = Double.valueOf(field.getText());
		}
	       field.setText(String.valueOf(number));
	       operator = key;
	       isFirstDigit = true;
	    }
	   
	 
		 public static void main(String[] args) {				//main方法
				
				Calc c =new Calc(150,150,300,250);
			
		}
		 	
	 
}	


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值