java简单计算器

java简单计算器

package dianzijisuanqi;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.plaf.nimbus.NimbusLookAndFeel;

public class MainFrame extends JFrame implements ActionListener{

	private JPanel contentPane;
	private static final String[] KEYS={
		"CE","C","BACK","%",
		"7","8","9","/",
		"4","5","6","*",
		"1","2","3","+",
		"0",".","=","-"
	};
	private JButton[] buttons=new JButton [KEYS.length];
	private boolean firstNum=true;
	private double result;
	private String operator="=";
	private boolean operatorFlag=false;
	private JTextField resultText;
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					UIManager.setLookAndFeel(new NimbusLookAndFeel());
					MainFrame frame = new MainFrame();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public MainFrame() {
		super();
	
		setResizable(false);
		setTitle("简易计算器hwn");
		getContentPane().setLayout(new BorderLayout());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(500, 50, 280, 230);
		resultText=new JTextField();
		resultText.setHorizontalAlignment(SwingConstants.RIGHT);
		resultText.setText("0");
		resultText.setEditable(false);
		getContentPane().add(resultText,BorderLayout.NORTH);
		JPanel calcPanel=new JPanel();
		getContentPane().add(calcPanel,BorderLayout.CENTER);
		final GridLayout gridLayout=new GridLayout(5,4,3,3);
		calcPanel.setLayout(gridLayout);
		for(int i = 0; i <KEYS.length; i++){
			buttons[i]=new JButton(KEYS[i]);
			buttons[i].addActionListener(this);
			calcPanel.add(buttons[i]);
		}
		buttons[3].setForeground(Color.RED);
		buttons[7].setForeground(Color.RED);
		buttons[11].setForeground(Color.RED);
		buttons[15].setForeground(Color.RED);
		buttons[19].setForeground(Color.RED);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		String command = e.getActionCommand();
		if("0123456789.".indexOf(command)!=-1){
			numberKey(command);
		}else if("C".equals(command)){
			resultText.setText("0");
			firstNum=true;
			result=0d;
			operatorFlag=false;
			operator="=";
		}else if("BACK".equals(command)){
			backPress(command);
		}else{
			operatorPress(command);
		}
	}

	private void operatorPress(String command) {
		// TODO Auto-generated method stub
		if("+".equals(operator)){
			result+=getNumber();
		}else if("-".equals(operator)){
			result-=getNumber();
		}else if("*".equals(operator)){
			result*=getNumber();
		}else if("/".equals(operator)){
			result/=getNumber();
		}else if("%".equals(operator)){
			result/=100;
		}else if("=".equals(operator)){
			result=getNumber();
		}
		if (operatorFlag){
			long l=(long)result;
			double temp=result-l;
			if(temp==0){
				resultText.setText(String.valueOf(l)); 
			}else{
				resultText.setText(String.valueOf(result));
			}
		}
		operatorFlag=true;
		operator =command;
		firstNum=true;
	}

	private double getNumber() {
		// TODO Auto-generated method stub
		double result=0;
		try{
			result=Double.valueOf(resultText.getText()).doubleValue();
		}catch(NumberFormatException e){
			e.printStackTrace();
		}
		return result;
	}

	private void backPress(String command) {
		// TODO Auto-generated method stub
		String temp=resultText.getText();
		if(temp.length()>0){
			temp=temp.substring(0, temp.length()-1);
			if(temp.length()==0){
				temp="0";
				firstNum=true;
				operator="=";
			}
		}
		resultText.setText(temp);
	}

	private void numberKey(String command) {
		// TODO Auto-generated method stub
		if(firstNum){
			resultText.setText(command);
			firstNum=false;
		}else if(".".equals(command)&&resultText.getText().indexOf(".")==-1){
			String temp=resultText.getText();
			resultText.setText(temp+".");
		}else if(!".".equals(command)){
			String temp=resultText.getText();
			resultText.setText(temp+command);
		}
	}

}


你可能感兴趣的:(java简单计算器)