?Java圖形化界面編程實現(xiàn)簡單計算器
1.簡單計算器
使用AWT
編程,FrameNORTH
區(qū)域放置TextField
組件,將指定為4行5列GridLayout布局管理器的Panel放置于Frame
中部區(qū)域,其中填充操作符和操作數(shù)按鈕。
按鈕觸發(fā)事件源,對按鈕添加ActionListener
注冊監(jiān)聽。自定義NumListener(操作數(shù)監(jiān)聽類)、OperatListener
(操作符監(jiān)聽類)、EqualListener
(’=‘符監(jiān)聽類)和匿名內(nèi)部類(如b[11]’-'符監(jiān)聽類)分情況對按鈕事件進行監(jiān)聽并響應。
注意:整數(shù)、浮點、負數(shù)以及連續(xù)運算均可以。
代碼:
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("智子的計算器!"); ? ? 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)); ? ? ? ? //設置按鈕 ? ? ? ? String s = "+-*/%"; ? ? ? ? for(int i=0;i<10;i++) {//運算數(shù) ? ? ? ? ? ? b[i] = new Button(i + ""); ? ? ? ? ? ? b[i].setForeground(blue); ? ? ? ? } ? ? ? ? for(int i=0;i<5;i++) {//運算符 ? ? ? ? ? ? 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); ? ? ? ? } ? ? ? ? //按鈕注冊監(jiān)聽 ? ? ? ? for (int i = 0; i < 10; i++) {//操作數(shù)注冊監(jiān)聽 ? ? ? ? ? ? b[i].addActionListener(new NumListener()); ? ? ? ? } ? ? ? ? for (int i = 10; i < 18; i++) {//操作符注冊監(jiān)聽 ? ? ? ? ? ? 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; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? }); ? ? ? ? //“=”注冊監(jiān)聽 ? ? ? ? b[18].addActionListener(new EqualListener()); ? ? ? ? //“.”注冊監(jiān)聽 ? ? ? ? b[19].addActionListener(new NumListener()); ? ? ? ? //將按鈕加入panel ? ? ? ? for (int i = 0; i < 20; i++) { ? ? ? ? ? ? panel.add(b[i]); ? ? ? ? } ? ? ? ? //設置中部按鈕 ? ? ? ? frame.add(panel); ? ? ? ? //窗口監(jiān)聽器 注冊監(jiān)聽 ? ? ? ? frame.addWindowListener(new WindowAdapter() { ? ? ? ? ? ? @Override ? ? ? ? ? ? public void windowClosing(WindowEvent e) { ? ? ? ? ? ? ? ? System.exit(0); ? ? ? ? ? ? } ? ? ? ? }); ? ? ? ? //設置窗口最優(yōu)并可見 ? ? ? ? frame.pack(); ? ? ? ? frame.setVisible(true); ? ? } ? ? //數(shù)字按鈕監(jiān)聽器類 ? ? 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)聽器類 ? ? public class OperatListener implements ActionListener{ ? ? ? ? @Override ? ? ? ? public void actionPerformed(ActionEvent e) { ? ? ? ? ? ? x = Double.parseDouble(tf.getText()); ? ? ? ? ? ? op = e.getActionCommand(); ? ? ? ? ? ? flag = false; ? ? ? ? } ? ? } ? ? //等號按鈕監(jiān)聽器類 ? ? 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(); ? ? } }
到此這篇關于 Java
圖形化界面編程實現(xiàn)簡單計算器的文章就介紹到這了,更多相關 Java圖形化界面編程實現(xiàn)計算器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Elasticsearch查詢之Match Query示例詳解
這篇文章主要為大家介紹了Elasticsearch查詢之Match查詢示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04Java的super關鍵字與instanceof運算符使用方法
這篇文章主要介紹了Java的super關鍵字與instanceof運算符使用方法,是Java入門學習中的基礎知識,需要的朋友可以參考下2015-09-09JSON.parseObject和JSON.toJSONString實例詳解
這篇文章主要為大家詳細介紹了JSON.parseObject和JSON.toJSONString實例,具有一定的參考價值,感興趣的朋友可以參考一下2018-06-06Java 17 隨機數(shù)生成器來了一波穩(wěn)穩(wěn)的增強
JDK 當中的隨機數(shù)生成器其實對于普通開發(fā)者來講基本夠用,不過對于一些比較復雜的場景來講,原有的類結(jié)構對擴展并不是很友好,除了 Random 類,JDK 當中還提供了另外幾個隨機數(shù)的成員,下面文章將詳細介紹,需要的朋友可以參考一下2021-09-09mybatis中 if-test 數(shù)字判斷的坑及解決
這篇文章主要介紹了mybatis中 if-test 數(shù)字判斷的坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06