Java程序設計教程(第三版)課件 項目九 圖形用戶界面編程_第1頁
Java程序設計教程(第三版)課件 項目九 圖形用戶界面編程_第2頁
Java程序設計教程(第三版)課件 項目九 圖形用戶界面編程_第3頁
Java程序設計教程(第三版)課件 項目九 圖形用戶界面編程_第4頁
Java程序設計教程(第三版)課件 項目九 圖形用戶界面編程_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

項目九圖形用戶界面編程

制作一個圖形界面的計算器,要求有基本的標題欄及Windows按鈕,數(shù)字顯示界面及1、2、3、...8、9、0十個數(shù)字鍵、加、減、乘、除四則運算鍵及小數(shù)點、等號鍵。能夠用這個計算器完成基本的四則運算并正確地顯示出來。項目描述

任務一框架的設計

【任務描述】

任務9_1:創(chuàng)建一個空的框架。任務9_2:向這個框架中添加組件?!颈貍渲R】

1.什么是圖形界面程序設計

自從MicrosoftWindows1.0誕生以來,計算機操作系統(tǒng)由原來DOS的命令行界面飛躍到了圖形界面,大大地方便了用戶的操作,提升了人機交互的功能。而MicrosoftVisioStudio及DELPHI、Matlab等開發(fā)工具集的出現(xiàn),將傳統(tǒng)的程序設計提升到了圖形用戶界面時代。

圖形用戶界面(GraphicalUserInterface,簡稱GUI)為用戶和應用程序之間的交互提供了直觀、方便的交流方式。用戶使用鍵盤和鼠標操作圖形界面上的按鈕、菜單等元素向計算機系統(tǒng)發(fā)送命令,系統(tǒng)運行的結(jié)果也以圖形的方式顯示給用戶。因此現(xiàn)代程序設計語言幾乎都能支持圖形用戶界面。

2.GUI使用的組件編寫Java的圖形用戶界面程序可以使用AWT組件,也可以使用Swing組件。

Java在早期版本中包含一個用于GUI程序設計的類庫,稱為抽象窗口工具箱(AWT組件)。AWT將處理用戶界面的任務委派給操作系統(tǒng),由底層平臺負責創(chuàng)建圖形界面元素。對于簡單的程序來說,AWT是比較有效的。但是,菜單、滾動條、文本區(qū)域等的形狀和操作方式是由操作系統(tǒng)來決定的,在不同版本的操作系統(tǒng)中(如Windows98和WindowsXP)差異會較大。而且,有些系統(tǒng)沒有Windows、Macintosh這樣豐富的圖形界面組件集合,也限制了AWT組件編寫程序的使用范圍。結(jié)果是,AWT組件編寫的程序遠不如Windows的程序美觀,也沒有提供這些平臺的用戶熟悉的功能。更重要的是,在不同平臺下圖形界面庫的Bug也不同,給開發(fā)人員帶來了很多的麻煩。

Swing組件的工作方式與SWT組件完成不同,它在空白窗口上繪制菜單、按鈕、文本框等元素,它所編寫的程序在所有平臺上外觀和操作方式是一樣的。由于它的方便和通用性,現(xiàn)在Swing組件是Java基礎類庫的一部分。與AWT相比,Swing的優(yōu)點如下:1.Swing有一個豐富的、方便的圖形界面組件集合,有些組件是AWT沒有的;2.Swing對操作系統(tǒng)依賴較少,因此與底層平臺相關的bug就少;3.Swing在不同平臺上運行的界面是一樣的。必須要說的是,雖然現(xiàn)然的Java同時支持AWT組件和Swing組件,但兩種組件混合在一起使用可能產(chǎn)生一些無法預料的錯誤,所以在同一程序中,或者全部使用AWT組件,或者全部使用Swing組件。由于Swing組件的諸多優(yōu)點,因此我們在此章節(jié)中只講解Swing組件圖形界面編程。3.容器類、組件類與輔助類Java支持GUI程序設計的類分為容器類、組件類與輔助類,這些類很好地利用了面向?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)建一個標題為title的框架JFrame的常用成員方法還有:voidsetTitle(Stringtitle)//設置框架的標題StringgetTitle()//返回框架的標題voidsetVisible(booleanb)//設置框架的可見性voidsetSize(doublew,doubleh)//設置框架的寬和高voidsetLocation(intx,inty)//設置框架左上角的座標ContainergetContentPane()//返回框架的內(nèi)容面板voidpack()//根據(jù)框架中放置的組件調(diào)整窗口大小voidsetJMenuBar(JMenuBarmenubar)//為框架設置菜單條voidsetDefaultCloseOperation(into)//設置關閉窗口后的默認操作編寫GUI程序,經(jīng)常通過繼承JFrame定義新的框架類,在新的框架類中定義GUI界面及其組件?!窘忸}思路】

任務9_1:

1.繼承JFrame定義一個新的框架類;

2.設置常見成員方法;

3.創(chuàng)建這個類的對象,調(diào)用這些繼承的方法。任務9_2:

4.調(diào)用getContentPane()方法獲得JFrame的內(nèi)容面板;

5.調(diào)用Container的add()方法把組件加入到內(nèi)容面板;

6.添加按鈕?!救蝿胀肝觥?/Example9_1.javaimportjavax.swing.JFrame;public

classExample7_1{

public

static

voidmain(String[]args){ EmptyFramef=newEmptyFrame("一個框架");//設置框架名稱

f.setVisible(true);//設置框架可見

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的運行結(jié)果//Example9_2.javaimport

java.awt.Container;importjavax.swing.JButton;importjavax.swing.JFrame;public

classExample7_2{

public

static

voidmain(String[]args){ JFrameb=newButtonFrame();//超類變量引用子類對象

b.setTitle("框架和按鈕");//設置框架的標題

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)建按鈕對象j,按鈕上顯示Helloadd(j);}//把按鈕對象j加入內(nèi)容面板}圖9.3Example9_2.java的運行結(jié)果【課堂提問】

★什么容器類?什么是組件類和輔助類?常用的容器類和組件類、輔助類有哪些?

★組件類一定要放在容器類中嗎?

★JFrame的setVisible()方法有什么作用?如果不調(diào)用這個方法會如何?

★JFrame的內(nèi)容面板作用是什么?如何向JFrame中添加組件?

【現(xiàn)場演練】

建立一個界面,容器為Applet類,窗口是藍色,框架標題為“多個按鈕的窗口”,添加兩至三個按鈕。任務二按鈕和文本區(qū)的設計布局

【任務描述】任務9_3:向框架中添加一個文本框。任務9_4:向框架中添加16個按鈕,做成簡單計算器的界面,排列整齊?!颈貍渲R】1.文本框Swing的文本輸入類包括文本框JTextField、文本區(qū)JTextArea和密碼框JPasswordField。JTextField和JTextArea是JTextComponent的子類,而JPasswordField是JTextField的子類,因此這三個類的很多方法是從JTextComponent繼承的,其中常用方法有:voidsetEditable(booleanb)//設置可否編輯文本voidsetText(Stringtext)//設置文本StringgetText()//獲取文本JTextField常用的構(gòu)造方法有:JTextField()JTextField(intcolumns)//指定文本框的寬度是多少個字符JTextField(Stringtext)//指定文本框的原始文本與文本框類似,文本區(qū)是多行的,可以輸入的文字內(nèi)容較多,而密碼框則與文本框外觀一至,輸入的文字會以掩碼顯示。2.幾種常見的布局管理器布局管理器用來管理組件如何放置在容器中,最常見的四種AWT布局類FlowLayout、BorderLayout、GridLayout和CardLayout都實現(xiàn)了接口LayoutManager。每種容器類都有一種默認的布局管理方式。JFrame默認布局是BorderLayout,JPane默認布局是FlowLayout。除了使用默認布局外,容器還可以使用下列方法設置布局:voidsetLayout(LayoutManagerm)例如,如果JPanel面板改用BorderLayout,可以使用如下語句:JPanelj=newJPane();BorderLayoutb=newBorderLayout();j.setLayout(b);也可以簡寫為:JPanelj=newJPanel();j.setLayout(newBorderLayout());FlowLayout是最簡單的布局管理器,它按照添加的順序,把組件從左到右排列在容器中,放滿一行后開始新的一行。BorderLayout布局管理器將容器劃分為東西南北中五個區(qū),在容器中加載組件時必須指定加載到哪個區(qū)。GridLayout布局把容器劃分為若干行和列大小相等的網(wǎng)格單元,組件就放置在網(wǎng)絡中。CardLayout布局像管理卡片一樣管理組件,每張卡片上放置一個組件,每次只有一張卡片可見。3.GridLayout布局在此項目中我們用GridLayout布局實現(xiàn)計算器。GridLayout的構(gòu)造方法有:GridLayout()//行數(shù)為1,每個組件占一列GridLayout(introws,intcols)//指定行數(shù)和列數(shù)GridLayout(introws,intcols,inthgap,intvgap)//指定組件水平和垂直方向間隔【解題思路】

任務9_3:1.繼承JFrame定義一個新的框架類;2.設置GridLayout布局;3.向框架中添加一個文本框;任務9_4:4.向框架中添加16個按鈕;5.設置16個按鈕的顯示文字;6.調(diào)整整個框架窗口的布局。【任務透析】//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("計算器");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的運行結(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("計算器");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的運行結(jié)果【課堂提問】★什么是文本框?什么是密碼框?什么是文本區(qū)?它們有什么不同?★如何設定文本框的初始文字?可以禁止用戶在文本框里輸入嗎?★Java有哪些常見的布局類型?它們各有什么特點?★幾種布局類型可以混合使用嗎?【現(xiàn)場演練】建立一個框架,使用文本框、密碼框、文本區(qū)、按鈕等組件,配合常見的布局管理器,設計一個用戶注冊的表單,項目有:姓名、密碼、確認密碼、郵件地址、個人簡介等。任務三事件響應及界面程序設計

【任務描述】任務9_5:向一個框架中添加一個按鈕和一個文本框,當用戶點擊此按鈕的時候,在文本框里顯示“Helloworld!”。任務9_6:在程序Example7_4的基礎上,編寫事件響應,使它成為一個實用的計算器程序?!颈貍渲R】1.什么是事件響應圖形界面程序必須不斷監(jiān)視敲擊鍵盤和單擊鼠標這樣的事件。只有這樣,一旦有事件產(chǎn)生,應用程序才能對事件作出響應。編寫Java圖形界面程序必須掌握Java處理事件響應的方法。

Java的AWT事件委托模型使用事件源、事件和事件監(jiān)聽器三種對象處理事件響應。事件源通常是按鈕、單選框等組件對象,或框架等窗口對象。鍵盤或鼠標在事件源上操作將產(chǎn)生事件。

Java中的事件用對象表示,事件相關的信息封裝在事件對象中。不同的事件源產(chǎn)生不同事件類的對象。例如單擊按鈕產(chǎn)生ActionEvent的對象,鼠標在框架窗口上操作產(chǎn)生WindowsEvent的對象。2.如何定義事件響應事件監(jiān)聽器是類庫中的一組接口,每種事件類都有一個負責監(jiān)聽這種事件對象的接口,接口中定義了響應這種事件的方法。例如,單擊按鈕產(chǎn)生事件類ActionEvent的對象,監(jiān)聽這種事件的接口是ActionListener,這個接口中定義了唯一的一個方法:voidactionPerformed(ActionEvente);這個方法就是響應單擊按鈕事件的方法,即單擊按鈕后自動運行的方法。由于接口自己不能產(chǎn)生對象,最終負責監(jiān)聽事件的是實現(xiàn)了這個接口的類的對象。與實現(xiàn)其它接口一樣,實現(xiàn)監(jiān)聽接口必須用同樣的方法簽名覆蓋接口中的抽象方法。重寫的方法體就是事件響應程序,即事件產(chǎn)生后自動運行的程序。實現(xiàn)事件響應最關鍵的是,一旦產(chǎn)生事件,監(jiān)聽對象必須自動執(zhí)行響應程序。這在Java中是由事件源注冊監(jiān)聽對象實現(xiàn)的。每個事件源都有注冊事件監(jiān)聽對象的方法。例如,JButton通過下列方法注冊單擊按鈕事件的監(jiān)聽對象:addActionListener(ActionListenera);a是接ActionListener的引用變量,由于接口不能創(chuàng)建對象,這個變量引用的是實現(xiàn)接口ActionListener的類的對象。如此一來,一旦單擊按鈕,系統(tǒng)自動產(chǎn)生一個ActionEvent事件,如果按鈕注冊了監(jiān)聽對象,事件對象的引用傳送給監(jiān)聽對象的actionPerformed(ActionEvente)方法的參變量e,并自動運行這個方法。因此,actionPerformed(ActionEvente)方法體中引用變量e可以調(diào)用ActionEvent的方法返回事件有關的信息,ActionEvent最常用的方法是:getSource()//返回事件源對象名【解題思路】

任務9_5:1.定義一個名為Example9_5的類;2.在容器中裝入一個按鈕與一個文本框;3.對按鈕進行監(jiān)聽;4.如果按鈕被單擊,則響應事件為,設置文本框內(nèi)容為“HelloWorld!”。任務9_6:1.在Example7_6已有界面的基礎上修改程序;2.對按鈕進行監(jiān)聽3.如果數(shù)字鍵或小數(shù)點被單擊,則將文本框內(nèi)容附加上數(shù)字鍵或小數(shù)點內(nèi)容;4.如果運算符被單擊,則將當前文本框內(nèi)容暫存,清空文本框,將運算符記錄下來;5.如果等號被單擊,則將暫存內(nèi)容取出,再將當前文本框內(nèi)容取出,將二者用事先記錄好的運算符計算,最后將結(jié)果提交文本框。【任務透析】//Example9_5.javaimportjava.awt.event.ActionEvent;importjava.awt.event.Acti

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論