999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Java Swing的計算器的設(shè)計與實(shí)現(xiàn)

2016-02-05 08:05:35楊建強(qiáng)李苗在
電腦與電信 2016年10期
關(guān)鍵詞:按鈕用戶功能

楊建強(qiáng) 李苗在

(鶴壁職業(yè)技術(shù)學(xué)院電子信息工程學(xué)院,河南 鶴壁 458030)

基于Java Swing的計算器的設(shè)計與實(shí)現(xiàn)

楊建強(qiáng) 李苗在

(鶴壁職業(yè)技術(shù)學(xué)院電子信息工程學(xué)院,河南 鶴壁 458030)

計算器作為一種計算工具使用率非常高。本文利用Java語言的Swing、動作事件處理機(jī)制等技術(shù)開發(fā)了一個計算器,對于學(xué)習(xí)Java程序設(shè)計具有很大幫助,尤其對于《Java程序設(shè)計》課程的教學(xué)具有重要的指導(dǎo)作用。

計算器;Swing;Java

1 引言

計算器作為一種計算工具使用頻率非常高,其操作過程也被人們所熟悉。在程序設(shè)計語言教學(xué)過程中,選取學(xué)生所熟悉的場景作為教學(xué)案例有利于激發(fā)學(xué)生的學(xué)習(xí)興趣和降低學(xué)生的畏懼心理,便于知識點(diǎn)的掌握和項(xiàng)目經(jīng)驗(yàn)的積累。本文利用Java語言的Swing、動作事件處理機(jī)制等技術(shù)設(shè)計和開發(fā)了一個計算器,對于學(xué)習(xí)Java程序設(shè)計具有很大幫助,尤其對于《Java程序設(shè)計》課程的教學(xué)具有重要的指導(dǎo)作用。

2 計算器的設(shè)計

2.1 界面設(shè)計

Java程序里GUI(圖形用戶界面)設(shè)計用到的技術(shù)有AWT和Swing。其中,AWT是SUN公司推出的最早的一套API,包含的組件種類有限,只能提供基本的GUI設(shè)計,無法實(shí)現(xiàn)目前GUI設(shè)計需要的所有功能,并且開發(fā)出來的應(yīng)用程序在不同的平臺上執(zhí)行時,界面的顯示會有所不同。為此,SUN公司對AWT進(jìn)行了改進(jìn),提供了Swing組件,Swing不僅實(shí)現(xiàn)了AWT中的所有功能,提供了更加豐富的組件和功能,而且開發(fā)出來的應(yīng)用程序可以在任何平臺上運(yùn)行,不會出現(xiàn)界面顯示不同的問題。本設(shè)計就是利用Swing技術(shù)的相關(guān)組件構(gòu)造了如圖1所示的界面。該界面共分為上中下三部分,上面部分是一個JTextField對象,中間部分是在一個設(shè)置為FlowLayout布局的JPanel對象上靠右放置兩個JButton對象,下面部分是一個設(shè)置為4行4列GridLayout布局的JPanel對象上放置16個JButton對象。這三部分分別放置在默認(rèn)布局為BorderLayout的JFrame對象上的NORTH、CENTER和SOUTH區(qū)。

圖1 計算器界面

2.2 功能設(shè)計

計算器要能夠?qū)崿F(xiàn)以下功能:

1)一個數(shù)的輸入和顯示。

2)輸入運(yùn)算符,輸入完算術(shù)運(yùn)算符后,先保存第一個操作數(shù)和運(yùn)算符,為輸入第二個操作數(shù)做準(zhǔn)備。

3)第二個操作數(shù)的輸入和顯示。

4)輸入完等號后能夠顯示運(yùn)算結(jié)果。

5)退格功能的實(shí)現(xiàn),沒按一下退格按鈕,輸入的操作數(shù)從低位刪除一位。

6)清空功能的實(shí)現(xiàn),上一次運(yùn)算結(jié)束后,點(diǎn)擊清空按鈕,為下一次運(yùn)算做準(zhǔn)備。

7)計算器的健壯性考慮,比如用戶在沒輸入第一個操作數(shù)時就先輸入運(yùn)算符或等號。

8)計算器的友好交互性,比如程序剛啟動時和清空后,讓文本框內(nèi)默認(rèn)顯示為“0”。

3 計算器的實(shí)現(xiàn)

3.1 Java Swing程序基本代碼實(shí)現(xiàn)

1)創(chuàng)建Java項(xiàng)目JiSuanQi,在項(xiàng)目里創(chuàng)建一個繼承于JFrame并包含main方法的類JiSuanQi.java。

2)在類內(nèi)定義一個無參的構(gòu)造函數(shù),里面添加給窗體設(shè)置標(biāo)題、初始位置、自適應(yīng)窗口大小、窗體大小不可改變和窗體運(yùn)行可見的代碼。代碼如下所示:

this.setTitle("計算器");

this.setLocation(100,100);

this.pack();

this.setResizable(false);

this.setVisible(true);

3)在構(gòu)造函數(shù)的最下面設(shè)置窗體的關(guān)閉方式,代碼如下所示:

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

4)在main方法中創(chuàng)建JiSuanQi類的對象,使程序能夠正常運(yùn)行。

3.2 計算器程序的界面實(shí)現(xiàn)

1)計算器界面的操作數(shù)輸入和結(jié)果顯示文本框代碼實(shí)現(xiàn)如下所示:

JTextField tField=new JTextField("0",20);

this.add(tField,BorderLayout.NORTH);

2)“退格”和“清空”按鈕的實(shí)現(xiàn)代碼如下所示:

JPanel panel=new JPanel(new FlowLayout(FlowLayout. RIGHT));

JButton tuige=new JButton("退格");

JButton qingong=new JButton("清空");

panel.add(tuige);

panel.add(qingong);

this.add(panel);

3)計算器16個按鈕的代碼實(shí)現(xiàn)是先把按鈕上的標(biāo)識定義成一個字符數(shù)組,然后通過循環(huán)的方式依次取數(shù)組中的每個元素值作為新建JButton對象的文本。這樣極大地減少了編程的代碼量,也提高了代碼的可讀性。實(shí)現(xiàn)代碼如下所示:

JPanel panel2=new JPanel(new GridLayout(4,4,5,5));

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

for(int i=0;i

JButton button3=new JButton(bStrings[i]);

panel2.add(button3);

}

this.add(panel2,BorderLayout.SOUTH);

3.3 計算器功能的實(shí)現(xiàn)

在Swing事件模型(如圖2所示)中由3個分離的對象完成對事件的處理,分別為事件源、事件和監(jiān)聽器。事件源觸發(fā)一個事件,它被一個或多個“監(jiān)聽器”接收,監(jiān)聽器負(fù)責(zé)處理事件。所謂事件監(jiān)聽器,實(shí)質(zhì)上就是一個“實(shí)現(xiàn)特定類型監(jiān)聽器接口”的類對象,同時需要將接口中的方法一一實(shí)現(xiàn)。最后事件源調(diào)用相應(yīng)的方法加載這個“實(shí)現(xiàn)特定類型監(jiān)聽器接口”的類對象,所有的事件源都具有添加或移除相應(yīng)的事件監(jiān)聽器的方法。計算器功能的實(shí)現(xiàn)主要是通過用戶點(diǎn)擊界面上的相應(yīng)按鈕,觸發(fā)動作事件,然后由為它添加的動作事件監(jiān)聽器負(fù)責(zé)處理。計算器是通過匿名內(nèi)部類來創(chuàng)建事件監(jiān)聽器對象,針對所發(fā)生的事件進(jìn)行處理。程序里需要給每個按鈕都添加動作事件監(jiān)聽器,實(shí)現(xiàn)代碼如下所示:qingong.addActionListener(new ActionListener(){

@Override

public void actionPerformed(ActionEvente){

//具體的功能代碼實(shí)現(xiàn)

}

});

圖2 Swing事件模型

計算器程序里所用到的兩個操作數(shù)的位數(shù)是不確定的,需要先定義一個可變的字符串來保存用戶輸入的數(shù)字,還需要定義兩個double類型的變量來保存操作數(shù),以及定義一個字符串來保存運(yùn)算符。該部分代碼在整個程序中都要用到,故把這四個變量定義為靜態(tài)成員變量。代碼如下所示:

static StringBuffer number=new StringBuffer();

static double number1=0,number2=0;

static String flag;

3.3.1 正確使用計算器時的計算功能實(shí)現(xiàn)

所謂正確使用計算器是指用戶嚴(yán)格按照輸入第一操作數(shù)、運(yùn)算符、第二個操作數(shù)、等號這樣的次序。計算器加減乘除四個功能的實(shí)現(xiàn)是一樣的,這里我們以乘法為例來介紹一下計算器的功能實(shí)現(xiàn)。

第一步,我們需要獲取用戶按的是哪個按鈕,Ac-tionEvent對象的getActionCommand方法可以返回與此動作相關(guān)的命令字符串。

第二步,由于我們是把16個按鈕通過循環(huán)結(jié)合button3對象布局到界面上的,所以用戶按這16個按鈕中的任何一個都將觸發(fā)綁定到button3上的觸發(fā)器。在形成第一個操作時我們需要排除4個運(yùn)算符和等號,然后通過StringBuffer對象的append方法可以實(shí)現(xiàn)把多位操作數(shù)拼接起來并顯示。實(shí)現(xiàn)代碼如下所示:

String aa=e.getActionCommand();

if(!(aa.equals("*")||aa.equals("+")||aa.equals("-")||aa.equals("/ ")||aa.equals("=")))

{number.append(aa);

tField.setText(number.toString());}

第三步,當(dāng)用戶第一個操作數(shù)輸入完畢,輸入乘法符號時,此時代表用戶第一個操作數(shù)輸入完畢,我們可以先保存第一個操作數(shù)和運(yùn)算符,然后清空number為保存第二個操作數(shù)做準(zhǔn)備,最后把計算器顯示文本框中的內(nèi)容置空。實(shí)現(xiàn)代碼如下所示:

if(aa.equals("*")){

flag="*";

number1=Double.parseDouble(number.toString());

number.delete(0,number.length());

tField.setText(null);

}

第四步,當(dāng)用戶輸入第二個操作數(shù)時處理方法和第一個操作數(shù)一樣;待用戶輸入等號時,說明第二個操作數(shù)輸入完畢,需要程序根據(jù)用戶輸入的運(yùn)算符進(jìn)行計算并把最終結(jié)果顯示出來,最后清空number為下一次運(yùn)算做準(zhǔn)備。實(shí)現(xiàn)代碼如下所示:

if(aa.equals("=")){

number2=Double.parseDouble(number.toString());

if(flag.equals("*")){

double chengji=number1*number2;

String ji=String.valueOf(chengji);

tField.setText(ji);

number.delete(0,number.length());

}

}

3.3.2 不當(dāng)使用計算器時的處理

用戶在使用計算器的過程中難免會出現(xiàn)使用不當(dāng)?shù)那闆r,比如,第一個操作數(shù)還沒輸入的時候先輸入了運(yùn)算符或等號,第一個操作數(shù)輸入完后就輸入了等號等等,這類問題的解決方法是一樣的。在這我們以用戶先輸入乘號為例來說明這類問題,出現(xiàn)這種情況程序就會報錯,因?yàn)榇藭r程序需要保存第一個操作數(shù),而此時number為空,無法轉(zhuǎn)換成double類型的第一個操作數(shù)。解決方法為:在用戶按下乘號按鈕時,我們先判斷一下number中是否已保存值,如果有值,繼續(xù),如果無值,在顯示框中給出提示信息就可以順利解決了。實(shí)現(xiàn)代碼如下所示:

if(!number.toString().equals("")){

//正常處理代碼

}

else tField.setText("請先輸入第一個操作數(shù)!");

1)清空功能的實(shí)現(xiàn)

該功能實(shí)現(xiàn)簡單,只需要清除number中保存的數(shù)就可以了,然后給顯示框設(shè)置為0,實(shí)現(xiàn)代碼如下所示:

number.delete(0,number.length());

tField.setText("0");

2)退格功能的實(shí)現(xiàn)

退格功能指的是用戶在輸入操作數(shù)的過程中把操作數(shù)的最后一位或某幾位輸入有誤,需要刪除后重新輸入。此時我們還要考慮用戶一直按退格按鈕會導(dǎo)致全部刪完還要刪引起的異常處理,所以我們在刪除前先判斷一下number的長度,只有其長度大于0時才允許刪除,提高了系統(tǒng)的健壯性,如果不能刪除時,給顯示框設(shè)置為0,提高了計算器的友好交互性。

if(number.length()>0){

number.deleteCharAt(number.length()-1);

tField.setText(number.toString());

}else tField.setText("0");

4 結(jié)束語

計算器的功能雖然與操作系統(tǒng)所帶的計算器相比,在功能上有所欠缺,但作為計算器的主體功能已經(jīng)具備,加上其難易程度適中,綜合運(yùn)用了Java的多個技術(shù),而且便于初學(xué)者在理解一種操作運(yùn)算后,自己去模仿實(shí)現(xiàn)其余操作運(yùn)算,能對初學(xué)者起到舉一反三和引導(dǎo)的作用。在今后的工作中,將繼續(xù)完善此計算器程序的功能,使其更有利于初學(xué)者掌握J(rèn)ava程序設(shè)計。

[1]明日科技.Ja v a從入門到精通(第3版)[M].北京:清華大學(xué)出版社,2012.

[2]傳智博客.Ja v a基礎(chǔ)入門[M].北京:清華大學(xué)出版社,2014.

[3]楊建強(qiáng).基于.NET的高職實(shí)驗(yàn)報告管理信息系統(tǒng)的設(shè)計與實(shí)現(xiàn)[J].電腦開發(fā)與應(yīng)用,2013(9):51-53.

The Design and Realization of Logistics Management System Based on C#.net

Xia Binhao Lou Yishu Zhang Yiqiong
(Yuncheng University,Yuncheng 044000,Shanxi)

With the high-speed development of computer network,computer has played a vital role in each domain of the society.The logistics management system based on C#.net makes the requirements of logistics management more systematic and more standardized.This system not only reduces company's operation cost,but also raises the working efficiency greatly.

C#.net;logistics management system;systematic;standardization

TP311.11

A

1008-6609(2016)10-0061-03

楊建強(qiáng)(19 78-),男,河南滑縣人,碩士,副教授,研究方向?yàn)檐浖_發(fā)、軟件工程。

猜你喜歡
按鈕用戶功能
這些按鈕能隨便按嗎?
也談詩的“功能”
中華詩詞(2022年6期)2022-12-31 06:41:24
當(dāng)你面前有個按鈕
關(guān)于非首都功能疏解的幾點(diǎn)思考
關(guān)注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關(guān)注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關(guān)注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
內(nèi)心不能碰的按鈕
如何獲取一億海外用戶
中西醫(yī)結(jié)合治療甲狀腺功能亢進(jìn)癥31例
主站蜘蛛池模板: a级毛片网| 国产精品2| 91www在线观看| 国产午夜精品鲁丝片| 亚洲第一色网站| 国产剧情国内精品原创| 亚洲 日韩 激情 无码 中出| 亚洲精品午夜无码电影网| 国产精品一区二区国产主播| 啊嗯不日本网站| 亚洲无码视频一区二区三区| 欧美人在线一区二区三区| 99在线小视频| 亚洲日本韩在线观看| 亚洲欧洲日韩久久狠狠爱| 在线国产欧美| 国产成人亚洲精品色欲AV| 国产成在线观看免费视频| 很黄的网站在线观看| 91精品国产一区自在线拍| 天天综合网亚洲网站| 国产美女人喷水在线观看| 亚洲AV电影不卡在线观看| 蜜臀av性久久久久蜜臀aⅴ麻豆| 精品一区二区三区四区五区| 国产一级在线播放| 久草青青在线视频| 亚洲无码视频图片| 国产在线八区| 国产精品女在线观看| 欧美精品xx| 精品1区2区3区| 国产视频大全| 四虎成人在线视频| 亚洲精品视频免费| 97视频免费看| 9啪在线视频| 欧美成人日韩| 伊人久久精品无码麻豆精品| 狠狠色丁香婷婷综合| 国产浮力第一页永久地址| 一级毛片免费不卡在线| 精品无码专区亚洲| 综合网天天| 亚洲中文在线视频| 九九视频在线免费观看| 亚洲天堂色色人体| 亚洲国产一区在线观看| 国产啪在线| 久久黄色视频影| AV无码一区二区三区四区| 国产亚卅精品无码| 2020精品极品国产色在线观看| 伊人久久福利中文字幕| 精品久久久久成人码免费动漫| 欧美午夜在线观看| 超清无码一区二区三区| 无码粉嫩虎白一线天在线观看| 中文字幕在线欧美| 91色爱欧美精品www| 亚洲国内精品自在自线官| 波多野吉衣一区二区三区av| 97国产精品视频自在拍| 在线精品亚洲国产| 国产在线视频福利资源站| 国产黄在线免费观看| 国产精品美女网站| 伊人久久婷婷| 99久久精品视香蕉蕉| 久草视频福利在线观看| 亚洲欧美不卡视频| 2021国产精品自产拍在线观看 | 国产午夜精品一区二区三区软件| 欧美成人综合在线| 久久香蕉国产线| 97超级碰碰碰碰精品| 亚洲视频影院| 国产91无码福利在线| 国产精品不卡片视频免费观看| 一本一道波多野结衣一区二区| 午夜啪啪网| 精品国产aⅴ一区二区三区|