阿里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)