第9章 圖形界面程_第1頁
第9章 圖形界面程_第2頁
第9章 圖形界面程_第3頁
第9章 圖形界面程_第4頁
第9章 圖形界面程_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第9章圖形界面程序設計11AWT組件和Swing組件

Java最初的GUI程序設計的類庫是AWT,由底層平臺負責創(chuàng)建圖形界面元素。Swing圖形用戶界面在空白窗口上繪制按鈕、菜單等圖形界面元素。Swing的優(yōu)點:Swing有一個豐富的、方便的圖形界面組件集合。Swing對操作系統(tǒng)依賴很少,因此與底層平臺相關的bug就很少。Swing在不同平臺上運行的界面是一樣的。由于Swing具備諸多優(yōu)點,且已經成為java圖形界面設計的主要工具,本書只討論Swing圖形界面編程。22容器類、組件類和輔助類

容器類是用于包含其它組件的類,AWT容器類有Frame、Panel、Applet等等,Swing容器類有JFrame、JPanel、JApplet等等。Component是所有圖形界面組件類的超類,JComponent是所有Swing組件類的超類。JComponent是抽象類,它不能創(chuàng)建對象。常用的Swing組件有JButton、JTextField、JTextArea、JRadioButton、JMenu等,它們都是JComponent的子類。輔助類用來描述GUI組件的屬性,如圖形環(huán)境、顏色、字體、大小。常用輔助類有Color、Graphics、Font、LayoutManager等。32容器類、組件類和輔助類43框架JFrame

Swing中,用JFrame類描述框架

JFrame的常用構造方法有:

JFrame()

JFrame(Stringtitle)//創(chuàng)建一個標題為title的框架JFrame的常用成員方法還有:voidsetTitle(Stringtitle)//設置框架的標題StringgetTitle()//返回框架的標題voidsetVisible(booleanb)//參數(shù)為true時設置框架可見voidsetSize(doublew,doubleh)//設置框架的寬和高voidsetLocation(intx,inty)//設置窗口左上角的坐標ContainergetContentPane()//返回內容面板voidpack()//根據框架中放置的組件和布局調整窗口大小voidsetJMenuBar(JMenuBarmenubar)//為框架設置菜單條voidsetDefaultCloseOperation(intoperation)//設置關閉窗口后的默認操作53框架JFrame繼承JFrame定義一個新的框架類,并顯示這個框架類的對象。importjavax.swing.JFrame;classEmptyFrameextendsJFrame{ publicEmptyFrame(Stringtitle){ super(title);//調用超類的構造方法 setSize(200,150); }}publicclassExample9_1{ publicstaticvoidmain(String[]args){ EmptyFramef=newEmptyFrame("空的框架"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); }}64在框架中添加組件

Java中的框架是用來放置按鈕、文本框、菜單等組件的容器。JFrame包含一個叫內容面板(contentpane)的容器。向JFrame添加組件不是將組件添加到JFrame,而是添加到內容面板中。向JFrame添加組件首先必須調用getContentPane()方法獲得JFrame的內容面板。內容面板是Container的對象,Container的add()方法將組件加入內容面板。74在框架中添加組件在框架窗口中添加按鈕組件,并在屏幕的中央顯示框架classButtonFrameextendsJFrame{ ButtonFrame(){ super("按鈕和框架"); JButtonjb=newJButton("OK");//創(chuàng)建按鈕對象jb Containercon=getContentPane();//獲取內容面板 con.add(jb);//將按鈕對象jb加入內容面板 }}publicclassExample9_2{ publicstaticvoidmain(String[]args){ JFramebf=newButtonFrame();//超類變量引用子類對象 bf.setSize(200,150); bf.setLocation(400,300); bf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); bf.setVisible(true); }}84在框架中添加組件從JDK5.0開始JFrame可以直接調用add()方法向內容面板添加組件classButtonFrameextendsJFrame{ ButtonFrame(){ super("按鈕和框架"); JButtonjb=newJButton("OK"); add(jb);//將按鈕對象jb加入內容面板 }}95面板JPanel

JPanel是中間容器,它不能在屏幕上獨立顯示,但可以容納其它組件,然后作為一個整體放置在JFrame中。JPanel的常用構造方法和成員方法有:JPanel()JPanel(LayoutManagerlayout)Componentadd(Componentcomp)//向面板添加組件,繼承自Container類。按鈕、標簽、文本框等組件都是Component派生的子類,調用add()可以將這些組件加入JPanel或其他容器。105面板JPanel把按鈕加入面板,再把這個面板放在框架中。

classJPanelAppextendsJFrame{ JPanelApp(){ setTitle("使用JPanel");JPaneljp=newJPanel(); JButtonjb=newJButton("OK"); jp.add(jb);//將按鈕加入面板 add(jp);//將面板加入框架窗口的內容面板 }}publicclassExample9_3{ publicstaticvoidmain(String[]args){ JPanelAppf=newJPanelApp(); f.setSize(200,150); f.setLocation(400,300); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); }}116顏色Color

Color是類庫中java.awt包中的類,它定義了13種表示標準顏色的static常量:BLACKBLUECYANDARK_GRAYGRAYGREENLIGHT_GRAYMAGENTAORANGEPINKREDWHITEYELLOW

除標準顏色外,還可以使用下列構造方法自定義顏色:

Color(intred,intgreen,intblue)

Component類中定義了如下方法設置組件的背景色:voidsetBackground(Colorc)126顏色Color

顯示一個空的框架窗口,框架的背景色設置成紅色。publicclassExample9_4{ publicstaticvoidmain(String[]args){ JFramef=newJFrame();f.setTitle("紅色背景"); f.setSize(200,150); f.setLocation(400,300); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Containercon=f.getContentPane();//獲取內容面板 con.setBackground(Color.RED);//設置背景色 f.setVisible(true); }}137事件響應

圖形界面程序必須不斷監(jiān)視敲擊鍵盤和單擊鼠標這樣的事件。只有這樣,一旦事件產生,應用程序才能對事件作出響應。Java使用事件源、事件和事件監(jiān)聽器三種對象處理事件響應。事件源通常是按鈕、滾動條等組件對象,或框架等窗口對象。鍵盤或鼠標在事件源上操作將產生事件。Java中的事件用對象表示,事件相關的信息封裝在事件對象中。不同的事件源產生不同事件類的對象。例如點擊按鈕產生ActionEvent的對象,點擊框架窗口產生WindowEvent的對象。事件監(jiān)聽器是類庫中定義的一組接口,每種事件類都有一個負責監(jiān)聽這種事件的接口,接口中定義了響應這種事件的方法。147事件響應每個事件源都有注冊事件監(jiān)聽對象的方法。例如,JButton通過下列方法注冊監(jiān)聽對象:

addActionListener(ActionListenera)一旦點擊按鈕,系統(tǒng)會自動產生一個ActionEvent事件,如果按鈕注冊了監(jiān)聽對象,事件對象傳送到監(jiān)聽對象的actionPerformed()方法,并執(zhí)行這個方法。157事件響應例:點擊按鈕后在控制臺顯示提示信息

classButtonFrameAextendsJFrame{ ButtonFrameA() { super("點擊按鈕響應"); setSize(250,200); setLocation(400,300); JButtonjb=newJButton("OK"); add(jb); ButtonListener1bla=newButtonListener1();//創(chuàng)建監(jiān)聽對象 jb.addActionListener(bla);//注冊監(jiān)聽對象 }}167事件響應classButtonListener1implementsActionListener//定義監(jiān)聽類{ publicvoidactionPerformed(ActionEvente) { System.out.println("你點擊了按鈕!");//事件響應的代碼 }}publicclassExample9_5{ publicstaticvoidmain(String[]args) { ButtonFrameAf=newButtonFrameA(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); }}177事件響應例:點擊按鈕改變框架窗口的標題1.定義監(jiān)聽類ButtonListener2實現(xiàn)接口ActionListener2.框架類自身監(jiān)聽事件實現(xiàn)事件響應188事件的種類

Java處理事件響應基本上沿用了AWT的事件類和監(jiān)聽接口。盡管javax.swing.event包中包含了專門用于Swing組件的事件類和監(jiān)聽接口,但普遍使用的還是AWT事件。AWT事件類都是從AWTEvent繼承而來,AWTEvent的超類是EventObject。AWT將事件分為低級和語義事件。語義事件是指表達用戶動作的事件,例如,單擊按鈕、選中單選按鈕等。低級事件是形成語義事件的事件。例如,單擊按鈕包括按下鼠標、釋放鼠標等低級事件。198事件的種類常用的語義事件有:ActionEvent//對應點擊按鈕、選擇菜單、雙擊列表框或在文本框中回車ItemEvent//對應選擇復選框、選擇單選按鈕或單擊列表框常用的低級事件有:KeyEvent//對應一個鍵被按下或釋放MouseEvent//對應鼠標被按下、移動、拖動或釋放FocusEvent//某個組件失去焦點WindowEvent//窗口狀態(tài)被改變例9-8顯示框架窗口,鼠標進入窗口,背景色改為紅色,鼠標離開窗口,背景色改為黃色。209適配器

如果監(jiān)聽接口中定義了很多方法,即使事件響應需要覆蓋一個方法,定義監(jiān)聽類時也必須覆蓋接口中的所有方法.為了避免重寫這些無關的方法,在類庫中,為每個含有一個以上方法的監(jiān)聽接口都定義了一個適配器類,適配器類覆蓋了接口中的所有方法,但方法體都是一對空的{}.通過繼承適配器類實現(xiàn)事件響應,就不必覆蓋接口中的所有方法了.例9-9繼承適配器實現(xiàn)窗口事件響應:顯示框架窗口,在窗口中單擊鼠標激活窗口時,背景色變?yōu)榧t色,在窗口外單擊鼠標時,背景色變?yōu)樗{色。2110繪圖

JPanel經常用作中間容器組織界面上組件的布局,它的另一個重要用途是繪圖。在面板上繪圖需要創(chuàng)建一個類繼承JPanel,并覆蓋下列方法:

protectedvoidpaintComponent(Graphics

g)Graphics是一個與設備無關的抽象類,Graphics對象g是java虛擬機為每個GUI組件自動創(chuàng)建的,運行paintComponent()方法時,這個g是Graphics在特定平臺上的一個實例。2210繪圖使用paintComponent()方法有下列注意事項:1為了確保繪圖區(qū)域是干凈的,用戶覆蓋這個方法時,應該通過super.paintComponent(g)調用超類的這個方法。2paintComponent()方法是用戶無法調用的,只能由虛擬機調用。3組件第一次顯示或重新顯示時,paintComponent()方法被自動調用。4如果需要重新運行paintComponent()方法,用戶可以調用repaint()方法,該方法使虛擬機調用paint

溫馨提示

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

評論

0/150

提交評論