JAVA Swing簡易初學計算器程序

廢話不說,直接上界面原圖

接下來就是源碼,大家直接複製粘貼就可以運行的了。

package calculator;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

/**
 * 實現一個簡易的計算器
 * 二數四則運算
 * @author 不忘初心
 *
 */
public class Calculator extends JFrame implements ActionListener {
	
	// 定義界面上的按鈕控件
	final String JButtonName[] = { "7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "×", ".", "0", "=", "÷" };
	// 定義字體內容
	Font font = new Font("宋體", Font.PLAIN, 17);
	// 定義面板,有二個面板 ,第一個就是 輸入框和ce ,第二個就是下面的操作的按鈕
	JPanel p1, p2;
	// 創建按鈕數組
	JButton Jb[] = new JButton[JButtonName.length];
	// 創建CE
	JButton ce;
	// 創建輸入框
	JTextField tf;
	// 創建構造方法,使用繼承了JFrame後,界面的初始化是需要在無參構造方法中實現
	public Calculator() {
		// 爲每一個按鈕進行點擊事件
		for (int i = 0; i < JButtonName.length; i++) {
			// 實例化並聲明按鈕名稱
			Jb[i] = new JButton("" + JButtonName[i]);
			// 設置字體
			Jb[i].setFont(font);
			// 設置按鈕透明
			Jb[i].setContentAreaFilled(false);
			Jb[i].addActionListener(this);
		}
		// 設置成4X4的布 局 網格佈局
		p1 = new JPanel(new GridLayout(4, 4));
		// 把按鈕添加到網格佈局中
		for (int i = 0; i < JButtonName.length; i++) {
			p1.add(Jb[i]);
		}
		// 設置第2個面板
		p2 = new JPanel(new BorderLayout());
		// 爲ce按鈕賦值
		ce = new JButton("CE");
		ce.setContentAreaFilled(false);
		// 爲CE按鈕設置監聽器
		ce.addActionListener(this);
		// 輸入框
		tf = new JTextField("0");
		tf.setFont(font);
		p2.add(ce, "East");
		p2.add(tf, "Center");

		this.add(p2, BorderLayout.NORTH);
		this.add(p1, BorderLayout.CENTER);
		this.setVisible(true);
		this.setTitle("簡易計算器");
		
		//使窗口居中
		int windowsWedth = 280;
		int windowsHeight = 300;
		int width = Toolkit.getDefaultToolkit().getScreenSize().width;
		int height = Toolkit.getDefaultToolkit().getScreenSize().height;
		this.setBounds((width - windowsWedth) / 2,
				(height - windowsHeight) / 2, windowsWedth, windowsHeight);

	}

	public void actionPerformed(ActionEvent e) {
		
		// 返回的是按的按鈕名
		String label = e.getActionCommand();
		if (e.getSource() == ce)
			Reset();
		else if ("0123456789.".indexOf(label) >= 0)
			RunNumber(label);
		else
			RunOperator(label);

	}
	// 是否是第一次按數字
	boolean isFirstDigit = true;

	public void RunNumber(String key) {
		if (isFirstDigit)
			tf.setText(key);// 如果是第一次按數字,覆蓋文本框的內容
		else if ((key.equals(".")) && (tf.getText().indexOf(".") < 0))// 按了點並且文本框中之前沒有點
			tf.setText(tf.getText() + ".");//如果按了多個".",只顯示一個
		else if (!key.equals("."))
			tf.setText(tf.getText() + key);// 疊加顯示在文本框中
		isFirstDigit = false;
	}

	double number = 0.0;
	String operator = "=";

	public void Reset() {// 重置
		tf.setText("0");
		isFirstDigit = true;
		operator = "=";
	}

	public void RunOperator(String key) {
		if (operator.equals("+"))
			// 將文本框中的字符串強制轉化爲Double類型
			number += Double.valueOf(tf.getText());
		else if (operator.equals("-"))
			number -= Double.valueOf(tf.getText());
		else if (operator.equals("×"))
			number *= Double.valueOf(tf.getText());
		else if (operator.equals("÷")) {
			number /= Double.valueOf(tf.getText());
		} else if (operator.equals("="))
			number = Double.valueOf(tf.getText());
		tf.setText(String.valueOf(number));
		operator = key;
		isFirstDigit = true;
	}

	public static void main(String[] args) {
		new Calculator();
	}
}

如果大家還有什麼不懂,可以私聊問我。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章