欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實(shí)現(xiàn)簡單圖形界面計(jì)算器

 更新時(shí)間:2022年04月26日 09:09:49   作者:Jivan2233  
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡單圖形界面計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

前言

因?yàn)檫@兩天我們的Java實(shí)驗(yàn)課程需要做兩個(gè)小的圖形化界面,其中就有一個(gè)圖形界面的計(jì)算器,所以稍微花了點(diǎn)時(shí)間做了一個(gè),同時(shí)復(fù)習(xí)了一下Java的基礎(chǔ)內(nèi)容和GUI編程。因?yàn)榇a中的注釋特別詳細(xì),所以這里就不講解怎么實(shí)現(xiàn)的了。

代碼

package zuoye;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Stack;

class MyException extends Exception{
? ? public MyException() {
? ? ? ? super();
? ? }
? ? public MyException(String message) {
? ? ? ? super(message);
? ? }
}

public class MyCalculator extends JFrame{
? ? /*
? ? ?*?
? ? ?*/

? ? private JTextField textField; ? ?//輸入文本框
? ? private String input; ? ? ?//結(jié)果
? ? private String operator; ? ?//操作符

? ? public MyCalculator() {
? ? ? ? input = "";
? ? ? ? operator = "";

? ? ? ? JPanel panel = new JPanel();
? ? ? ? textField = new JTextField(30);
? ? ? ? textField.setEditable(false); ? ? ? ? ? ? ? ? ? ? ? //文本框禁止編輯
? ? ? ? textField.setHorizontalAlignment(JTextField.LEFT);
? ? ? ? //textField.setBounds(100, 100, 20, 20); ? ? ? ? ? ?//在容器布局為空情況下生效
? ? ? ? textField.setPreferredSize(new Dimension(200,30));//設(shè)置該組件的初始大小

? ? ? ? //將textField加入本JFrame中,布局為邊界布局,位置為north
? ? ? ? this.add(textField, BorderLayout.NORTH);

? ? ? ? String[] name= {"7","8","9","+","4","5","6","-","1","2","3","*","0","C","=","/"};

? ? ? ? //將這個(gè)panel的布局設(shè)置為網(wǎng)格布局,有四行四列,行間距和列間距為1
? ? ? ? panel.setLayout(new GridLayout(4,4,1,1));

? ? ? ? for(int i=0;i<name.length;i++) {

? ? ? ? ? ? JButton button = new JButton(name[i]);

? ? ? ? ? ? //設(shè)置按鈕的時(shí)間監(jiān)聽
? ? ? ? ? ? button.addActionListener(new MyActionListener());
? ? ? ? ? ? //將按鈕加入到panel中
? ? ? ? ? ? panel.add(button);
? ? ? ? }
? ? ? ? //將panel加入到本JFrame中,布局為邊界布局,位置為centre
? ? ? ? this.add(panel,BorderLayout.CENTER);
? ? }

? ? class MyActionListener implements ActionListener{ ? //內(nèi)部類實(shí)現(xiàn)按鈕響應(yīng)

? ? ? ? @Override
? ? ? ? public void actionPerformed(ActionEvent e) {
? ? ? ? ? ? int cnt=0;
? ? ? ? ? ? String actionCommand = e.getActionCommand(); ? //獲取按鈕上的字符串
? ? ? ? ? ? if(actionCommand.equals("+") || actionCommand.equals("-") || actionCommand.equals("*")
? ? ? ? ? ? ? ? || actionCommand.equals("/")) {
? ? ? ? ? ? ? ? input += " " + actionCommand + " ";
? ? ? ? ? ? }
? ? ? ? ? ? else if(actionCommand.equals("C")) { ? //清除輸入
? ? ? ? ? ? ? ? input = "";
? ? ? ? ? ? }
? ? ? ? ? ? else if(actionCommand.equals("=")) { ? //按下等號
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? input+= "="+calculate(input);
? ? ? ? ? ? ? ? } catch (MyException e1) {
? ? ? ? ? ? ? ? ? ? if(e1.getMessage().equals("被除數(shù)不能為0"))
? ? ? ? ? ? ? ? ? ? ? ? input = e1.getMessage();
? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? ? ? input = e1.getMessage();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? textField.setText(input);
? ? ? ? ? ? ? ? input="";
? ? ? ? ? ? ? ? cnt = 1;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? ? ? input += actionCommand; ? ? //按下數(shù)字

? ? ? ? ? ? //因?yàn)槿绻话础?”按鈕cnt一直未0,所以可以保證顯示輸入的數(shù)字和操作鍵
? ? ? ? ? ? if(cnt == 0)
? ? ? ? ? ? ? ? textField.setText(input);
? ? ? ? }
? ? }
? ? //這里需要借助棧來完成表達(dá)式的計(jì)算,首先將字符串分割成字符串?dāng)?shù)組,
? ? //由中綴的定義知數(shù)組奇數(shù)位為運(yùn)算符(從第0位開始),偶數(shù)位為操作數(shù),
? ? // 因此可將偶數(shù)為操作數(shù)進(jìn)棧,遇見+(-)運(yùn)算符,則將下一個(gè)數(shù)以正(負(fù))的形式壓人棧中,
? ? // 遇見*或/運(yùn)算符,則將棧頂元素出棧與數(shù)組后一元素進(jìn)行計(jì)算,并將其結(jié)果重新壓入棧中,
? ? // 直至遍歷至數(shù)組最后一個(gè)元素。

? ? private String calculate(String input) throws MyException{ ? ?//計(jì)算函數(shù)
? ? ? ? String[] comput = input.split(" ");
? ? ? ? //System.out.println(input);
? ? ? ? Stack<Double> stack = new Stack<>();
? ? ? ? Double m = Double.parseDouble(comput[0]);
? ? ? ? stack.push(m); ? ? ? //第一個(gè)操作數(shù)入棧

? ? ? ? for(int i = 1; i < comput.length; i++) {
? ? ? ? ? ? if(i%2==1) {
? ? ? ? ? ? ? ? if(comput[i].equals("+"))
? ? ? ? ? ? ? ? ? ? stack.push(Double.parseDouble(comput[i+1]));
? ? ? ? ? ? ? ? if(comput[i].equals("-"))
? ? ? ? ? ? ? ? ? ? stack.push(-Double.parseDouble(comput[i+1]));
? ? ? ? ? ? ? ? if(comput[i].equals("*")) { ? //將前一個(gè)數(shù)出棧做乘法再入棧
? ? ? ? ? ? ? ? ? ? Double d = stack.peek(); ? //取棧頂元素
? ? ? ? ? ? ? ? ? ? stack.pop();
? ? ? ? ? ? ? ? ? ? stack.push(d*Double.parseDouble(comput[i+1]));
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(comput[i].equals("/")) { ? //將前一個(gè)數(shù)出棧做乘法再入棧
? ? ? ? ? ? ? ? ? ? double help = Double.parseDouble(comput[i+1]);
? ? ? ? ? ? ? ? ? ? if(help == 0)
? ? ? ? ? ? ? ? ? ? ? ? throw new MyException("被除數(shù)不能為0"); ? ?//不會繼續(xù)執(zhí)行該函數(shù)
? ? ? ? ? ? ? ? ? ? double d = stack.peek();
? ? ? ? ? ? ? ? ? ? stack.pop();
? ? ? ? ? ? ? ? ? ? stack.push(d/help);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }

? ? ? ? double d = 0d;

? ? ? ? while(!stack.isEmpty()) { ? //求和
? ? ? ? ? ? d += stack.peek();
? ? ? ? ? ? stack.pop();
? ? ? ? }

? ? ? ? String result = String.valueOf(d);
? ? ? ? return result;
? ? }

? ? public static void main(String[] args) {
? ? ? ? JFrame f = new MyCalculator();
? ? ? ? f.setTitle(f.getClass().getSimpleName());
? ? ? ? f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
? ? ? ? f.setBounds(400, 200, 500, 300);
? ? ? ? f.setVisible(true);
? ? }
}

實(shí)現(xiàn)效果

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java使用easyExcel批量導(dǎo)入數(shù)據(jù)詳解

    Java使用easyExcel批量導(dǎo)入數(shù)據(jù)詳解

    這篇文章主要介紹了Java使用easyExcel批量導(dǎo)入數(shù)據(jù)詳解,通常我們會提供一個(gè)模板,此模塊我們可以使用easyExcel導(dǎo)出數(shù)據(jù)生成的一個(gè)Excel文件當(dāng)作模板,提供下載鏈接,用戶在該文件內(nèi)填入規(guī)定的數(shù)據(jù)格式以后可以批量導(dǎo)入數(shù)據(jù)到數(shù)據(jù)庫中,需要的朋友可以參考下
    2023-08-08
  • DUCC配置平臺實(shí)現(xiàn)一個(gè)動態(tài)化線程池示例代碼

    DUCC配置平臺實(shí)現(xiàn)一個(gè)動態(tài)化線程池示例代碼

    這篇文章主要為大家介紹了DUCC配置平臺實(shí)現(xiàn)一個(gè)動態(tài)化線程池示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • java題解LeetCode454.四數(shù)相加示例

    java題解LeetCode454.四數(shù)相加示例

    這篇文章主要為大家介紹了java題解LeetCode454.四數(shù)相加示例思路解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Struts2通過自定義標(biāo)簽實(shí)現(xiàn)權(quán)限控制的方法

    Struts2通過自定義標(biāo)簽實(shí)現(xiàn)權(quán)限控制的方法

    這篇文章主要介紹了Struts2通過自定義標(biāo)簽實(shí)現(xiàn)權(quán)限控制的方法,介紹了定義Struts2的自定義標(biāo)簽的三個(gè)步驟以及詳細(xì)解釋,需要的朋友可以參考下。
    2017-09-09
  • java后端如何獲取完整url的代碼

    java后端如何獲取完整url的代碼

    這篇文章主要介紹了java后端如何獲取完整url的代碼問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Go反射底層原理及數(shù)據(jù)結(jié)構(gòu)解析

    Go反射底層原理及數(shù)據(jù)結(jié)構(gòu)解析

    這篇文章主要介紹了Go反射底層原理及數(shù)據(jù)結(jié)構(gòu)解析,反射的實(shí)現(xiàn)和interface的組成很相似,都是由“類型”和“數(shù)據(jù)值”構(gòu)成,下面小編分享更多相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-06-06
  • Java中Map實(shí)現(xiàn)線程安全的3種方式

    Java中Map實(shí)現(xiàn)線程安全的3種方式

    本文主要介紹了Java中Map實(shí)現(xiàn)線程安全的3種方式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java獲取七牛云存儲空間中圖片外鏈

    Java獲取七牛云存儲空間中圖片外鏈

    本文主要介紹了Java獲取七牛云存儲空間中圖片外鏈,需要獲取在七牛云中存儲的所有圖片,并返回外鏈地址,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • Java 判斷實(shí)體對象及所有屬性是否為空的操作

    Java 判斷實(shí)體對象及所有屬性是否為空的操作

    這篇文章主要介紹了Java 判斷實(shí)體對象及所有屬性是否為空的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Centos中yum方式安裝java的實(shí)現(xiàn)示例

    Centos中yum方式安裝java的實(shí)現(xiàn)示例

    這篇文章主要介紹了Centos中yum方式安裝java的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04

最新評論