Java Swing編寫一個簡單的計算器軟件
實現(xiàn)要求
1、使用Java圖形界面組件設(shè)計軟件,界面如圖所示。
2、軟件能夠滿足基本的“加、減、乘、除"等運算要求。
3、程序代碼清晰,語法規(guī)范,結(jié)構(gòu)合理,邏輯正確。
4、編輯菜單中包括“復(fù)制和粘貼"兩個菜單項,為菜單項編寫事件代碼。
實現(xiàn)代碼:
import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JTextField; public class Calculator extends JFrame { // 顯示計算器按鈕的值和計算后的值 JTextField display; JPanel panel1;// 面板1,放文本框 JPanel panel2;// 面板2,放按鈕 String nowButton;// 當前按下的變量 public Calculator() { this.setBounds(0, 0, 500, 500); this.setLocationRelativeTo(null);// 讓窗口在屏幕中間顯示 setTitle("計算器"); // 菜單欄 JMenuBar menuBar = new JMenuBar();// 創(chuàng)建一個菜單欄 JMenu editMenu = new JMenu("編輯(E)");// 創(chuàng)建一級菜單 //創(chuàng)建 "編輯" 一級菜單的子菜單 JMenuItem copyMenuItem = new JMenuItem("復(fù)制"); JMenuItem pasteMenuItem = new JMenuItem("粘貼"); // 子菜單添加到一級菜單 editMenu.add(copyMenuItem); editMenu.add(pasteMenuItem); //將一級菜單添加到菜單欄 menuBar.add(editMenu); //將菜單欄添加到JFrame窗口 this.setJMenuBar(menuBar); // 設(shè)置 "復(fù)制" 子菜單被點擊的監(jiān)聽器 copyMenuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("復(fù)制 被點擊"); String i = display.getText(); display.copy(); JButton jb1 = new JButton("復(fù)制"); jb1.addActionListener(this); } }); // 設(shè)置 "粘貼" 子菜單被點擊的監(jiān)聽器 pasteMenuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("粘貼 被點擊"); display.paste(); } }); // 初始化,把文本框加在上面north里 display = new JTextField(""); display.setEnabled(true); add(display, BorderLayout.NORTH); // 監(jiān)聽操作按鈕 ActionListener command = new commandAction(); // panel1是中間16個按鈕的布局,放到布局管理器的center里 panel1 = new JPanel(); panel1.setLayout(new GridLayout(5, 4, 5, 5)); addButton1("7", command); addButton1("8", command); addButton1("9", command); addButton1("/", command); addButton1("4", command); addButton1("5", command); addButton1("6", command); addButton1("*", command); addButton1("1", command); addButton1("2", command); addButton1("3", command); addButton1("-", command); addButton1("0", command); addButton1("+/-", command); addButton1(".", command); addButton1("+", command); addButton1("1/x", command); addButton1("%", command); addButton1("sqrt", command); addButton1("=", command); add(panel1, BorderLayout.SOUTH); // panel2是下面的backspace和c的2個的布局,放到布局管理器的south里 panel2 = new JPanel(); panel2.setLayout(new GridLayout(1, 2, 5, 5)); addButton2("BackSace", command); addButton2("C", command); add(panel2, BorderLayout.CENTER); pack(); // 根據(jù)組件大小自動調(diào)節(jié)窗口大小 } // 注冊事件監(jiān)聽器方法(panel1的) public void addButton1(String label, ActionListener listener) { // TODO 自動生成的方法存根 JButton button = new JButton(label); button.addActionListener(listener); panel1.add(button); } // 注冊監(jiān)聽器方法(panel2的) private void addButton2(String label, ActionListener listener) { // TODO 自動生成的方法存根 JButton button = new JButton(label); button.addActionListener(listener); panel2.add(button); } // 創(chuàng)建內(nèi)部類,作用于單擊按鈕執(zhí)行命令的監(jiān)聽器 class commandAction implements ActionListener { @Override public void actionPerformed(ActionEvent event) { // TODO 自動生成的方法存根 nowButton = event.getActionCommand(); if (nowButton != "BackSace" && nowButton != "=") { // 如果是回退和=就不打印這個了 display.setText(display.getText() + nowButton); } if (nowButton.equals("=")) { // 如果是等于號,就計算結(jié)果 display.setText(jisuan1(display.getText())); } if (nowButton.equals("BackSace")) { // 回退一個字符 StringBuffer sb = new StringBuffer(display.getText()); display.setText(sb.substring(0, sb.length() - 1)); } if (nowButton.equals("C")) { // 清空 display.setText(""); } } } // 用來計算的方法 public String jisuan1(String string) { StringBuffer sb = new StringBuffer(string); int commandCount = 0;// 符號數(shù)量 int j = 0;// 計數(shù)器 // 計算有多少個運算符,就有n+1個數(shù)字 for (j = 0; j < sb.length(); j++) { if (sb.charAt(j) <= '9' && sb.charAt(j) >= '0' || sb.charAt(j) == '.') { continue; } else { commandCount++; } } // 初始化符號數(shù)組 char[] command = new char[commandCount]; // 初始化數(shù)字數(shù)組(用字符串表示) String[] num = new String[commandCount + 1]; for (j = 0; j < num.length; j++) { num[j] = ""; } // 遍歷一遍,吧每個數(shù)字存進數(shù)字數(shù)組,每個符號存進符號數(shù)組 int k = 0; for (j = 0; j < sb.length(); j++) { if (sb.charAt(j) <= '9' && sb.charAt(j) >= '0' || sb.charAt(j) == '.') { num[k] += sb.charAt(j); continue; } else { command[k] = sb.charAt(j); k++; } } // 計算結(jié)果 double result = 0; for (int i = 0; i < commandCount; i++) { // 取前兩個數(shù),和第一個操作符,運算 double num1 = Double.parseDouble(num[i]); double num2 = Double.parseDouble(num[i + 1]); char cc = command[i]; // 計算 switch (cc) { case '+': result = num1 + num2; break; case '-': result = num1 - num2; break; case '*': result = num1 * num2; break; case '/': result = num1 / num2; break; case '%': result = num1 % num2; break; default: break; } num[i + 1] = String.valueOf(result); } return String.valueOf(result); } //主方法,運行本類,顯示窗體 public static void main(String[] args) { new Calculator().setVisible(true); } }
到此這篇關(guān)于Java Swing編寫一個簡單的計算器軟件的文章就介紹到這了,更多相關(guān)Java Swing計算器軟件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring七大事務(wù)傳遞機制深入分析實現(xiàn)原理
實際項目開發(fā)中,如果涉及到多張表操作時,為了保證業(yè)務(wù)數(shù)據(jù)的一致性,大家一般都會采用事務(wù)機制,好多小伙伴可能只是簡單了解一下,遇到事務(wù)失效的情況,便會無從下手,下面這篇文章主要給大家介紹了關(guān)于Spring事務(wù)傳遞機制的相關(guān)資料,需要的朋友可以參考下2023-03-03Java 獲取當前時間及實現(xiàn)時間倒計時功能【推薦】
這篇文章主要介紹了Java 獲取當前時間及實現(xiàn)時間倒計時功能 ,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-05-05Java基礎(chǔ)類學(xué)習(xí)之String詳解
這篇文章主要為大家詳細介紹了Java基礎(chǔ)類中String的相關(guān)知識,文中的示例代碼講解詳細,對我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下2022-12-12