




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
《面向對象程序設計》教案第31講教學對象計算機科學技術專業授課內容12.1組件和窗口12.2容器布局課程標準教學目標(一)知識目標1.了解Java圖形界面開發的基本原理2.掌握常用的容器布局管理器(二)能力目標1.學會使用Swing開發Java圖形用戶界面程序2.學習各種常用容器布局使用教學方法采用講授法、演示法、討論法、案例教學。學時及分配(第1學時50分鐘)課堂講授30分鐘課堂練習20分鐘12.1.1Swing概述12.1.2組件12.1.3容器12.1.4簡單的Swing程序學時及分配(第2學時50分鐘)課堂講授20分鐘課堂練習30分鐘12.2.1FlowLayout布局12.2.2BorderLayout布局12.2.3GridLayout布局12.2.4JPanel類及容器嵌套知識點分析重點:布局管理器的使用難點:復雜界面的布局教學過程設計內容方式問題導入:為了開發圖形界面程序,Java從1.0版就提供了一個AWT類庫,稱為抽象窗口工具箱。AWT為程序員提供了構建GUI程序的組件,如Frame、Button、Label等。使用AWT創建GUI存在嚴重缺陷,最重要的是它將可視組件轉換為它們各自的特定平臺的對應元素。由于AWT組件使用了本機代碼資源,所以它們稱為重量級的。Java從1.2版開始提供了一個新的組件庫Swing,該庫可以說是第二代GUI開發工具集。內容要點12.1.1Swing概述Swing組件完全用Java編寫,不依賴于特定平臺,是輕量級的組件,每一個組件的外觀都由Swing確定,組件在任何平臺下都有一致的行為方式。由于Swing組件比AWT組件有許多優點,所以新開發的程序應該使用Swing組件。但要注意Swing并沒有完全取代AWT,它只是替代了AWT包中的UI組件(如Button、TextField等),AWT中的一些輔助類(如Graphics、Color、Font等)仍然保持不變。另外,Swing仍然使用AWT的事件模型。12.1.2組件Swing圖形界面元素稱為組件,大多數組件都派生于JComponent類(頂級容器除外)。JComponent類提供了所有組件的通用功能。JComponent類繼承了AWT的Container類和Component類,因此,Swing組件仍然是建立在AWT組件的基礎上的,并且與后者兼容。所有的Swing組件類都定義在javax.swing包中,表12-1列出了Swing常用的組件類。表12-1Swing常用組件類類名類名類名類名JButtonJCheckBoxJColorChooserJComboBoxJComponentJDialogJFileChooserJFraneJLabelJListJMenuJMenuBarJMenuItemJOptionPaneJPanelJPasswordFiedJPopupMenuJProgressBarJRadioButtonJRadioButtonMenuItemJScrollBarJScrollPaneJSeparatorJTableJTextAreaJTextFieldJToolTipJTree12.1.3容器Swing組件需要放置到容器中,Swing定義了兩種類型的容器,第一種是頂級容器,如JFrame、JDialog和JApplet(從JDK9開始,JApplet已被廢棄)。這些容器繼承自AWT的Container類,而不是繼承自JComponent類。頂級容器是重量級組件,它們是Swing組件庫中的特殊情況。頂級容器必須位于容器層次結構的頂層,不能被其他任何容器包含。而且,每一個容器層次結構都必須由頂級容器開始。通常用于應用程序的頂級容器是JFrame。Swing還支持輕量級容器,它們繼承自JComponent類,包括JPanel、JScrollPane、JRootPane等。輕量級容器通常用來組織和管理一組相關的組件,因此,可以使用輕量級容器來創建相關控件子組,讓它們包含在一個外部容器中。12.1.4簡單的Swing程序每個使用Swing的程序必須至少有一個頂層Swing容器。對GUI應用程序來說,一般應該有一個主窗口,或稱框架窗口。在Swing中,窗口是由JFrame對象實現的。下面程序使用JFrame類創建一個空的框架窗口容器,其上放置一個標簽對象,調用它的方法設置有關屬性,最后顯示該窗口。【程序12-1】HelloSwing.javapackagecom.boda.xy;importjavax.swing.*;publicclassHelloSwing{publicstaticvoidmain(String[]args){varframe=newJFrame("HelloWorldSwing");varlabel=newJLabel("第一個Swing程序。",SwingConstants.CENTER);frame.setSize(300,100);將標簽添加到容器中將標簽添加到容器中窗口在屏幕上居中顯示frame.add(label);窗口在屏幕上居中顯示設置窗口可見frame.setLocationRelativeTo(null);設置窗口可見frame.setVisible(true);關閉窗口時終止應用程序frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);關閉窗口時終止應用程序}}說明:JFrame對象是一個矩形窗口,其中包含標題欄以及關閉、最小化、最大化等按鈕。JLabel類創建一個標簽對象,該構造方法的第二個參數指定標簽文本的對齊方式,這里使用SwingConstants類的常量CENTER表示居中對齊。標簽不接受用戶的輸入,只是顯示信息。框架窗口創建后,默認的大小是0×0像素的,所以使用setSize()方法設置窗口的大小,兩個參數是用像素表示的寬度和高度。下面一行代碼實現將標簽對象添加到窗口的內容窗格中:frame.add(label);要向框架的內容窗格中添加組件,可以調用getContentPane()方法返回窗口的內容窗格,然后調用add()方法將組件添加到窗口的內容窗格中。frame.getContentPane().add(label);setLocationRelativeTo()方法用來設置窗口顯示的位置,使用null參數實現將窗口顯示在屏幕中央。窗口創建之后是不可見的,setVisible()方法設置為可見,才可看到運行結果。默認情況下關閉頂級窗口時(用戶單擊關閉按鈕),窗口從屏幕上消失,但是應用程序并沒有終止。通常希望在頂級窗口關閉時終止這個應用程序,調用setDefaultCloseOperation()方法可以實現這一點,如下所示。frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);12.2容器布局在Java的圖形界面程序中,是通過為每種容器提供布局管理器來實現組件布局的。所謂布局管理器就是為容器設置一個LayoutManager對象(布局管理器對象),由它來管理組件在容器中擺放的順序、位置、大小以及當窗口大小改變后組件如何變化等特征。通過使用布局管理器機制就可以實現GUI的跨平臺性,同時避免為每個組件設置絕對位置。常用的布局管理器有FlowLayout、BorderLayout、GridLayout、CardLayout和GridBagLayout。每種容器都有默認的布局管理器,也可以為容器指定新的布局管理器。使用容器的setLayout(LayoutManagerlayout)方法設置容器的布局。其中參數LayoutManager是接口。12.2.1FlowLayout布局FlowLayout布局叫流式布局,它是最簡單的布局管理器。添加到容器中的組件將從左到右,從上到下,一個一個地放置到容器中,一行放不下,放到下一行。當調整窗口大小后,布局管理器會重新調整組件的擺放位置,組件的大小和相對位置不變,組件的大小采用最佳尺寸。下面是FlowLayout類常用的構造方法:publicFlowLayout(intalign,inthgap,intvgap)創建一個流式布局管理器對象,并指定添加到容器中組件的對齊方式(align)、水平間距(hgap)和垂直間距(vgap)。對齊方式align的取值必須為下列三者之一:FlowLayout.LEFT、FlowLayout.RIGHT、FlowLayout.CENTER,它們是FlowLayout定義的整型常量,分別表示左對齊、右對齊和居中對齊。下面程序使用FlowLayout布局管理器,并在內容窗格中添加多個按鈕,這些按鈕的大小不同。程【序12-2】FlowLayoutDemo.java12.2.2BorderLayout布局BorderLayout布局叫邊界式布局,它將容器分成上、下、左、右、中5個區域,每個區域可放置一個組件或其他容器。中間區域是在上、下、左、右都填滿后剩下的區域。BorderLayout布局管理器的構造方法有:publicBorderLayout(inthgap,intvgap)參數hgap和vgap分別指定使用這種布局時組件之間的水平間隔和垂直間隔距離,單位是像素。向邊界式布局的容器中添加組件應該使用add(Componentc,intindex)方法,c為添加的組件,index為指定的位置。指定位置需要使用BorderLayout類定義的5個常量:PAGE_START(頁頭)、PAGE_END(頁尾)、LINE_START(行首)、LINE_END(行尾)和CENTER(中部)。如果不指定位置,組件添加到中部位置。下面程序演示BorderLayout邊界式布局的使用,在其5個區域各自添加一個按鈕。【程序12-3】BorderLayoutDemo.java12.2.3GridLayout布局GridLayout布局叫網格式布局,這種布局簡單地將容器分成大小相等的單元格,每個單元格可放置一個組件,每個組件占據單元格的整個空間,調整容器的大小,單元格大小隨之改變。下面是GridLayout類的常用構造方法:publicGridLayout(introws,intcols,inthgap,intvgap)參數rows和cols分別指定網格布局的行數和列數,hgap和vgap指定組件的水平間隔和垂直間隔,單位為像素。行和列參數至少有一個為非0值。向網格布局的容器中添加組件,只需調用容器的add()方法即可,系統按照先行后列的次序依次將組件添加到容器中。下面程序演示了GridLayout布局的使用。【程序12-4】GridLayoutDemo.java除上面介紹的布局管理器外,Swing還提供了其他布局管理器,例如CardLayout、GridBagLayout、BoxLayout、GroupLayout和SpringLayout等。如果界面復雜,可以考慮使用NetBeans集成開發環境(IDE)來設計用戶界面。12.2.4JPanel類及容器的嵌套由于某一種布局管理器的能力有限,在設計復雜布局時通常采用容器嵌套的方式,即把組件添加到一個中間容器中,再把中間容器作為組件添加到另一個容器中,從而實現復雜的布局。為實現這個功能,經常使用JPanel類,該類是JComponent類的子類,稱為面板容器。它是一個通用的容器,可以把它放入其他容器中,也可以把其他容器和組件放到它上面,因此它經常在構造復雜布局中作為中間容器,但它不能單獨顯示,需要放到JFrame或JDialog這樣的頂層容器中。使用面板容器作為中間容器構建GUI程序的一般做法是:先將組件添加到面板上,然后將面板作為一個組件再添加到頂層容器中。使用面板作為中間容器,首先需要創建面板對象,JPanel的構造方法如下:publicJPanel(LayoutManagerlayout)參數layout指定面板使用的布局管理器對象,缺省將使用默認的布局管理器創建一個面板,面板的默認的布局管理器是FlowLayout。也可以在創建面板對象后重新設置它的布局。下面程序通過一個簡單的例子說明面板對象的使用。【程序12-5】FrameAndPanel.java采用機房授課邊講邊練,同時用啟發式、討論式、案例教學等教學方法。布置課外學習任務教材習題:編程題1,2實驗指導:實驗題目1教學反思《面向對象程序設計》教案第32講教學對象計算機科學技術專業授課內容12.3事件處理課程標準教學目標(一)知識目標1.理解Java圖形界面的事件處理模型2.掌握各種常用事件處理方法(二)能力目標1.掌握各種常用事件處理方法2.熟悉常用組件的常見事件教學方法采用講授法、演示法、討論法、案例教學。學時及分配(第1學時50分鐘)課堂講授30分鐘課堂練習20分鐘12.3.1事件處理模型12.3.2事件類12.3.3事件監聽器12.3.4事件處理的基本步驟學時及分配(第2學時50分鐘)課堂講授20分鐘課堂練習30分鐘編程實踐知識點分析重點:Swing的事件處理中的基本概念Swing事件處理步驟常用事件的處理方法難點:Swing的事件處理模型教學過程設計內容方式問題導入圖形界面程序不應該是靜態的,它應該能夠響應用戶的操作。比如,當用戶在GUI上點擊鼠標或輸入一個字符,都會發生事件,程序根據事件類型作出反應就是事件處理。內容要點12.3事件處理12.3.1事件處理模型Java事件處理采用事件代理模型,即將事件的處理從事件源對象代理給一個或多個稱為事件監聽器的對象,事件由事件監聽器處理。事件代理模型把事件的處理代理給外部實體進行處理,實現了事件源和監聽器分離的機制。事件代理模型涉及3種對象:事件源、事件和事件監聽器。事件源(eventsource):產生事件的對象,一般來說可以是組件,如按鈕、對話框等。當這些對象的狀態改變時,就會產生事件。事件源可以是可視化組件,也可以是計時器等不可視的對象。事件(event):描述事件源狀態改變的對象。如按鈕被點擊,就會產生ActionEvent動作事件。事件監聽器(listener):接收事件并對其進行處理的對象。事件監聽器對象必須是實現了相應接口的類的對象。Java的事件代理模型如圖12-6所示。事件源事件源注冊一個監聽器對象事件對象監聽器對象事件處理程序用戶動作生成一個事件通知監聽器圖12-6GUI事件處理模型首先在事件源上注冊事件監聽器,當用戶動作觸發一個事件,運行時系統將創建一個事件對象,然后尋找事件監聽器對象來處理該事件。12.3.2事件類Swing組件可產生多種事件,如點擊按鈕、選擇菜單項會產生動作事件(ActionEvent),移動鼠標將發生鼠標事件(MouseEvent)等。為了實現事件處理,Java定義了大量的事件類,這些類封裝了事件對象。java.util.EventObject類是所有事件類的根類,該類定義了getSource()方法,它返回觸發事件的事件源對象。java.awt.AWTEvent是EventObject類的子類,同時又是所有組件AWT事件類的根類,該類中定義了getID()方法,它返回事件的類型。AWTEvent類的常用的子類定義在java.awt.event包中,表12-2列出了在哪些組件上可以產生哪些事件。表12-2常用事件及產生事件的組件事件類型事件名稱產生事件的組件ActionEvent動作事件當按下按鈕、雙擊列表項或選擇菜單項時產生該事件AdjustmentEvent調整事件操作滾動條時產生該事件ComponentEvent組件事件當組件被隱藏、移動、調整大小、變為可見時產生該事件ContainerEvent容器事件從容器中添加或刪除一個組件時產生該事件FocusEvent焦點事件當一個組件獲得或失去鍵盤焦點時產生該事件ItemEvent選項事件當復選框或列表項被單擊時,以及在做出選擇、或者選擇或取消一個可選菜單項時產生該事件KeyEvent鍵盤事件當從鍵盤接收輸入時產生該事件MouseEvent鼠標事件當拖動、移動、按下或釋放鼠標時,或當鼠標進入或退出一個組件時產生該事件MouseWheelEvent鼠標輪事件當滾動鼠標滾輪時產生該事件TextEvent文本事件當一個文本域的值或文本域改變時產生該事件WindowEvent窗口事件當窗口被激活、關閉、取消激活、圖標化、解除圖標化、打開或關閉時產生該事件12.3.3事件監聽器事件的處理必須由實現了相應的事件監聽器接口的類對象處理。Java為每類事件定義了相應的接口。事件類和接口都是在java.awt.event包中定義的。表12-3列出了常用的事件監聽器接口、接口中定義的方法以及所處理的事件。表12-3事件監聽器接口、方法及處理的事件監聽器接口接口中的方法所處理的事件ActionListeneractionPerformed(ActionEvente)ActionEventItemListeneritemStateChanged(ItemEvente)ItemEventMouseListenermouseClicked(MouseEvente)mouseEntered(MouseEvente)mouseExited(MouseEvente)mousePressed(MouseEvente)mouseReleased(MouseEvente)MouseEventMouseMotionListenermouseMoved(MouseEvente)mouseDragged(MouseEvente)MouseEventKeyListenerkeyPressed(KeyEvente)keyReleased(KeyEvente)keyTyped(KeyEvente)KeyEventCompomentListenercomponentMoved(ComponentEvente)componentHiden(ComponentEvente)componentResized(ComponentEvente)componentShown(ComponentEvente)ComponentEventWindowListenerwindowOpened(WindowEvente)windowClosing(WindowEvente)windowClosed(WindowEvente)windowActivated(WindowEvente)windowDeactivated(WindowEvente)windowIconified(WindowEvente)windowDeiconified(WindowEvente)WindowEventTextListenertextValueChanged(TextEvente)TextEvent大多數監聽器接口與事件類有一定的對應關系,如對于ActionEvent事件,對應的接口為ActionListener,對于WindowEvent事件,對應的接口為WindowListener。這里有一個例外,即MouseEvent對應兩個接口MouseListener和MouseMotionListener。接口中定義了一個或多個方法,這些方法都是抽象方法,必須由實現接口的類實現,Java程序就是通過這些方法實現對事件處理的。12.3.4事件處理的基本步驟完成事件處理的一般步驟為:(1)實現相應的監聽器接口:根據要處理的事件確定實現哪個監聽器接口。例如,要處理點擊按鈕事件,即ActionEvent事件,就需要實現ActionListener接口。(2)為組件注冊監聽器:每種組件都定義了可以觸發的事件類型,使用相應的方法為組件注冊監聽器。如果程序運行過程中,對某事件不需處理,也可以不注冊監聽器,甚至注冊了監聽器也可以注銷。注冊和注銷監聽器的一般方法如下:publicvoidaddXxxListener(XxxListenerel)//注冊監聽器publicvoidremoveXxxListener(Xxxlistenerel)//注銷監聽器只有為組件注冊了監聽器后,在程序運行時,當發生該事件時才能由監聽器對象處理,否則即使發生了相應的事件,事件也不會被處理。一個事件源可能發生多種事件,因此可以由多個事件監聽器處理;反過來一個監聽器對象也可以處理多個事件源的同一類型的事件,如上述程序兩個按鈕可以用一個監聽器對象處理。下面以一個例子說明使用事件代理模型處理事件的主要步驟。程序運行當單擊“確定”或“取消”按鈕時,在標簽中顯示相應信息。【程序12-6】ActionEventDemo.javaJava圖形界面允許多個組件注冊一個監聽器對象,一個組件對象也可以注冊多個監聽器對象。1.使用匿名內部類還可以使用匿名內部類為組件注冊監聽器,對上面的程序就可以使用匿名內部類實現,代碼如下:btn1.addActionListener(newActionListener(){//匿名內部類publicvoidactionPerformed(ActionEvent
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業排放控制與環境標準制定
- 工業旅游發展路徑研究
- 工業機器人散熱與節能的先進技術
- 工業污染排放的實時監控技術應用
- 工業機器人技術及產業應用分析
- 工業污染防治國際合作項目分析
- 工業自動化系統的編程與調試技術
- 工業節能與環保法規的協同推進
- 工業自動化與智能化轉型戰略
- 工業自動化與新材料技術的融合
- 小學信息技術五年級上冊第3課《流程圖描述算法》教學設計
- 市政工程計量表格樣表
- 部編版六年級道德與法治上冊期末復習課件
- 氫能源行業的投資機會分析
- 供電公司負責人講安全課
- 【物理】《滑輪》(教學設計)-2024-2025學年人教版(2024)初中物理八年級下冊
- 火車站高鐵站消防培訓
- 專項10:現代文閱讀 媒體文閱讀(練習)-【中職專用】2025年對口升學語文二輪專項突破(解析版)
- 降低患者跌倒的發生率
- 2024中華人民共和國學前教育法詳細解讀課件
- 湖北省武漢市2024年中考數學試卷(含答案)
評論
0/150
提交評論