?Java圖形化界面編程實(shí)現(xiàn)簡(jiǎn)單計(jì)算器
1.簡(jiǎn)單計(jì)算器
使用AWT
編程,FrameNORTH
區(qū)域放置TextField
組件,將指定為4行5列GridLayout布局管理器的Panel放置于Frame
中部區(qū)域,其中填充操作符和操作數(shù)按鈕。
按鈕觸發(fā)事件源,對(duì)按鈕添加ActionListener
注冊(cè)監(jiān)聽(tīng)。自定義NumListener(操作數(shù)監(jiān)聽(tīng)類)、OperatListener
(操作符監(jiān)聽(tīng)類)、EqualListener
(’=‘符監(jiān)聽(tīng)類)和匿名內(nèi)部類(如b[11]’-'符監(jiān)聽(tīng)類)分情況對(duì)按鈕事件進(jìn)行監(jiān)聽(tīng)并響應(yīng)。
注意:整數(shù)、浮點(diǎn)、負(fù)數(shù)以及連續(xù)運(yùn)算均可以。
代碼:
import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import static java.awt.Color.blue; public class Calculation { ? ? //操作數(shù) ? ? double x,y; ? ? String op; ? ? boolean flag; ? ? Frame frame = new Frame("智子的計(jì)算器!"); ? ? TextField tf = new TextField(30); ? ? Button[] b = new Button[20]; ? ? public void init(){ ? ? ? ? //北部區(qū)域放置文本框 ? ? ? ? frame.add(tf,BorderLayout.NORTH); ? ? ? ? Panel panel = new Panel(); ? ? ? ? panel.setLayout(new GridLayout(4,5,2,2)); ? ? ? ? //設(shè)置按鈕 ? ? ? ? String s = "+-*/%"; ? ? ? ? for(int i=0;i<10;i++) {//運(yùn)算數(shù) ? ? ? ? ? ? b[i] = new Button(i + ""); ? ? ? ? ? ? b[i].setForeground(blue); ? ? ? ? } ? ? ? ? for(int i=0;i<5;i++) {//運(yùn)算符 ? ? ? ? ? ? b[i+10]=new Button(s.charAt(i)+""); ? ? ? ? ? ? b[i+10].setForeground(blue); ? ? ? ? } ? ? ? ? String[] t = {"sqrt","^2","^3","=","."}; ? ? ? ? for(int i=0;i<5;i++){ ? ? ? ? ? ? b[i+15]=new Button(t[i]); ? ? ? ? ? ? b[i+15].setForeground(blue); ? ? ? ? } ? ? ? ? //按鈕注冊(cè)監(jiān)聽(tīng) ? ? ? ? for (int i = 0; i < 10; i++) {//操作數(shù)注冊(cè)監(jiān)聽(tīng) ? ? ? ? ? ? b[i].addActionListener(new NumListener()); ? ? ? ? } ? ? ? ? for (int i = 10; i < 18; i++) {//操作符注冊(cè)監(jiān)聽(tīng) ? ? ? ? ? ? if(i==11) continue; ? ? ? ? ? ? b[i].addActionListener(new OperatListener()); ? ? ? ? } ? ? ? ? b[11].addActionListener(new ActionListener() { ? ? ? ? ? ? @Override ? ? ? ? ? ? public void actionPerformed(ActionEvent e) { ? ? ? ? ? ? ? ? if(!flag){ ? ? ? ? ? ? ? ? ? ? tf.setText("-"); ? ? ? ? ? ? ? ? ? ? flag = true; ? ? ? ? ? ? ? ? } else { ? ? ? ? ? ? ? ? ? ? x = Double.parseDouble(tf.getText()); ? ? ? ? ? ? ? ? ? ? op = e.getActionCommand(); ? ? ? ? ? ? ? ? ? ? flag = false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? }); ? ? ? ? //“=”注冊(cè)監(jiān)聽(tīng) ? ? ? ? b[18].addActionListener(new EqualListener()); ? ? ? ? //“.”注冊(cè)監(jiān)聽(tīng) ? ? ? ? b[19].addActionListener(new NumListener()); ? ? ? ? //將按鈕加入panel ? ? ? ? for (int i = 0; i < 20; i++) { ? ? ? ? ? ? panel.add(b[i]); ? ? ? ? } ? ? ? ? //設(shè)置中部按鈕 ? ? ? ? frame.add(panel); ? ? ? ? //窗口監(jiān)聽(tīng)器 注冊(cè)監(jiān)聽(tīng) ? ? ? ? frame.addWindowListener(new WindowAdapter() { ? ? ? ? ? ? @Override ? ? ? ? ? ? public void windowClosing(WindowEvent e) { ? ? ? ? ? ? ? ? System.exit(0); ? ? ? ? ? ? } ? ? ? ? }); ? ? ? ? //設(shè)置窗口最優(yōu)并可見(jiàn) ? ? ? ? frame.pack(); ? ? ? ? frame.setVisible(true); ? ? } ? ? //數(shù)字按鈕監(jiān)聽(tīng)器類 ? ? public class NumListener implements ActionListener{ ? ? ? ? @Override ? ? ? ? public void actionPerformed(ActionEvent e) { ? ? ? ? ? ? String t = e.getActionCommand(); ? ? ? ? ? ? String s = tf.getText(); ? ? ? ? ? ? if(flag==false) ? ? ? ? ? ? ? ? tf.setText(t); ? ? ? ? ? ? else ? ? ? ? ? ? ? ? tf.setText(s+t); ? ? ? ? ? ? flag = true; ? ? ? ? } ? ? } ? ? //操作符按鈕監(jiān)聽(tīng)器類 ? ? public class OperatListener implements ActionListener{ ? ? ? ? @Override ? ? ? ? public void actionPerformed(ActionEvent e) { ? ? ? ? ? ? x = Double.parseDouble(tf.getText()); ? ? ? ? ? ? op = e.getActionCommand(); ? ? ? ? ? ? flag = false; ? ? ? ? } ? ? } ? ? //等號(hào)按鈕監(jiān)聽(tīng)器類 ? ? public class EqualListener implements ActionListener{ ? ? ? ? @Override ? ? ? ? public void actionPerformed(ActionEvent e) { ? ? ? ? ? ? y = Double.parseDouble(tf.getText()); ? ? ? ? ? ? flag = true; ? ? ? ? ? ? switch(op){ ? ? ? ? ? ? ? ? case "+":tf.setText(x+y+""); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case "-":tf.setText(x-y+""); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case "*":tf.setText(x*y+""); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case "/": ? ? ? ? ? ? ? ? ? ? if(y!=0) ? ? ? ? ? ? ? ? ? ? ? ? tf.setText(x/y+""); ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? tf.setText("inf"); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case "%":tf.setText(x%y+""); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case "sqrt":tf.setText((int)Math.sqrt(x)+""); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case "^2":tf.setText(y*y+""); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case "^3":tf.setText(y*y*y+""); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? } ? ? } ? ? public static void main(String[] args) { ? ? ? ? new Calculation().init(); ? ? } }
到此這篇關(guān)于 Java
圖形化界面編程實(shí)現(xiàn)簡(jiǎn)單計(jì)算器的文章就介紹到這了,更多相關(guān) Java圖形化界面編程實(shí)現(xiàn)計(jì)算器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Elasticsearch查詢之Match Query示例詳解
這篇文章主要為大家介紹了Elasticsearch查詢之Match查詢示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Java的super關(guān)鍵字與instanceof運(yùn)算符使用方法
這篇文章主要介紹了Java的super關(guān)鍵字與instanceof運(yùn)算符使用方法,是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09JSON.parseObject和JSON.toJSONString實(shí)例詳解
這篇文章主要為大家詳細(xì)介紹了JSON.parseObject和JSON.toJSONString實(shí)例,具有一定的參考價(jià)值,感興趣的朋友可以參考一下2018-06-06MyBatis如何進(jìn)行雙重foreach循環(huán)
這篇文章主要介紹了MyBatis如何進(jìn)行雙重foreach循環(huán),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02Spring Boot 驗(yàn)證碼的生成和驗(yàn)證詳解
我們?cè)谧鲇脩舻卿浀臅r(shí)候,為了安全性考慮,會(huì)增加驗(yàn)證碼的功能,下面這篇文章主要給大家介紹了關(guān)于Spring Boot中驗(yàn)證碼的生成和驗(yàn)證的相關(guān)資料,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來(lái)一起看看吧。2017-06-06Java 17 隨機(jī)數(shù)生成器來(lái)了一波穩(wěn)穩(wěn)的增強(qiáng)
JDK 當(dāng)中的隨機(jī)數(shù)生成器其實(shí)對(duì)于普通開(kāi)發(fā)者來(lái)講基本夠用,不過(guò)對(duì)于一些比較復(fù)雜的場(chǎng)景來(lái)講,原有的類結(jié)構(gòu)對(duì)擴(kuò)展并不是很友好,除了 Random 類,JDK 當(dāng)中還提供了另外幾個(gè)隨機(jī)數(shù)的成員,下面文章將詳細(xì)介紹,需要的朋友可以參考一下2021-09-09Java黑盒測(cè)試之nextDate函數(shù)測(cè)試
這篇文章主要介紹了Java黑盒測(cè)試之nextDate函數(shù)測(cè)試,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)Java黑盒測(cè)試的小伙伴們有很大的幫助哦,需要的朋友可以參考下2021-05-05mybatis中 if-test 數(shù)字判斷的坑及解決
這篇文章主要介紹了mybatis中 if-test 數(shù)字判斷的坑及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06Java線程啟動(dòng)為什么要用start()而不是run()?
這篇文章主要介紹了線程啟動(dòng)為什么要用start()而不是run()?下面文章圍繞start()與run()的相關(guān)資料展開(kāi)詳細(xì)內(nèi)容,具有一定的參考價(jià)值,西藥的小火熬版可以參考一下,希望對(duì)你有所幫助2021-12-12