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

java實(shí)現(xiàn)簡(jiǎn)易版圖形界面計(jì)算器

 更新時(shí)間:2020年05月18日 17:12:23   作者:bingongzi  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)易版圖形界面計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

經(jīng)過(guò)一個(gè)月的Java學(xué)習(xí),聽(tīng)說(shuō)Java中的第一個(gè)小型程序好多都做的是計(jì)算器,今天我也來(lái)做做吧,把這一個(gè)月學(xué)習(xí)的知識(shí)簡(jiǎn)單的綜合一下,熟練近期學(xué)習(xí)的知識(shí)點(diǎn)。

我做的計(jì)算器如下圖:

功能:對(duì)實(shí)數(shù)進(jìn)行加、減、乘、除、余操作。

界面設(shè)置:首先設(shè)置一個(gè)窗體,一個(gè)菜單條,三個(gè)菜單項(xiàng)(無(wú)功能),三個(gè)標(biāo)簽(作為顯示數(shù)據(jù)的地方,第一個(gè)標(biāo)簽作為提示作用,第二個(gè)標(biāo)簽作為輸入數(shù)據(jù)作用,第三個(gè)標(biāo)簽顯示結(jié)果作用),20個(gè)按鈕(循環(huán)進(jìn)行添加),兩個(gè)面板(把三個(gè)標(biāo)簽添加到第一個(gè)面板里,把20個(gè)按鈕添加到第二個(gè)面板里,用網(wǎng)格布局,這樣做不易位置錯(cuò)亂),再把兩個(gè)面板添加到窗體中就OK了。

下面是完整代碼,在一個(gè)類中,注釋非常詳細(xì)。

package day7_29;
 
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.SystemColor;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.NumberFormat;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;
 
public class Caculate {
 // 對(duì)計(jì)算器整體框架的建立
 private JFrame frame = new JFrame("&斌的圖形界面計(jì)算器&");// 創(chuàng)建窗體對(duì)象
 private JMenuBar menubar = new JMenuBar(); // 創(chuàng)建菜單條對(duì)象
 private JMenu menu1 = new JMenu("查看"); // 創(chuàng)建菜單對(duì)象1
 private JMenu menu2 = new JMenu("編輯"); // 創(chuàng)建菜單對(duì)象2
 private JMenu menu3 = new JMenu("幫助"); // 創(chuàng)建菜單對(duì)象3
 private JLabel label_hint = new JLabel(); // 創(chuàng)建提示信息標(biāo)簽
 private JLabel label_input = new JLabel(); // 創(chuàng)建輸入信息標(biāo)簽
 private JLabel label_result = new JLabel(); // 創(chuàng)建輸出結(jié)果標(biāo)簽3
 private JPanel panel_show = new JPanel(); // 創(chuàng)建顯示面板
 private JPanel panel_operation = new JPanel(); // 創(chuàng)建按鍵面板
 
 private String[] str = { "AC", "←", "(-)", "+", "7", "8", "9", "-", "4", "5", "6", "*", "1", "2", "3", "÷", "%",
 "0", ".", "=" }; // 計(jì)算器的按鍵從上到下、從左到右順序表示
 private JButton[] button = new JButton[str.length]; // 創(chuàng)建計(jì)算器的按鍵對(duì)象
 private double result = 0; // 存儲(chǔ)計(jì)算結(jié)果
 private boolean flag = true; //
 private boolean find = true; 
 private String command = "=";
 
 public static void main(String[] args) {// 主方法
 new Caculate().initJFrame();
 }
 
 // 對(duì)界面進(jìn)行初始化
 public void initJFrame() {
 Container con = frame.getContentPane();
 con.setBackground(Color.green); // 設(shè)置顏色
 // 設(shè)置窗體位置及大小(下面一段代碼實(shí)現(xiàn)居中)
 frame.setSize(600, 550); 
 //方法一
// Toolkit toolKit = Toolkit.getDefaultToolkit(); // 獲取默認(rèn)工具包
// Dimension dimension = toolKit.getScreenSize(); // 獲取屏幕對(duì)象
// double screenWidth = dimension.getWidth(); // 獲取屏幕的寬和高
// double screenHight = dimension.getHeight();
// int jframeWidth = frame.getWidth(); // 獲取窗體的寬和高
// int jframeHight = frame.getHeight();
// int x = (int) ((screenWidth - jframeWidth) / 2); // 得到窗體真正位置
// int y = (int) ((screenHight - jframeHight) / 2);
// frame.setLocation(x, y); // 設(shè)置窗體居中
 //方法二
 frame.setLocationRelativeTo(null);//設(shè)置窗口相對(duì)于指定組件的位置。如果組件當(dāng)前未顯示,或者 c 為 null,則此窗口將置于屏幕的中央。
 
 menubar.add(menu1);// 把菜單添加到菜單條中
 menubar.add(menu2);
 menubar.add(menu3);
 menu1.setFont(new Font("", Font.BOLD, 20));// 設(shè)置菜單字體樣式
 menu2.setFont(new Font("", Font.BOLD, 20));
 menu3.setFont(new Font("", Font.BOLD, 20));
 frame.setJMenuBar(menubar);// 把菜單添加到菜單條中
 
 label_hint.setText(" "); // 標(biāo)簽內(nèi)容初始化為空
 label_hint.setHorizontalAlignment(JLabel.RIGHT); // 設(shè)置圖標(biāo)和文本的水平對(duì)齊方式為右對(duì)齊
 label_hint.setFont(new Font("宋體", Font.BOLD, 30));// 設(shè)置此標(biāo)簽的字體。
 label_hint.setForeground(Color.RED); // 設(shè)置字體顏色為紅色
 
 label_input.setText(" "); // 標(biāo)簽內(nèi)容初始化為空
 label_input.setHorizontalAlignment(JLabel.RIGHT); // 設(shè)置圖標(biāo)和文本的水平對(duì)齊方式為右對(duì)齊
 label_input.setFont(new Font("宋體", Font.BOLD, 30));// 設(shè)置此標(biāo)簽的字體。
 label_input.setForeground(Color.BLACK); // 設(shè)置字體顏色為黑色
 
 label_result.setText("0");// 標(biāo)簽內(nèi)容初始化內(nèi)容為0
 label_result.setHorizontalAlignment(JLabel.RIGHT); // 設(shè)置圖標(biāo)和文本的水平對(duì)齊方式為右對(duì)齊
 label_result.setFont(new Font("宋體", Font.BOLD, 35));// 設(shè)置此標(biāo)簽的字體。
 label_result.setForeground(Color.BLUE); // 設(shè)置字體顏色為藍(lán)色
 
 panel_show.setLayout(new BorderLayout()); // 設(shè)置為邊界布局
 panel_show.add(label_hint, BorderLayout.NORTH); // 把錯(cuò)誤提示標(biāo)簽放在上面
 panel_show.add(label_input, BorderLayout.CENTER);// 把輸入信息標(biāo)簽放在中間
 panel_show.add(label_result, BorderLayout.SOUTH);// 把輸出結(jié)果標(biāo)簽放在下面
 // 創(chuàng)建具有指定類型、高亮顯示和陰影顏色的斜面邊框。
 panel_show.setBorder(
 new BevelBorder(BevelBorder.RAISED, new Color(160, 170, 180), null, SystemColor.scrollbar, null));
 panel_operation.setLayout(new GridLayout(5, 4, 8, 8));// 按鍵設(shè)置為網(wǎng)格布局5行5列間距為8
 // 創(chuàng)建具有指定類型、高亮顯示和陰影顏色的斜面邊框。凸出斜面類型。為滾動(dòng)條提供的背景色。
 panel_operation.setBorder(
 new BevelBorder(BevelBorder.RAISED, new Color(160, 170, 180), null, SystemColor.scrollbar, null));
 // 添加按鈕
 for (int i = 0; i < str.length; i++) {
 button[i] = new JButton(str[i]);
 button[i].setFont(new Font("宋體", Font.BOLD, 30)); // 設(shè)置按鈕中字體樣式
 if (str[i].equals("+") || str[i].equals("-") || str[i].equals("*") || str[i].equals("÷")
 || str[i].equals("%") || str[i].equals("=")) {
 button[i].addActionListener(new OperationListener());// 給按鈕+,-,*,/,%,=注冊(cè)監(jiān)聽(tīng)器
 } else {
 button[i].addActionListener(new DataListener());//給按鈕AC,←,(-),.,0,1,2,3,4,5,6,7,8,9注冊(cè)監(jiān)聽(tīng)器
 }
 
 panel_operation.add(button[i]);// 把每個(gè)按鈕分別添加到面板上
 }
 // 把面板添加到窗體框架里
 frame.add(panel_operation, BorderLayout.CENTER);
 frame.add(panel_show, BorderLayout.NORTH);
 //frame.setResizable(false); // 設(shè)置窗體不能改變大小
 frame.setVisible(true); // 設(shè)置窗體可見(jiàn)
 frame.setDefaultCloseOperation(frame.DISPOSE_ON_CLOSE);// 釋放窗口
 }
 
 public class DataListener implements ActionListener {
 @Override
 public void actionPerformed(ActionEvent e) {
 String str = e.getActionCommand();//返回與此動(dòng)作相關(guān)的命令字符串。
 if (Caculate.this.flag == true) {//當(dāng)想輸入新的數(shù)字時(shí),清空輸入顯示標(biāo)簽
 label_input.setText(" ");
 Caculate.this.flag = false;
 
 }
 if (str.equals("(-)")) {//當(dāng)點(diǎn)擊(-)時(shí)
 if (label_input.getText().indexOf("(-)") == -1) {//如果此時(shí)顯示框里還沒(méi)出現(xiàn)(-)時(shí)
 label_input.setText(str);
 }
 }
 if (!str.equals("(-)")) {//當(dāng)命令不是(-)時(shí)
 if (str.equals("AC")) { //點(diǎn)擊清零鍵時(shí)
 clear();
 } else if (str.equals("←")) { //點(diǎn)擊返回鍵時(shí)
 getBack();
 } else if (str.equals(".")) { // 點(diǎn)擊小數(shù)點(diǎn)時(shí),小數(shù)點(diǎn)只能出現(xiàn)一次,不能在首位
 if (label_input.getText().indexOf(".") == -1 && !label_input.getText().equals(" ")) {
 label_input.setText(label_input.getText() + str);
 } else {
 //clear();
 label_input.setText(label_input.getText() + str);
 label_hint.setText("小數(shù)點(diǎn)不合法,請(qǐng)重新輸入");
 }
 } else { //點(diǎn)擊0,1,2,3,4,5,6,7,8,9時(shí)顯示原數(shù)
 label_input.setText(label_input.getText() + str);
 }
 }
 }
 }
 
 // 返回上一級(jí)
 public void getBack() {
 if (label_input.getText().length() <= 1) { //長(zhǎng)度小于等于1時(shí)清空顯示框
 clear();
 } else {
 String str = "";
 if (label_input.getText().length() == 3) { //處理(-)問(wèn)題,我把(-)看成算一個(gè)字符,要返回就整體返回
 String str1 = label_input.getText().substring(label_input.getText().length() - 3);
 if (str1.equals("(-)")) {
 str = " ";
 } else {
 str = label_input.getText().substring(0, label_input.getText().length() - 1);
 }
 } else { //長(zhǎng)度大于3時(shí)正常返回上一級(jí)
 str = label_input.getText().substring(0, label_input.getText().length() - 1);
 }
 label_input.setText(str); //設(shè)置輸入顯示框?yàn)閟tr
 }
 label_hint.setText(" "); //清空提示顯示框
 }
 
 // 清屏
 public void clear() {
 label_hint.setText(" ");
 label_input.setText(" ");
 label_result.setText("0");
 this.result = 0;
 Caculate.this.flag = true; //恢復(fù)初始化標(biāo)記
 Caculate.this.find = true; //恢復(fù)初始化標(biāo)記
 }
 
 public class OperationListener implements ActionListener {
 @Override
 public void actionPerformed(ActionEvent e) {
 String str = e.getActionCommand(); // 返回與此動(dòng)作相關(guān)的命令字符串
 if (Caculate.this.flag == false) { //當(dāng)?shù)谝淮吸c(diǎn)擊+,-,*,、,%,=時(shí)
 if (label_input.getText().contains("(-)")) { //把(-)處理為-,然后在進(jìn)行數(shù)據(jù)操作
 label_input.setText(label_input.getText().replaceAll("\\(-\\)", "-"));
 }
 
 caculate(Double.parseDouble(label_input.getText())); //計(jì)算
 Caculate.this.flag = true; //把flag標(biāo)記處理點(diǎn)擊多次操作運(yùn)算符和輸入下一個(gè)數(shù)的情況
 Caculate.this.command = str; //供下一次數(shù)據(jù)運(yùn)算操作命令
 } else { //多次點(diǎn)擊+,-,*,/,%,=時(shí)
 Caculate.this.command = str;
 if (str == "%" && Caculate.this.find == true) { //處理剛開(kāi)始輸入顯示框?yàn)榭諘r(shí)對(duì)0取余的情況
 Caculate.this.find = false; //把find標(biāo)記
 Caculate.this.command = "=";
 }
 }
 }
 }
 //進(jìn)行數(shù)據(jù)運(yùn)算
 public void caculate(double ans) {
 switch (this.command) {
 case "+": //計(jì)算數(shù)據(jù)的和
 this.result += ans;
 break;
 case "-": //計(jì)算數(shù)據(jù)的差
 this.result -= ans;
 break;
 case "*": //計(jì)算數(shù)據(jù)的乘積
 this.result *= ans;
 break;
 case "÷": //計(jì)算數(shù)據(jù)的商
 if (ans == 0) {
 label_hint.setText("提示:除數(shù)不能為0");
 return;
 }
 this.result /= ans;
 break;
 case "%": //計(jì)算數(shù)據(jù)的余
 double s1 = this.result;
 int d1 = (int) s1;
 double s2 = ans;
 int d2 = (int) s2;
 if (d1 == this.result && d2 == ans && d2 != 0) {
 this.result %= ans;
 } else {
 if (d1 != s1) {
 label_hint.setText("提示:余數(shù)的分子必須為整數(shù)");
 }
 else if (d2 != s2) {
 label_hint.setText("提示:余數(shù)的分母必須為整數(shù)");
 }
 else if (s2 == 0) {
 label_hint.setText("提示:余數(shù)的分母不能為0");
 }
 }
 break;
 case "=": //計(jì)算結(jié)果
 this.result = ans;
 break;
 }
 label_result.setText(" " + format(this.result)); //顯示計(jì)算結(jié)果
 }
 //計(jì)算結(jié)果格式處理
 public String format(double d) {
 String formatString = "";
 NumberFormat nf = NumberFormat.getInstance(); // 放回當(dāng)前默認(rèn)語(yǔ)言環(huán)境的通用數(shù)字格式
 formatString = nf.format(d); // 格式規(guī)范化
 return formatString; //返回格式化后的數(shù)據(jù)
 }
}

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

相關(guān)文章

  • java教學(xué)筆記之對(duì)象的創(chuàng)建與銷毀

    java教學(xué)筆記之對(duì)象的創(chuàng)建與銷毀

    面向?qū)ο蟮木幊陶Z(yǔ)言使程序能夠直觀的反應(yīng)客觀世界的本來(lái)面目,并且使軟件開(kāi)發(fā)人員能夠運(yùn)用人類認(rèn)識(shí)事物所采用的一般思維方法進(jìn)行軟件開(kāi)發(fā),是當(dāng)今計(jì)算機(jī)領(lǐng)域中軟件開(kāi)發(fā)和應(yīng)用的主流技術(shù)。
    2016-01-01
  • Java8如何利用Lambda快速生成map、多層嵌套map

    Java8如何利用Lambda快速生成map、多層嵌套map

    這篇文章主要介紹了Java8如何利用Lambda快速生成map、多層嵌套map問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Java中==符號(hào)與equals()的使用詳解(測(cè)試兩個(gè)變量是否相等)

    Java中==符號(hào)與equals()的使用詳解(測(cè)試兩個(gè)變量是否相等)

    下面小編就為大家?guī)?lái)一篇Java中==符號(hào)與equals()的使用詳解(測(cè)試兩個(gè)變量是否相等)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • java中jdbcTemplate的queryForList(坑)

    java中jdbcTemplate的queryForList(坑)

    本文主要介紹了java中jdbcTemplate的queryForList,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java多線程下載網(wǎng)圖的完整案例

    Java多線程下載網(wǎng)圖的完整案例

    這篇文章主要給大家介紹了關(guān)于Java多線程下載網(wǎng)圖的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Spring Boot 配置隨機(jī)數(shù)的技巧代碼詳解

    Spring Boot 配置隨機(jī)數(shù)的技巧代碼詳解

    這篇文章主要介紹了Spring Boot 配置隨機(jī)數(shù)技巧,spring boot 支持在系統(tǒng)加載的時(shí)候配置隨機(jī)數(shù),具體實(shí)例代碼大家參考下本文
    2018-05-05
  • java實(shí)現(xiàn)微信支付結(jié)果通知

    java實(shí)現(xiàn)微信支付結(jié)果通知

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)微信支付結(jié)果通知,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Java打成各種壓縮包的方法詳細(xì)匯總

    Java打成各種壓縮包的方法詳細(xì)匯總

    在工作過(guò)程中,需要將一個(gè)文件夾生成壓縮文件,然后提供給用戶下載,下面這篇文章主要給大家介紹了關(guān)于Java打成各種壓縮包的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • Java面向?qū)ο笾畠?nèi)部類詳解

    Java面向?qū)ο笾畠?nèi)部類詳解

    在 Java 中,允許一個(gè)類的定義位于另一個(gè)類的內(nèi)部,前者稱為內(nèi)部類,后者稱為外部類。這篇文章將總結(jié)一下內(nèi)部類的使用,感興趣的可以了解一下
    2022-10-10
  • java實(shí)現(xiàn)去除ArrayList重復(fù)字符串

    java實(shí)現(xiàn)去除ArrayList重復(fù)字符串

    本文主要介紹了java實(shí)現(xiàn)去除ArrayList重復(fù)字符串,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09

最新評(píng)論