1. 程式人生 > 其它 >阿里P8大佬整理!Java互動介面實現計算器開發設計【附函式原始碼

阿里P8大佬整理!Java互動介面實現計算器開發設計【附函式原始碼

阿里P8大佬整理!Java互動介面實現計算器開發設計【附函式原始碼

該函式的具體實現程式碼如下:


//定義控制元件觸發時集中處理函式

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";



### 最後

**如果大家需要這份清華大牛整理的進大廠必備的redis視訊、面試題和技術文件的話,[可以戳這裡即可免費獲取!](https://gitee.com/vip204888/java-p7)**

祝大家早日進入大廠,拿到滿意的薪資和職級~~~加油!!

感謝大家的支援!!

![image.png](https://upload-images.jianshu.io/upload_images/24616006-a60d2dca988e7086.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)