?博主:命運之光
??專欄:Python星辰秘典
??專欄:web開發(fā)(html css js)
??專欄:Java經(jīng)典程序設(shè)計
??博主的其他文章:點擊進入博主的主頁
前言:在現(xiàn)代社會中,計算器是我們生活中不可或缺的工具之一。它們可以輕松地進行各種數(shù)值計算,從簡單的加減乘除到復雜的科學運算,為我們提供了快捷準確的計算結(jié)果。但你是否曾想過,我們可以親手打造一個屬于自己的計算器應用程序,體驗計算世界的奇妙之旅?本文將帶領(lǐng)你進入計算器應用程序的開發(fā)領(lǐng)域。我們將使用Java編程語言和Swing圖形界面庫,從零開始構(gòu)建一個簡單但功能強大的計算器應用程序。無論你是計算機科學專業(yè)的學生,還是對編程和應用開發(fā)感興趣的愛好者,這個實踐項目都將為你提供一個寶貴的機會來深入了解應用程序開發(fā)的流程和技術(shù)。
?
目錄
項目三多功能計算器
??實驗內(nèi)容
界面設(shè)計
用戶界面布局
計算功能實現(xiàn)
計算方法實現(xiàn)
主函數(shù)
??問題描述
??項目功能
??項目分析
??項目設(shè)計
項目源代碼
??總結(jié)
項目三多功能計算器
??實驗內(nèi)容
通過編寫計算器程序,熟悉Java Swing庫的使用。
學習處理用戶界面事件和實現(xiàn)基本的計算功能。
界面設(shè)計
創(chuàng)建一個窗口并設(shè)置標題為"計算器"。
設(shè)置窗口大小為320x420,并禁止調(diào)整窗口大小。
設(shè)置天空藍色背景。
創(chuàng)建一個菜單欄,其中包含一個名為"歷史記錄"的菜單。
在"歷史記錄"菜單中添加一個菜單項"查看歷史記錄"。
用戶界面布局
創(chuàng)建一個面板作為內(nèi)容面板,并設(shè)置邊距和布局。
在內(nèi)容面板的北部(上方)添加一個只讀文本框,用于顯示計算結(jié)果和用戶輸入。
在內(nèi)容面板的中央添加一個網(wǎng)格布局的按鈕面板,包含操作符和數(shù)字按鈕。
計算功能實現(xiàn)
實現(xiàn)ActionListener接口,處理按鈕的點擊事件。
根據(jù)點擊的按鈕執(zhí)行相應的操作。
清空按鈕("C"):清空文本框。
全部清除按鈕("CE"):清空文本框并重置計算器的內(nèi)部狀態(tài)。
刪除按鈕("刪除"):刪除文本框中最后一個字符。
運算符按鈕("+", "-", "*", "/"):將文本框中的數(shù)值保存為第一個操作數(shù),并記錄運算符,然后清空文本框。
等號按鈕("="):將文本框中的數(shù)值保存為第二個操作數(shù),根據(jù)記錄的運算符執(zhí)行計算,并將結(jié)果顯示在文本框中,并將計算歷史記錄添加到列表中。
取反按鈕("±"):將文本框中的數(shù)值取反。
倒數(shù)按鈕("1/x"):計算文本框中數(shù)值的倒數(shù)。
平方按鈕("平方"):計算文本框中數(shù)值的平方。
開方按鈕("√"):計算文本框中數(shù)值的平方根。
數(shù)字按鈕:將對應的數(shù)字追加到文本框中。
計算方法實現(xiàn)
實現(xiàn)一個私有方法calculate,接受兩個操作數(shù)和運算符作為參數(shù),并返回計算結(jié)果。
根據(jù)傳入的運算符執(zhí)行相應的計算操作。
主函數(shù)
設(shè)置外觀外觀為系統(tǒng)默認外觀。
在Swing事件調(diào)度線程中創(chuàng)建一個計算器對象并設(shè)置可見性。
??問題描述
該項目旨在解決以下問題:
用戶需要一個簡單易用的計算器程序,以便進行基本的數(shù)值計算操作。
用戶希望能夠在一個圖形界面中進行計算,而不是使用命令行或其他復雜的工具。
用戶希望能夠輕松地查看他們之前進行的計算歷史記錄,以便追溯和回顧。
用戶需要一個界面友好、功能完善的計算器,能夠處理常見的計算操作,如加減乘除、取反、倒數(shù)、平方、開方等。
??項目功能
項目UI設(shè)計如下:
?該項目實現(xiàn)了以下功能:
基本計算功能:用戶可以使用該計算器進行基本的數(shù)值計算,包括加法、減法、乘法和除法。
清空功能:用戶可以通過點擊"CE"按鈕清空當前顯示的計算結(jié)果,并重置計算器的內(nèi)部狀態(tài)。
刪除功能:用戶可以通過點擊"刪除"按鈕逐個刪除文本框中的字符,用于修正輸入錯誤。
運算符功能:用戶可以通過點擊運算符按鈕("+", "-", "*", "/")將文本框中的數(shù)值保存為第一個操作數(shù),并記錄選擇的運算符,然后清空文本框等待輸入第二個操作數(shù)。
等號功能:用戶可以通過點擊"="按鈕將文本框中的數(shù)值保存為第二個操作數(shù),并根據(jù)記錄的運算符執(zhí)行相應的計算操作,將結(jié)果顯示在文本框中。
取反功能:用戶可以通過點擊"±"按鈕將文本框中的數(shù)值取反,用于處理正負數(shù)的轉(zhuǎn)換。
倒數(shù)功能:用戶可以通過點擊"1/x"按鈕計算文本框中數(shù)值的倒數(shù)。
平方功能:用戶可以通過點擊"平方"按鈕計算文本框中數(shù)值的平方。
開方功能:用戶可以通過點擊"√"按鈕計算文本框中數(shù)值的平方根。
數(shù)字輸入功能:用戶可以通過點擊數(shù)字按鈕將對應的數(shù)字追加到文本框中,以便輸入操作數(shù)。
此外,該項目還提供了以下附加功能:
查看歷史記錄功能:用戶可以通過菜單欄中的"查看歷史記錄"選項查看之前進行的計算歷史記錄,以便回顧和追溯。歷史記錄以對話框的形式展示。
??項目分析
項目截圖展示
??該界面包含一個文本框用于顯示計算結(jié)果和用戶輸入,以及一系列按鈕用于執(zhí)行不同的計算和操作。你可以點擊按鈕并觀察文本框的變化以及計算結(jié)果的顯示。另外,你還可以點擊菜單欄中的"歷史記錄",然后選擇"查看歷史記錄"來查看之前的計算歷史記錄。
??項目設(shè)計
項目源代碼
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
public class Calculator extends JFrame implements ActionListener {
private JTextField displayField;
private double num1, num2;
private char operator;
private List<String> history;
public Calculator() {
setTitle("計算器");
setSize(320, 420);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
setResizable(false);
// 設(shè)置天空藍色背景
Color skyBlue = new Color(135, 206, 250);
getContentPane().setBackground(skyBlue);
// 創(chuàng)建菜單欄
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
// 創(chuàng)建"查看歷史記錄"菜單
JMenu historyMenu = new JMenu("歷史記錄");
menuBar.add(historyMenu);
// 創(chuàng)建歷史記錄菜單項
JMenuItem viewHistoryMenuItem = new JMenuItem("查看歷史記錄");
viewHistoryMenuItem.addActionListener(e -> {
String message = "";
for (String entry : history) {
message += entry + "\n";
}
JOptionPane.showMessageDialog(this, message, "歷史記錄", JOptionPane.INFORMATION_MESSAGE);
});
historyMenu.add(viewHistoryMenuItem);
JPanel contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(10, 10, 10, 10));
contentPane.setLayout(new BorderLayout());
contentPane.setBackground(skyBlue);
add(contentPane, BorderLayout.CENTER);
displayField = new JTextField();
displayField.setEditable(false);
displayField.setHorizontalAlignment(JTextField.RIGHT);
displayField.setPreferredSize(new Dimension(280, 50));
displayField.setFont(new Font("黑體", Font.PLAIN, 20));
contentPane.add(displayField, BorderLayout.NORTH);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(6, 4, 5, 5));
buttonPanel.setBackground(skyBlue);
String[] buttons = {
"%", "CE", "C", "刪除",
"1/x", "平方", "√", "/",
"7", "8", "9", "*",
"4", "5", "6", "-",
"1", "2", "3", "+",
"±", "0", ".", "="
};
for (String button : buttons) {
JButton btn = new JButton(button);
btn.addActionListener(this);
btn.setBackground(Color.WHITE);
btn.setFont(new Font("黑體", Font.PLAIN, 18));
buttonPanel.add(btn);
}
contentPane.add(buttonPanel, BorderLayout.CENTER);
history = new ArrayList<>();
}
@Override
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
switch (command) {
case "C":
displayField.setText("");
break;
case "CE":
displayField.setText("");
num1 = 0;
num2 = 0;
operator = '\u0000';
break;
case "刪除":
String text = displayField.getText();
if (!text.isEmpty()) {
displayField.setText(text.substring(0, text.length() - 1));
}
break;
case "+":
case "-":
case "*":
case "/":
num1 = Double.parseDouble(displayField.getText());
operator = command.charAt(0);
displayField.setText("");
break;
case "=":
num2 = Double.parseDouble(displayField.getText());
double result = calculate(num1, num2, operator);
displayField.setText(Double.toString(result));
history.add(num1 + " " + operator + " " + num2 + " = " + result);
break;
case "±":
double value = Double.parseDouble(displayField.getText());
value = -value;
displayField.setText(Double.toString(value));
break;
case "1/x":
double reciprocal = 1 / Double.parseDouble(displayField.getText());
displayField.setText(Double.toString(reciprocal));
break;
case "平方":
double square = Math.pow(Double.parseDouble(displayField.getText()), 2);
displayField.setText(Double.toString(square));
break;
case "√":
double squareRoot = Math.sqrt(Double.parseDouble(displayField.getText()));
displayField.setText(Double.toString(squareRoot));
break;
default:
displayField.setText(displayField.getText() + command);
}
}
private double calculate(double num1, double num2, char operator) {
double result = 0;
switch (operator) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
result = num1 / num2;
break;
}
return result;
}
public static void main(String[] args) {
try {
// 設(shè)置Look and Feel為系統(tǒng)默認
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
SwingUtilities.invokeLater(() -> {
Calculator calculator = new Calculator();
calculator.setVisible(true);
});
}
}
??總結(jié)
??在本次實驗中,我成功地實現(xiàn)了一個簡單的計算器應用程序。通過使用Java Swing庫,我創(chuàng)建了一個具有圖形界面的計算器窗口,用戶可以在其中進行基本的數(shù)值計算操作。在設(shè)計和開發(fā)過程中,我遇到了一些挑戰(zhàn)和問題,但最終成功地解決了它們。
??首先,我遇到了界面設(shè)計的挑戰(zhàn)。我花費了一些時間來決定如何布置按鈕和文本框,以使界面直觀且易于使用。使用Swing的布局管理器幫助我實現(xiàn)了靈活的界面設(shè)計,使得按鈕和文本框的布局得到了良好的控制。
??其次,處理按鈕點擊事件也是一個重要的方面。不同的按鈕具有不同的功能,包括數(shù)字輸入、運算符選擇、清空操作等。通過細致地處理按鈕點擊事件,并根據(jù)不同的按鈕命令執(zhí)行相應的操作,我成功地實現(xiàn)了這些功能,并使計算器能夠響應用戶的操作。
??另外,我實現(xiàn)了一個查看歷史記錄的功能。每次計算完成后,我將計算表達式和結(jié)果添加到歷史記錄中,并通過菜單欄提供了查看歷史記錄的選項。這樣,用戶可以隨時回顧之前的計算過程,方便追溯和復查。
??在這個項目中,我還學到了如何處理錯誤和異常情況。例如,當用戶嘗試除以零或輸入無效的內(nèi)容時,我給出了相應的錯誤提示。這提高了程序的健壯性,并增強了用戶體驗。文章來源:http://www.zghlxwxcb.cn/news/detail-530327.html
??通過這個實驗,我鞏固了Java Swing庫的使用,學習了如何設(shè)計和實現(xiàn)一個簡單的圖形界面應用程序。我進一步加強了對事件驅(qū)動編程和UI設(shè)計的理解。這個實驗對我的編程技能和項目開發(fā)經(jīng)驗都有很大的提升,為我未來的工作和學習打下了良好的基礎(chǔ)。文章來源地址http://www.zghlxwxcb.cn/news/detail-530327.html
到了這里,關(guān)于Java中規(guī)模軟件開發(fā)實訓——簡單計算器制作的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!