Java交互界面實現計算器開發設計【附函數源碼】

使用Java開發的簡易計算器,包括加、減、乘、除、平方、立方、小數等運算,適合學習GUI編程實踐,

之前在博客上和大家分享了一篇關於使用C#開發winform計算器的文章“C#還能這麼玩?“諾基亞大屏獨顯計算器”來咯!”,所以最近在用Java做GUI編程的時候就想着使用Java也實現一個類似的項目。

其實在GUI交互上,Java的計算器和C#開發的計算器思想類似,都是使用函數的形式實現各模塊的功能的。但同時畢竟是兩種不同的開發語言,所以在具體開發上還是有所不同的。

使用Java和C#開發交互界面,最大的區別就是:

C#的交互界面的實現是可以在設計模塊中直接添加控件並設置其屬性,同時還會生成與控件所綁定的控件函數的,

而Java則不同,Java的窗體和控件都需要使用代碼來設置的,包括控件尺寸、字體、顏色、位置座標等都是根據特定的函數來寫出來的,同時Java中的控件在最開始的時候是沒有函數與其綁定的,這就需要我們根據開發需求,爲控件設定相應的監聽函數。

這些瞭解過之後,接下來就是Java計算器開發的模塊化設計了。

在這裏我們需要首先定義私有的全局變量來接收在計算器運行過程中的一些變量,如輸入的數值、小數點、操作符、輸出框內容、計算結果等,因此對於在計算器使用過程中可能出現的變量要對其進行一一接收。在這裏我們使用setOutput表示文本框第一行輸出的內容,使用setOutput2表示文本框第二行輸出的內容。

	private static String setOutput = "";	//定義文本框輸出第一行
	private static String setOutput2 = "";	//定義文本框輸出第二行
	private static double INumFirst = 0.0;		//獲取第一次輸入的數值
	private static double INumSecond = 0.0;	//獲取第二次輸入的數值
	private static double IResult = 0.0;		//定義結果
	private static String Operation = "";		//定義操作符
	private static boolean OperationCliked = false;		//定義布爾類型判斷操作符是否單擊
	private static boolean DotCliked = false;	//定義布爾類型判斷小數點是否單擊
	private static double lastPrecisionNum = 1;		//定義小數點最後一位的精度爲1
	private static double ControlNum = 0;	//獲取當前控件的數值

同時在進行程序開發前,我們就應該先對項目的整個架構進行設計,考慮到程序在開發過程中需要哪些函數、實現哪些功能、需要用到怎樣的方法等。

就比如拿今天開發的這個計算器來說,我們需要有最基本的主函數,控件觸發時的集中處理函數(因爲我們不可能對計算器上的每一個控件設置一個處理函數,這樣會增大程序的複雜度)、操作符觸發時的處理函數、實現計算器界面佈局的函數。同時還應該對計算器的整個界面佈局進行設計,這是大灰狼在這個程序中設計的計算器界面,可以參考:

在這裏插入圖片描述

在我們有了這樣的總體設計之後,就是我們針對於各個函數功能的詳細設計了。

.

控件觸發時集中處理函數

首先是定義控件觸發時的集中處理函數,該函數的功能上可以根據實際情況分爲兩部分,第一部分是在我們沒有點擊運算操作符前,點擊數字控件所觸發的事件,也就是我們在輸入一個數值時要做的事情;第二部分是我們在點擊了運算操作符之後再點擊數字控件時所觸發的事件,按照實際情況,這時我們輸入的數值應該是要計算的第二個數值。

與此同時,每一部分也需要根據是否點擊小數點而分爲兩種操作,如果點擊了小數點,則說明將要輸入的數字是小數點後的,則要做相應的處理;若沒有點擊小數點,則說明此時輸入的爲整數位,應該讓相應的數值乘以10。

該函數的具體實現代碼如下:

//定義控件觸發時集中處理函數
public static void Numbers_Cliked() {
	//如果點擊在運算操作符
	if (OperationCliked) {
		//如果點擊了小數點
		if (DotCliked) {
			lastPrecisionNum *=0.1;
			double strDotnum = ControlNum*lastPrecisionNum;
			INumSecond += strDotnum;
		}
		else {
			INumSecond = INumSecond*10 + ControlNum;
		}
		setOutput2 = "";
		setOutput2 +=INumSecond;
		//return setOutput2;
	}
	
	//如果沒有點擊運算操作符
	else {
		if (DotCliked) {
			lastPrecisionNum *=0.1;
			double strDotnum = ControlNum*lastPrecisionNum;
			INumSecond += strDotnum;
		}
		else {
			INumSecond = INumSecond*10 + ControlNum;
		}
		setOutput = "";
		setOutput +=INumSecond;
		//return setOutput;
	}	
}

.

操作符點擊後數據轉換賦值函數

當我們點擊了運算操作符之後,說明我們的第一個數據已經輸入完成了,這個時候,我們將要輸入的是第二個數據,這時候我們就需要進行數據的賦值轉換,因爲我們最開始的時候是使用INumsecand這個變量來接收數據的,所以在點擊運算操作符之後,我們需要將INumsecand的值賦給INumfirst,並將INumsecand的值賦於0,重新接收第二個數據。

你可能會問,爲什麼不直接使用INumfirst接收第一個數據,使用INumsecand接收第二個數據,原因是因爲,當你點擊數字控件時,我們無法判斷你輸入的數據是第一個數據還是第二個數據,我們只能將你輸入的數據統一的賦值給某一個變量,在這裏這個變量就是INumsecand,只有我們判斷到當點擊了運算操作符之後,說明我們的上一個數據已經輸入完成了,這時候才需要我們將INumsecand賦值給INumfirst,來說明我們得到了第一個數據。

該函數的實現代碼如下:

//定義操作符點擊後數據轉換賦值的函數
public static void Operation_Cliked() {
	INumFirst = INumSecond;		//將第一次鍵入的值賦給第一個數
	INumSecond = 0;				//將接收輸入數值的變量賦值於0
	DotCliked = false;			//將布爾型小數點變量賦初值爲:未點擊
	lastPrecisionNum = 1;
}

.

計算器窗口界面函數

在這兩個函數完成之後,就是我們計算器的界面設計函數了,

在該函數中,我們需要對計算器的整體界面進行佈局設計,同時還需要對每一個控件添加監控,當我們點擊相應的控件的時候,可以觸發相應的事件操作。

運算符控件

如我們點擊加法按鍵時,需要將我們第一次輸入的數據和加法運算符輸出出來,並且調用操作符點擊後數據轉換賦值的函數,來進行數據的賦值轉換。

//設置加法按鍵+
		JButton add_bt = new JButton("+");
		add_bt.setBounds(5, 110, 80, 40);
		add_bt.setFont(font);
		container.add(add_bt);
		
		//添加單擊監控
		add_bt.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				Operation = "+";
				setOutput += Operation + "\n";
				text.setText(setOutput);	//數值和運算符輸出
				OperationCliked = true;
				Operation_Cliked();		//調用操作符點擊後數據轉換賦值的函數
				
			}
		});

數字控件

當我們點擊數字0-9時,說明我們正在進行數值的輸入,這個時候就需要獲取到相應控件上的數值,並且調用控件觸發時集中處理函數,將我們鍵入的數字進行賦值。

以控件數字7爲例,在這裏我使用num_7.getText()來獲取當前所點擊控件的文本,其實這是比較笨的一種方法,需要對每一個控件使用該函數,還有一種方法是獲取當前焦點所在的控件,並且獲取其文本,對這種方法熟悉的小夥伴可以留言大灰狼一起交流。

下面是數字7控件的相應觸發代碼:

JButton num_7 = new JButton("7");
num_7.setBounds(5, 200, 80, 40);
num_7.setFont(font);
container.add(num_7);
num_7.addActionListener(new ActionListener() {
	
	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		String strNum = num_7.getText();
		ControlNum = java.lang.Double.parseDouble(strNum);
		Numbers_Cliked();	//調用數值控件觸發集中處理函數
		text.setText(setOutput + setOutput2);	//文本框輸出
	}
});

其他數字控件與其類似。

小數點控件

當我們點擊小數點的時候,說明我們輸入的數據存在小數位,這個時候我們就需要對其作出相應的操作,如我們在點擊運算操作符之前點擊的小數點控件,則將小數點顯示在文本框的第一行,表示第一個數是一個小數,如果我們是在點擊運算操作符之後點擊的小數點控件,則需要將小數點顯示在文本框的第二行,表示我們輸入的第二個數是小數。

具體實現代碼如下:

//設置小數點按鈕
		JButton num_dot = new JButton(".");
		num_dot.setBounds(175, 335, 80, 40);
		num_dot.setFont(font);
		container.add(num_dot);
		num_dot.addFocusListener(new FocusListener() {
			
			@Override
			public void focusLost(FocusEvent arg0) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void focusGained(FocusEvent arg0) {
				// TODO Auto-generated method stub
				if (OperationCliked) {
					setOutput2 += ".";
					text.setText(setOutput + setOutput2);
					DotCliked = true;
				}
				else {
					setOutput += ".";
					text.setText(setOutput + setOutput2);
					DotCliked = true;
				}
				
			}
		});

等號控件

當我們點擊等號控件的時候,說明我們的數據和運算符的輸入已經完成了,接下來我們就只需要根據我們鍵入的運算符進行判斷,並進行相應的運算即可,同時在得到結果之後,我們還應將之前定義的所有變量賦予初值,方便我們進行下次輸入。

實現代碼如下:

//設置等號按鈕
JButton num_equ = new JButton("=");
num_equ.setBounds(260, 110, 80, 130);
num_equ.setFont(font);
container.add(num_equ);
num_equ.addActionListener(new ActionListener() {
	
	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		switch (Operation) {
		case "+":
			IResult = INumFirst + INumSecond;
			break;
		case "-":
			IResult = INumFirst - INumSecond;
			break;
		case "*":
			IResult = INumFirst * INumSecond;
			break;
		case "/":
			IResult = INumFirst / INumSecond;
			break;
		case "X2":
			IResult = INumFirst * INumFirst;
			break;
		case "X3":
			IResult = INumFirst * INumFirst * INumFirst;
			break;
		default:
			
			break;
		}
		if (Operation == "X2" )
		{
			setOutput = INumFirst + "*" + INumFirst + "\n";
			String strIResult = java.lang.Double.toString(IResult);
			setOutput2 = strIResult;
			text.setText(setOutput + setOutput2);
		}
		if (Operation == "X3" )
		{
			setOutput = INumFirst + "*" + INumFirst + "*" + INumFirst + "\n";
			String strIResult = java.lang.Double.toString(IResult);
			setOutput2 = strIResult;
			text.setText(setOutput + setOutput2);
		}
		else {
			setOutput = INumFirst + " " + Operation + " " + INumSecond + "\n";
			String strIResult = java.lang.Double.toString(IResult);
			setOutput2 = strIResult;
			text.setText(setOutput + setOutput2);
		}
		
		//計算結束,將變量賦予初值
		setOutput = "";	//定義文本框輸出
		setOutput2 = "";			
		INumFirst = 0;		
		INumSecond = 0;	
		IResult = 0.0;		//定義結果
		Operation = "";		//定義操作符
		OperationCliked = false;		//定義布爾類型判斷操作符是否單擊
		DotCliked = false;	//定義布爾類型判斷小數點是否單擊
		lastPrecisionNum = 1;		//定義小數點最後一位的精度爲1
		ControlNum = 0;	//獲取當前控件的數值
	}
});

清空按鈕

最後一個需要設置的控件就是清空按鈕,當我們點擊該控件時,之前輸入的所有東西都將會被清空,所有的變量都將會被賦予初值。

實現代碼如下:

//設置清空按鈕
JButton num_empty = new JButton("CE");
num_empty.setBounds(260, 245, 80, 130);
num_empty.setFont(font);
container.add(num_empty);
num_empty.addActionListener(new ActionListener() {
	
	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		setOutput = "";	//定義文本框輸出
		setOutput2 = "";
		INumFirst = 0.0;		//獲取第一次輸入的數值
		INumSecond = 0.0;	//獲取第二次輸入的數值
		IResult = 0.0;		//定義結果
		Operation = "";		//定義操作符
		OperationCliked = false;		//定義布爾類型判斷操作符是否單擊
		DotCliked = false;	//定義布爾類型判斷小數點是否單擊
		lastPrecisionNum = 1;		//定義小數點最後一位的精度爲1
		ControlNum = 0;	//獲取當前控件的數值
		text.setText("0");
	}
});

在計算器的設計界面這些基本的控件操作完成之後,我們的計算器窗口界面函數就基本完成了。之後我們只需要在主方法中調用該函數即可實現Java計算器的運行,

.

主方法調用

主方法調用代碼如下:

public static void main(String[] args) {
		// TODO Auto-generated method stub		
		new Calculator_main().window("計算器");		
	}

實現效果:

在這裏插入圖片描述

**程序的完整源碼可以在[Java簡易計算器【可直接編譯】]下載,

或者關注我的微信公衆號“灰狼洞主”回覆“Java計算器”即可獲取程序完整源碼!

在這裏插入圖片描述

覺得不錯記得點贊關注喲!大灰狼期待與你一同進步!

在這裏插入圖片描述

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