版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目九圖形用戶界面編程
制作一個(gè)圖形界面的計(jì)算器,要求有基本的標(biāo)題欄及Windows按鈕,數(shù)字顯示界面及1、2、3、...8、9、0十個(gè)數(shù)字鍵、加、減、乘、除四則運(yùn)算鍵及小數(shù)點(diǎn)、等號(hào)鍵。能夠用這個(gè)計(jì)算器完成基本的四則運(yùn)算并正確地顯示出來。項(xiàng)目描述
任務(wù)一框架的設(shè)計(jì)
【任務(wù)描述】
任務(wù)9_1:創(chuàng)建一個(gè)空的框架。任務(wù)9_2:向這個(gè)框架中添加組件?!颈貍渲R(shí)】
1.什么是圖形界面程序設(shè)計(jì)
自從MicrosoftWindows1.0誕生以來,計(jì)算機(jī)操作系統(tǒng)由原來DOS的命令行界面飛躍到了圖形界面,大大地方便了用戶的操作,提升了人機(jī)交互的功能。而MicrosoftVisioStudio及DELPHI、Matlab等開發(fā)工具集的出現(xiàn),將傳統(tǒng)的程序設(shè)計(jì)提升到了圖形用戶界面時(shí)代。
圖形用戶界面(GraphicalUserInterface,簡(jiǎn)稱GUI)為用戶和應(yīng)用程序之間的交互提供了直觀、方便的交流方式。用戶使用鍵盤和鼠標(biāo)操作圖形界面上的按鈕、菜單等元素向計(jì)算機(jī)系統(tǒng)發(fā)送命令,系統(tǒng)運(yùn)行的結(jié)果也以圖形的方式顯示給用戶。因此現(xiàn)代程序設(shè)計(jì)語言幾乎都能支持圖形用戶界面。
2.GUI使用的組件編寫Java的圖形用戶界面程序可以使用AWT組件,也可以使用Swing組件。
Java在早期版本中包含一個(gè)用于GUI程序設(shè)計(jì)的類庫,稱為抽象窗口工具箱(AWT組件)。AWT將處理用戶界面的任務(wù)委派給操作系統(tǒng),由底層平臺(tái)負(fù)責(zé)創(chuàng)建圖形界面元素。對(duì)于簡(jiǎn)單的程序來說,AWT是比較有效的。但是,菜單、滾動(dòng)條、文本區(qū)域等的形狀和操作方式是由操作系統(tǒng)來決定的,在不同版本的操作系統(tǒng)中(如Windows98和WindowsXP)差異會(huì)較大。而且,有些系統(tǒng)沒有Windows、Macintosh這樣豐富的圖形界面組件集合,也限制了AWT組件編寫程序的使用范圍。結(jié)果是,AWT組件編寫的程序遠(yuǎn)不如Windows的程序美觀,也沒有提供這些平臺(tái)的用戶熟悉的功能。更重要的是,在不同平臺(tái)下圖形界面庫的Bug也不同,給開發(fā)人員帶來了很多的麻煩。
Swing組件的工作方式與SWT組件完成不同,它在空白窗口上繪制菜單、按鈕、文本框等元素,它所編寫的程序在所有平臺(tái)上外觀和操作方式是一樣的。由于它的方便和通用性,現(xiàn)在Swing組件是Java基礎(chǔ)類庫的一部分。與AWT相比,Swing的優(yōu)點(diǎn)如下:1.Swing有一個(gè)豐富的、方便的圖形界面組件集合,有些組件是AWT沒有的;2.Swing對(duì)操作系統(tǒng)依賴較少,因此與底層平臺(tái)相關(guān)的bug就少;3.Swing在不同平臺(tái)上運(yùn)行的界面是一樣的。必須要說的是,雖然現(xiàn)然的Java同時(shí)支持AWT組件和Swing組件,但兩種組件混合在一起使用可能產(chǎn)生一些無法預(yù)料的錯(cuò)誤,所以在同一程序中,或者全部使用AWT組件,或者全部使用Swing組件。由于Swing組件的諸多優(yōu)點(diǎn),因此我們?cè)诖苏鹿?jié)中只講解Swing組件圖形界面編程。3.容器類、組件類與輔助類Java支持GUI程序設(shè)計(jì)的類分為容器類、組件類與輔助類,這些類很好地利用了面向?qū)ο蟮睦^承特性,圖7.1列舉了一部分GUI類的層次結(jié)構(gòu)。容器類是用于包含其它組件的類,在圖7.1中,F(xiàn)rame、Panel、Applet是AWT的容器類,JFrame、JPanel、JApplet是Swing類的容器類。JComponent是所有Swing組件類的超類,常用的Swing組件有JButton、JTextField、JTextArea、JRadioButton、JMenu等,它們都是JComponent的子類。輔助類用來描述GUI組件的屬性,如環(huán)境、顏色、字體。常用的輔助類有Color、GraphicsFont、LayoutManager等。圖9.1GUI類的層次結(jié)構(gòu)4.框架JFrame在Java中,框架是容器,它能包含按鈕、文本框、菜單等組件。在Swing組件中,用JFrame類描述框架。JButton、JFrame、JDialog、JApplet都是常用的Swing組件。JFrame的常用構(gòu)造方法如下:JFrame()JFrame(Stringtitle)//創(chuàng)建一個(gè)標(biāo)題為title的框架JFrame的常用成員方法還有:voidsetTitle(Stringtitle)//設(shè)置框架的標(biāo)題StringgetTitle()//返回框架的標(biāo)題voidsetVisible(booleanb)//設(shè)置框架的可見性voidsetSize(doublew,doubleh)//設(shè)置框架的寬和高voidsetLocation(intx,inty)//設(shè)置框架左上角的座標(biāo)ContainergetContentPane()//返回框架的內(nèi)容面板voidpack()//根據(jù)框架中放置的組件調(diào)整窗口大小voidsetJMenuBar(JMenuBarmenubar)//為框架設(shè)置菜單條voidsetDefaultCloseOperation(into)//設(shè)置關(guān)閉窗口后的默認(rèn)操作編寫GUI程序,經(jīng)常通過繼承JFrame定義新的框架類,在新的框架類中定義GUI界面及其組件。【解題思路】
任務(wù)9_1:
1.繼承JFrame定義一個(gè)新的框架類;
2.設(shè)置常見成員方法;
3.創(chuàng)建這個(gè)類的對(duì)象,調(diào)用這些繼承的方法。任務(wù)9_2:
4.調(diào)用getContentPane()方法獲得JFrame的內(nèi)容面板;
5.調(diào)用Container的add()方法把組件加入到內(nèi)容面板;
6.添加按鈕?!救蝿?wù)透析】//Example9_1.javaimportjavax.swing.JFrame;public
classExample7_1{
public
static
voidmain(String[]args){ EmptyFramef=newEmptyFrame("一個(gè)框架");//設(shè)置框架名稱
f.setVisible(true);//設(shè)置框架可見
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}class
EmptyFrame
extendsJFrame{
publicEmptyFrame(Stringtitle){
super(title);//調(diào)用超類的構(gòu)造方法
setSize(300,200);//框架大小為300*200setLocation(400,300);//框架位置為距左上角400,300像素
}}圖9.2Example9_1.java的運(yùn)行結(jié)果//Example9_2.javaimport
java.awt.Container;importjavax.swing.JButton;importjavax.swing.JFrame;public
classExample7_2{
public
static
voidmain(String[]args){ JFrameb=newButtonFrame();//超類變量引用子類對(duì)象
b.setTitle("框架和按鈕");//設(shè)置框架的標(biāo)題
b.setSize(300,200); b.setLocation(400,300);b.setVisible(true);b.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}class
ButtonFrame
extendsJFrame{
publicButtonFrame(){JButtonj=newJButton("Hello");//創(chuàng)建按鈕對(duì)象j,按鈕上顯示Helloadd(j);}//把按鈕對(duì)象j加入內(nèi)容面板}圖9.3Example9_2.java的運(yùn)行結(jié)果【課堂提問】
★什么容器類?什么是組件類和輔助類?常用的容器類和組件類、輔助類有哪些?
★組件類一定要放在容器類中嗎?
★JFrame的setVisible()方法有什么作用?如果不調(diào)用這個(gè)方法會(huì)如何?
★JFrame的內(nèi)容面板作用是什么?如何向JFrame中添加組件?
【現(xiàn)場(chǎng)演練】
建立一個(gè)界面,容器為Applet類,窗口是藍(lán)色,框架標(biāo)題為“多個(gè)按鈕的窗口”,添加兩至三個(gè)按鈕。任務(wù)二按鈕和文本區(qū)的設(shè)計(jì)布局
【任務(wù)描述】任務(wù)9_3:向框架中添加一個(gè)文本框。任務(wù)9_4:向框架中添加16個(gè)按鈕,做成簡(jiǎn)單計(jì)算器的界面,排列整齊。【必備知識(shí)】1.文本框Swing的文本輸入類包括文本框JTextField、文本區(qū)JTextArea和密碼框JPasswordField。JTextField和JTextArea是JTextComponent的子類,而JPasswordField是JTextField的子類,因此這三個(gè)類的很多方法是從JTextComponent繼承的,其中常用方法有:voidsetEditable(booleanb)//設(shè)置可否編輯文本voidsetText(Stringtext)//設(shè)置文本StringgetText()//獲取文本JTextField常用的構(gòu)造方法有:JTextField()JTextField(intcolumns)//指定文本框的寬度是多少個(gè)字符JTextField(Stringtext)//指定文本框的原始文本與文本框類似,文本區(qū)是多行的,可以輸入的文字內(nèi)容較多,而密碼框則與文本框外觀一至,輸入的文字會(huì)以掩碼顯示。2.幾種常見的布局管理器布局管理器用來管理組件如何放置在容器中,最常見的四種AWT布局類FlowLayout、BorderLayout、GridLayout和CardLayout都實(shí)現(xiàn)了接口LayoutManager。每種容器類都有一種默認(rèn)的布局管理方式。JFrame默認(rèn)布局是BorderLayout,JPane默認(rèn)布局是FlowLayout。除了使用默認(rèn)布局外,容器還可以使用下列方法設(shè)置布局:voidsetLayout(LayoutManagerm)例如,如果JPanel面板改用BorderLayout,可以使用如下語句:JPanelj=newJPane();BorderLayoutb=newBorderLayout();j.setLayout(b);也可以簡(jiǎn)寫為:JPanelj=newJPanel();j.setLayout(newBorderLayout());FlowLayout是最簡(jiǎn)單的布局管理器,它按照添加的順序,把組件從左到右排列在容器中,放滿一行后開始新的一行。BorderLayout布局管理器將容器劃分為東西南北中五個(gè)區(qū),在容器中加載組件時(shí)必須指定加載到哪個(gè)區(qū)。GridLayout布局把容器劃分為若干行和列大小相等的網(wǎng)格單元,組件就放置在網(wǎng)絡(luò)中。CardLayout布局像管理卡片一樣管理組件,每張卡片上放置一個(gè)組件,每次只有一張卡片可見。3.GridLayout布局在此項(xiàng)目中我們用GridLayout布局實(shí)現(xiàn)計(jì)算器。GridLayout的構(gòu)造方法有:GridLayout()//行數(shù)為1,每個(gè)組件占一列GridLayout(introws,intcols)//指定行數(shù)和列數(shù)GridLayout(introws,intcols,inthgap,intvgap)//指定組件水平和垂直方向間隔【解題思路】
任務(wù)9_3:1.繼承JFrame定義一個(gè)新的框架類;2.設(shè)置GridLayout布局;3.向框架中添加一個(gè)文本框;任務(wù)9_4:4.向框架中添加16個(gè)按鈕;5.設(shè)置16個(gè)按鈕的顯示文字;6.調(diào)整整個(gè)框架窗口的布局。【任務(wù)透析】//Example9_3.javaimportjava.awt.BorderLayout;import
java.awt.GridLayout;import
javax.swing.JButton;importjavax.swing.JFrame;import
javax.swing.JPanel;importjavax.swing.JTextField;public
classExample7_3{
public
static
voidmain(String[]args){GridLayoutDf=newGridLayoutD();f.setTitle("計(jì)算器");f.setSize(250,180);f.setLocation(400,300);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}class
GridLayoutD
extendsJFrame{ GridLayoutD() {add(newJTextField(10),BorderLayout.NORTH); }}圖9.4Example9_3.java的運(yùn)行結(jié)果//Example9_4.javaimportjava.awt.BorderLayout;importjava.awt.GridLayout;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JTextField;public
classExample7_4{
public
static
voidmain(String[]args){ GridLayoutDf=newGridLayoutD();
f.setTitle("計(jì)算器");f.setSize(250,180);f.setLocation(400,300);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}class
GridLayoutD
extendsJFrame{ GridLayoutD() {JPanelj=newJPanel(); j.setLayout(newGridLayout(4,4,4,4)); j.add(newJButton("1")); j.add(newJButton("2")); j.add(newJButton("3")); j.add(newJButton("+")); j.add(newJButton("4")); j.add(newJButton("5")); j.add(newJButton("6")); j.add(newJButton("-")); j.add(newJButton("7")); j.add(newJButton("8")); j.add(newJButton("9")); j.add(newJButton("*")); j.add(newJButton(".")); j.add(newJButton("0")); j.add(newJButton("=")); j.add(newJButton("/")); add(j); add(newJTextField(10),BorderLayout.NORTH);}}圖9.5Example9_4.java的運(yùn)行結(jié)果【課堂提問】★什么是文本框?什么是密碼框?什么是文本區(qū)?它們有什么不同?★如何設(shè)定文本框的初始文字?可以禁止用戶在文本框里輸入嗎?★Java有哪些常見的布局類型?它們各有什么特點(diǎn)?★幾種布局類型可以混合使用嗎?【現(xiàn)場(chǎng)演練】建立一個(gè)框架,使用文本框、密碼框、文本區(qū)、按鈕等組件,配合常見的布局管理器,設(shè)計(jì)一個(gè)用戶注冊(cè)的表單,項(xiàng)目有:姓名、密碼、確認(rèn)密碼、郵件地址、個(gè)人簡(jiǎn)介等。任務(wù)三事件響應(yīng)及界面程序設(shè)計(jì)
【任務(wù)描述】任務(wù)9_5:向一個(gè)框架中添加一個(gè)按鈕和一個(gè)文本框,當(dāng)用戶點(diǎn)擊此按鈕的時(shí)候,在文本框里顯示“Helloworld!”。任務(wù)9_6:在程序Example7_4的基礎(chǔ)上,編寫事件響應(yīng),使它成為一個(gè)實(shí)用的計(jì)算器程序?!颈貍渲R(shí)】1.什么是事件響應(yīng)圖形界面程序必須不斷監(jiān)視敲擊鍵盤和單擊鼠標(biāo)這樣的事件。只有這樣,一旦有事件產(chǎn)生,應(yīng)用程序才能對(duì)事件作出響應(yīng)。編寫Java圖形界面程序必須掌握J(rèn)ava處理事件響應(yīng)的方法。
Java的AWT事件委托模型使用事件源、事件和事件監(jiān)聽器三種對(duì)象處理事件響應(yīng)。事件源通常是按鈕、單選框等組件對(duì)象,或框架等窗口對(duì)象。鍵盤或鼠標(biāo)在事件源上操作將產(chǎn)生事件。
Java中的事件用對(duì)象表示,事件相關(guān)的信息封裝在事件對(duì)象中。不同的事件源產(chǎn)生不同事件類的對(duì)象。例如單擊按鈕產(chǎn)生ActionEvent的對(duì)象,鼠標(biāo)在框架窗口上操作產(chǎn)生WindowsEvent的對(duì)象。2.如何定義事件響應(yīng)事件監(jiān)聽器是類庫中的一組接口,每種事件類都有一個(gè)負(fù)責(zé)監(jiān)聽這種事件對(duì)象的接口,接口中定義了響應(yīng)這種事件的方法。例如,單擊按鈕產(chǎn)生事件類ActionEvent的對(duì)象,監(jiān)聽這種事件的接口是ActionListener,這個(gè)接口中定義了唯一的一個(gè)方法:voidactionPerformed(ActionEvente);這個(gè)方法就是響應(yīng)單擊按鈕事件的方法,即單擊按鈕后自動(dòng)運(yùn)行的方法。由于接口自己不能產(chǎn)生對(duì)象,最終負(fù)責(zé)監(jiān)聽事件的是實(shí)現(xiàn)了這個(gè)接口的類的對(duì)象。與實(shí)現(xiàn)其它接口一樣,實(shí)現(xiàn)監(jiān)聽接口必須用同樣的方法簽名覆蓋接口中的抽象方法。重寫的方法體就是事件響應(yīng)程序,即事件產(chǎn)生后自動(dòng)運(yùn)行的程序。實(shí)現(xiàn)事件響應(yīng)最關(guān)鍵的是,一旦產(chǎn)生事件,監(jiān)聽對(duì)象必須自動(dòng)執(zhí)行響應(yīng)程序。這在Java中是由事件源注冊(cè)監(jiān)聽對(duì)象實(shí)現(xiàn)的。每個(gè)事件源都有注冊(cè)事件監(jiān)聽對(duì)象的方法。例如,JButton通過下列方法注冊(cè)單擊按鈕事件的監(jiān)聽對(duì)象:addActionListener(ActionListenera);a是接ActionListener的引用變量,由于接口不能創(chuàng)建對(duì)象,這個(gè)變量引用的是實(shí)現(xiàn)接口ActionListener的類的對(duì)象。如此一來,一旦單擊按鈕,系統(tǒng)自動(dòng)產(chǎn)生一個(gè)ActionEvent事件,如果按鈕注冊(cè)了監(jiān)聽對(duì)象,事件對(duì)象的引用傳送給監(jiān)聽對(duì)象的actionPerformed(ActionEvente)方法的參變量e,并自動(dòng)運(yùn)行這個(gè)方法。因此,actionPerformed(ActionEvente)方法體中引用變量e可以調(diào)用ActionEvent的方法返回事件有關(guān)的信息,ActionEvent最常用的方法是:getSource()//返回事件源對(duì)象名【解題思路】
任務(wù)9_5:1.定義一個(gè)名為Example9_5的類;2.在容器中裝入一個(gè)按鈕與一個(gè)文本框;3.對(duì)按鈕進(jìn)行監(jiān)聽;4.如果按鈕被單擊,則響應(yīng)事件為,設(shè)置文本框內(nèi)容為“HelloWorld!”。任務(wù)9_6:1.在Example7_6已有界面的基礎(chǔ)上修改程序;2.對(duì)按鈕進(jìn)行監(jiān)聽3.如果數(shù)字鍵或小數(shù)點(diǎn)被單擊,則將文本框內(nèi)容附加上數(shù)字鍵或小數(shù)點(diǎn)內(nèi)容;4.如果運(yùn)算符被單擊,則將當(dāng)前文本框內(nèi)容暫存,清空文本框,將運(yùn)算符記錄下來;5.如果等號(hào)被單擊,則將暫存內(nèi)容取出,再將當(dāng)前文本框內(nèi)容取出,將二者用事先記錄好的運(yùn)算符計(jì)算,最后將結(jié)果提交文本框?!救蝿?wù)透析】//Example9_5.javaimportjava.awt.event.ActionEvent;importjava.awt.event.Acti
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024宅基地轉(zhuǎn)讓協(xié)議書范本制作與簽訂注意事項(xiàng)3篇
- 2024年度單位食堂食品安全監(jiān)督與服務(wù)協(xié)議3篇
- 2024年度單方離婚協(xié)議書(情感咨詢與法律援助配套版)3篇
- 2024年度代持協(xié)議示范文本:商標(biāo)權(quán)代持與授權(quán)3篇
- 2025年滬教版必修4語文下冊(cè)月考試卷329
- 貨款月結(jié)算合同范例
- 半掛車托運(yùn)合同范例
- 挖集水池合同范例
- 賠償責(zé)任合同范例
- 果園租地合同范例
- 蘇教版小學(xué)六年級(jí)信息技術(shù)全冊(cè)教案
- 《鄉(xiāng)土中國》第12-14章
- 軌道交通先張法預(yù)應(yīng)力U型梁預(yù)制施工工法
- 人教版英語四年級(jí)上冊(cè)《Unit-3-My-friends》單元教學(xué)課件
- 工程變更矩陣圖
- 農(nóng)村土地買賣合同協(xié)議書范本
- GB/T 42828.2-2023鹽堿地改良通用技術(shù)第2部分:稻田池塘漁農(nóng)改良
- 急性腎衰竭診療規(guī)范內(nèi)科學(xué)診療規(guī)范診療指南2023版
- 國開2023春計(jì)算機(jī)組網(wǎng)技術(shù)實(shí)訓(xùn)-咖啡店無線上網(wǎng)參考答案
- 魯教版九年級(jí)化學(xué)上冊(cè)《水分子的變化》教案及教學(xué)反思
- (完整word版)小學(xué)數(shù)學(xué)答題卡模板
評(píng)論
0/150
提交評(píng)論