Java 100-005:java计算器(网格布局)

package java01;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
/**
 *   我的java每天100行代码005
 *   网格布局:计算器
 * @author Administrator
 *
 */
public class java005 {
	public static void main(String[] args) {
		//一般运营界面都用事件分配线程
		EventQueue.invokeLater(new Runnable() {
			public void run() {
			//显示窗口
				JFrame frame = new JFrame();
				frame.setTitle("Calculator");
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				frame.setVisible(true);
				frame.setSize(200,200);
				
				JPanel p = new CalculatorPanel();
				frame.add(p);
			}
		});
	}
}

class CalculatorPanel extends JPanel{
	//private JButton display;
	private JTextField display;
	private JPanel panel;
	//private JPanel panel1;
	private double result;
	private String lastCommand;
	private boolean start;
	
	public CalculatorPanel() {
		setLayout(new BorderLayout());
		
		result=0;
		lastCommand = "=";
		start = true;
		
		/*display = new JButton();
		display.setEnabled(false);
		add(panel1,BorderLayout.NORTH);*/
		
		/*panel1 = new JPanel();
		panel1.add(display);*/
		
		display = new JTextField();
		add(display,BorderLayout.NORTH);
		
		ActionListener insert = new InsertAction();
		ActionListener command = new CommandAction();
		
		panel = new JPanel();
		panel.setLayout(new GridLayout(4,4));
		
		addButton("7",insert);
		addButton("8",insert);
		addButton("9",insert);
		addButton("/",command);
		
		addButton("4",insert);
		addButton("5",insert);
		addButton("6",insert);
		addButton("*",command);
		
		addButton("1",insert);
		addButton("2",insert);
		addButton("3",insert);
		addButton("-",command);
		
		addButton("0",insert);
		addButton(".",insert);
		addButton("=",command);
		addButton("+",command);
		
		add(panel,BorderLayout.CENTER);
	}
	
	private void addButton(String label,ActionListener listener) {
		JButton button = new JButton(label);
		button.addActionListener(listener);
		panel.add(button);
	}
	
	private class InsertAction implements ActionListener{

		public void actionPerformed(ActionEvent e) {
			String input = e.getActionCommand();
			if(start) {
				display.setText("");
				start = false;
			}
			display.setText(display.getText()+input);	
		}
	}
	
	private class CommandAction implements ActionListener{

		public void actionPerformed(ActionEvent e) {
			String command = e.getActionCommand();
			
			if(start) {
				/*if(command.equals("-")) {
					display.setText(command);
					start = false;
				}
				else */
					lastCommand = command;
			}
			else {
				calculate(Double.parseDouble(display.getText()));
				lastCommand = command;
				start = true;
			}
		}
	}
	
	public void calculate(double x) {
		if(lastCommand.equals("+")) result += x;
		else if(lastCommand.equals("-")) result -= x;
		else if(lastCommand.equals("*")) result *= x;
		else if(lastCommand.equals("/")) result /= x;
		else if(lastCommand.equals("=")) result = x;
		display.setText(""+result);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_43356439/article/details/85041514
今日推荐