最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Java swing組件實現(xiàn)簡易計算器

 更新時間:2020年04月18日 08:43:00   作者:海螺肉  
這篇文章主要介紹了基于Java swing組件實現(xiàn)簡易計算器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

本文記錄了筆者的第一個Java程序,基于Java抽象窗口工具(abstract window toolkit , AWT)和Swing(Swing屬于Java Foundation Classes的一部分)實現(xiàn)的建議計算器,由于筆者經(jīng)驗有限,初學Java,代碼略帶bug,無法實現(xiàn)7+5×8之類式子的計算,只能實現(xiàn)算術(shù)運算符按從高到低的式子運算,部分代碼略顯冗雜,希望大家在評論區(qū)積極討論完善代碼!

計算器示意圖

一、代碼相關(guān)知識簡介

JFrame(框架)

使用JFrame frame = new JFrame("My Frame");可以創(chuàng)建一個名為My Frame的windows框架

import javax.swing.*;
public class Test {

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    JFrame frame = new JFrame("My Frame");
    
    frame.setSize(300,300);
    frame.setVisible(true);
  }

}

JButton(按鈕)

使用JButton b = new JButtton("My Button");可創(chuàng)建一個按鈕組件。

import java.awt.*;
import javax.swing.*;
public class Test {
  JFrame frame;

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    JFrame frame = new JFrame("My Frame");
    JButton b = new JButton("My Button");
    
    frame.getContentPane().add(b,BorderLayout.CENTER); //將按鈕放在frame框架中央
    frame.setSize(300,300);
    frame.setVisible(true);
  }

}

JPanel(面板)

面板是一個容器,與頂層容器不同,JPanel不能獨立存在,必須放在其他容器的內(nèi)部,下面代碼創(chuàng)建了含有一個按鈕的紅色面板。

import java.awt.*;
import javax.swing.*;
public class Test {
  JFrame frame;

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    JFrame frame = new JFrame("My Frame");
    JButton b = new JButton("My Button");
    JPanel panel = new JPanel();
    
    panel.add(b);
    panel.setBackground(Color.red);
    frame.getContentPane().add(panel,BorderLayout.SOUTH); //將面板放在frame框架南方
    frame.setSize(300,300);
    frame.setVisible(true);
  }

}

JTextArea(文本輸入框)

使用 JTextArea 類可實現(xiàn)一個文本域,其常用構(gòu)造方法如下。

①JTextArea():創(chuàng)建一個默認的文本域。

②JTextArea(int rows,int columns):創(chuàng)建一個具有指定行數(shù)和列數(shù)的文本域。

③JTextArea(String text):創(chuàng)建一個包含指定文本的文本域。

④JTextArea(String text,int rows,int columns):創(chuàng)建一個既包含指定文本,又包含指定行數(shù)和列數(shù)的多行文本域。

出相關(guān)組件介紹外與實現(xiàn)計算器還需對布局有簡單了解,本文僅使用GridLayout布局管理器,因此只對此做出介紹,若讀者需要還可自行理解其他布局管理器。

GridLayout是一種網(wǎng)絡(luò)式的布局管理器,將容器空間化為幾行幾列的形式網(wǎng)格,可將每個組件放在其中一格。

GridLayout定義在java.awt包中,有如下三種構(gòu)造方法

public GridLayout()
public GridLayout(int rows , int cols) //定義的布局有rows行cools列
public GridLayout(int rows , int cols,int h , int w) ////定義的布局有rows行cools列,水平間距為h,垂直間距為w

二、計算器功能

可實現(xiàn)加、減、乘、除功能,但由于筆者目前能力有限,若使用加、減、乘、除混合功能時需按運算符優(yōu)先級,從高到小輸入式子如7×8+5而不能按5+7×8輸入,源代碼如下:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculator implements ActionListener{
  JFrame frame;
  JButton b1,b2,b3,b4,b5,b6,b7,b8,b9,ba,bd,be,bf,bg,bh,b0,Clear;
  JTextArea ta;
  String Textcontent ="",sum="";
  double result=0;
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Calculator cl = new Calculator();
    cl.go();
  }
  
  public void go()
  {
    frame = new JFrame("Calculator");
    ta = new JTextArea(1,20);        //設(shè)置文本框大小為1行20列
    ta.setBackground(Color.lightGray);
    JPanel cp = new JPanel();
    cp.setLayout(new GridLayout(4,4,5,5));  //四行四列,邊距為5
    JPanel c = new JPanel();
    c.setLayout(new GridLayout(1,2,5,5));  //一行兩列,邊距為5
    b0 = new JButton("0");
    b0.addActionListener(this);       //為每個按鈕添加監(jiān)聽接口
    
    b1 = new JButton("1");
    b1.addActionListener(this);
    
    b2 = new JButton("2");
    b2.addActionListener(this);
    
    b3 = new JButton("3");
    b3.addActionListener(this);
    
    b4 = new JButton("4");
    b4.addActionListener(this);
    
    b5 = new JButton("5");
    b5.addActionListener(this);
    
    b6 = new JButton("6");
    b6.addActionListener(this);
    
    b7 = new JButton("7");
    b7.addActionListener(this);
    
    b8 = new JButton("8");
    b8.addActionListener(this);
    
    b9 = new JButton("9");
    b9.addActionListener(this);
    
    ba = new JButton(".");
    ba.addActionListener(this);
    
    bd = new JButton("+");
    bd.addActionListener(this);
    
    be = new JButton("-");
    be.addActionListener(this);
    
    bf = new JButton("×");
    bf.addActionListener(this);
    
    bg = new JButton("/");
    bg.addActionListener(this);
    
    bh = new JButton("=");
    bh.addActionListener(this);
    
    Clear= new JButton("Clear");
    Clear.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e) {
        Textcontent ="";
        result=0;
        sum="";
        ta.setText("");
      }
    });
    
    c.add(ta);
    c.add(Clear);
    c.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
    cp.add(b7);
    cp.add(b8);
    cp.add(b9);
    cp.add(bd);
    cp.add(b4);
    cp.add(b5);
    cp.add(b6);
    cp.add(be);
    cp.add(b1);
    cp.add(b2);
    cp.add(b3);
    cp.add(bf);
    cp.add(b0);
    cp.add(ba);
    cp.add(bh);
    cp.add(bg);
    cp.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
    
    Container f = frame.getContentPane();
    f.add(c,BorderLayout.NORTH);
    f.add(cp,BorderLayout.SOUTH);
    
    frame.pack();
    frame.setVisible(true);
  }
  
  public void actionPerformed(ActionEvent e)
  {
    String content = e.getActionCommand();
    ta.append(e.getActionCommand());
    getTextContent(content);
  }
  
  
  public void getTextContent(String content)
  {
    if(content.equals("+")||content.equals("-")||content.equals("×")||content.equals("/"))
    {
      Textcontent = Textcontent+" "+content+" ";
    }
    else if(content.equals("="))
    {
      Textcontent = Textcontent+" "+content;
      sum=GetResult(Textcontent);
    }
    else
    {
      Textcontent = Textcontent+content;
    }
    ta.append(sum);
  }
  
  public String GetResult(String Textcontent)
  {
    String n=Textcontent;
    String []content=n.split(" ");
    result = Double.valueOf(content[0]);
    for(int i=1;i<content.length;i++)
    {
      switch(content[i])
      {
      case "+":
          result = result+Double.valueOf(content[i+1]);
        break;
      case "-":
          result = result-Double.valueOf(content[i+1]);
        break;
      case "×":
        result = result*Double.valueOf(content[i+1]);
        break;
      case "/":
          result = result/Double.valueOf(content[i+1]);
        break;
      case "=":
        break;
      }
    }
    return result+"";
  }

}

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

相關(guān)文章

  • springboot做代理分發(fā)服務+代理鑒權(quán)的實現(xiàn)過程

    springboot做代理分發(fā)服務+代理鑒權(quán)的實現(xiàn)過程

    這篇文章主要介紹了springboot做代理分發(fā)服務+代理鑒權(quán)的實現(xiàn)過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 深入理解Java設(shè)計模式之解釋器模式

    深入理解Java設(shè)計模式之解釋器模式

    這篇文章主要介紹了JAVA設(shè)計模式之解釋器模式的的相關(guān)資料,文中示例代碼非常詳細,供大家參考和學習,感興趣的朋友可以了解
    2021-11-11
  • Java字符串常見的操作(比較,查找,替換等)

    Java字符串常見的操作(比較,查找,替換等)

    在Java當中,為字符串類提供了豐富的操作方法,對于字符串,我們常見的操作就是:字符串的比較、查找、替換、拆分、截取以及其他的一些操作,本文就詳細的介紹一下,感興趣的可以了解一下
    2022-01-01
  • Java中的PrintWriter 介紹_動力節(jié)點Java學院整理

    Java中的PrintWriter 介紹_動力節(jié)點Java學院整理

    PrintWriter 是字符類型的打印輸出流,它繼承于Writer。接下來通過本文給大家介紹java中的 PrintWriter 相關(guān)知識,感興趣的朋友一起學習吧
    2017-05-05
  • Java超詳細整理講解各種排序

    Java超詳細整理講解各種排序

    這篇文章主要介紹了Java常用的排序算法及代碼實現(xiàn),在Java開發(fā)中,對排序的應用需要熟練的掌握,這樣才能夠確保Java學習時候能夠有扎實的基礎(chǔ)能力。那Java有哪些排序算法呢?本文小編就來詳細說說Java常見的排序算法,需要的朋友可以參考一下
    2022-07-07
  • java實現(xiàn)表單必填參數(shù)驗證的方法

    java實現(xiàn)表單必填參數(shù)驗證的方法

    表單校驗是很多注冊時必做的功能, 一般我們的處理都是很粗暴的寫個if()判斷, 然后拋異常. 本文將介紹通過代理的思想, 用注解優(yōu)雅的處理非空判斷,感興趣的一起來了解一下
    2021-05-05
  • java利用udp實現(xiàn)發(fā)送數(shù)據(jù)

    java利用udp實現(xiàn)發(fā)送數(shù)據(jù)

    這篇文章主要為大家詳細介紹了java利用udp實現(xiàn)發(fā)送數(shù)據(jù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 解決@Autowired注入空指針問題(利用Bean的生命周期)

    解決@Autowired注入空指針問題(利用Bean的生命周期)

    這篇文章主要介紹了解決@Autowired注入空指針問題(利用Bean的生命周期),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Netty中ChannelPoolHandler調(diào)用處理程序詳解

    Netty中ChannelPoolHandler調(diào)用處理程序詳解

    這篇文章主要介紹了Netty中ChannelPoolHandler調(diào)用處理程序詳解,Netty 是基于 Java NIO 的異步事件驅(qū)動的網(wǎng)絡(luò)應用框架,使用 Netty 可以快速開發(fā)網(wǎng)絡(luò)應用,Netty 提供了高層次的抽象來簡化 TCP 和 UDP 服務器的編程,但是你仍然可以使用底層的 API,需要的朋友可以參考下
    2023-11-11
  • IDEA中的maven沒有dependencies解決方案

    IDEA中的maven沒有dependencies解決方案

    這篇文章主要介紹了IDEA中的maven沒有dependencies解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05

最新評論

元氏县| 舒兰市| 仙桃市| 佛学| 深水埗区| 邵阳县| 东光县| 德州市| 高陵县| 曲水县| 黄平县| 上犹县| 浦城县| 谷城县| 盘锦市| 巩义市| 廉江市| 临夏市| 汕尾市| 富锦市| 天全县| 怀化市| 河东区| 丽江市| 兰西县| 广元市| 多伦县| 泰州市| 天峨县| 谷城县| 工布江达县| 兴国县| 泾川县| 汽车| 秭归县| 汨罗市| 奉节县| 普兰县| 江孜县| 普洱| 甘孜|