Java程序設(shè)計(jì)教程課件 第7章 圖形用戶(hù)界面程序設(shè)計(jì)_第1頁(yè)
Java程序設(shè)計(jì)教程課件 第7章 圖形用戶(hù)界面程序設(shè)計(jì)_第2頁(yè)
Java程序設(shè)計(jì)教程課件 第7章 圖形用戶(hù)界面程序設(shè)計(jì)_第3頁(yè)
Java程序設(shè)計(jì)教程課件 第7章 圖形用戶(hù)界面程序設(shè)計(jì)_第4頁(yè)
Java程序設(shè)計(jì)教程課件 第7章 圖形用戶(hù)界面程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第7章

圖形用戶(hù)界面程序設(shè)計(jì)

教學(xué)導(dǎo)航教學(xué)目標(biāo)了解Swing實(shí)現(xiàn)多文檔界面應(yīng)用程序的組件熟悉Swing的常用容器類(lèi)組件、基本組件、對(duì)話框及相關(guān)方法熟悉容器中組件的合理布局方法熟練掌握在ApacheNetBeansIDE的可視化環(huán)境中設(shè)計(jì)窗口與添加組件的方法掌握事件監(jiān)聽(tīng)的實(shí)現(xiàn)方法學(xué)會(huì)創(chuàng)建JFrame窗口、在JFrame窗口中添加組件學(xué)會(huì)在JFrame窗體中創(chuàng)建并使用菜單、快捷菜單學(xué)會(huì)在JFrame窗體中創(chuàng)建并使用工具欄學(xué)會(huì)應(yīng)用JTable組件設(shè)計(jì)JavaGUI應(yīng)用程序

教學(xué)導(dǎo)航教學(xué)重點(diǎn)Swing的常用組件及其相關(guān)方法創(chuàng)建JFrame窗口、在JFrame窗口中添加組件容器中組件的合理布局方法事件監(jiān)聽(tīng)的實(shí)現(xiàn)方法在JFrame窗體中創(chuàng)建并使用菜單、快捷菜單在JFrame窗體中創(chuàng)建并使用工具欄在ApacheNetBeansIDE的可視化環(huán)境中設(shè)計(jì)窗口與添加組件

身臨其境Windows10自帶的計(jì)算器界面如圖7-1所示,該界面包含多個(gè)按鈕、1個(gè)標(biāo)簽等組件。QQ登錄界面如圖7-2所示,該界面包含圖片、標(biāo)簽、下拉列表框、密碼輸入框、復(fù)選框、登錄按鈕等組件。Windows照片查看器界面如圖7-3所示,該界面包括多個(gè)菜單、多個(gè)工具按鈕。圖7-1

Windows10自帶的計(jì)算器界面

圖7-2

QQ登錄界面圖7-3

Windows照片查看器界面

前導(dǎo)知識(shí)【知識(shí)7-1】比較Swing和AWT

抽象窗口工具箱(AbstractWindowToolkjt,AWT)和Swing分別是Java為開(kāi)發(fā)GUI提供的第一代和第二代技術(shù)。Swing不但用輕量級(jí)組件代替了AWT中的重量級(jí)組件,而且提供了比AWT更加豐富的組件,還增加了很多新的特性與功能。Swing是Java基礎(chǔ)類(lèi)庫(kù)(JavaFoundationClasses,JFC)的一個(gè)重要組成部分,它不僅提供了豐富的組件,還提供了獨(dú)立于運(yùn)行平臺(tái)的GUI架構(gòu),并且在不同的平臺(tái)上都能夠具有一致的顯示風(fēng)格。Swing組件是在AWT組件基礎(chǔ)上發(fā)展起來(lái)的新型GUI組件。Swing組件的名稱(chēng)都以字母“J”開(kāi)頭,很多組件的名稱(chēng)是在同類(lèi)AWT組件的名稱(chēng)前增加了一個(gè)字母“J”,如JButton和JPanel等。Swing組件位于javax.swing包中,AWT組件位于java.awt包中。Swing組件是AWT組件的Container類(lèi)的直接子類(lèi)或間接子類(lèi),Container類(lèi)是用來(lái)管理相關(guān)組件的類(lèi),所有Swing組件都是JComponent類(lèi)的子類(lèi)。Swing組件必須添加到容器組件中才可以在用戶(hù)界面中顯示。Swing組件都具有setEnable(booleanb)方法,當(dāng)組件對(duì)象調(diào)用該方法且參數(shù)值為true時(shí)組件被啟用,否則組件被禁用。

前導(dǎo)知識(shí)【知識(shí)7-2】認(rèn)知Swing組件的分類(lèi)

Swing組件從功能上可分為如下幾類(lèi)。(1)頂層容器包括JFrame、JWindow、JDialog和JApplet。頂層容器為其他組件的顯示與事件處理提供支持。(2)中間容器包括JPanel、JScrollPane、JSplitPane、JMenuBar、JToolBar。JPanel較常用,能夠通過(guò)布局來(lái)排列其內(nèi)部組件。JScrollPane與JPanel類(lèi)似,可以提供滾動(dòng)條。JSplitPane是一種分割面板,可以將組件分成上下或左右兩個(gè)部分。JMenuBar是一個(gè)菜單容器,用于建立菜單欄。JToolBar為按行或列排列的一組組件。(3)基本組件是實(shí)現(xiàn)人機(jī)交互的主要組件,如JButton、JTextField、JComboBox、JList、JMenu、JSlider等。(4)可編輯組件是給用戶(hù)顯示能被編輯格式化信息的組件,如JTextArea、JTable、JFileChooser、JColorChooser等。(5)不可編輯組件是給用戶(hù)顯示不可編輯信息的組件,如JLable、JProgressBar等。除了JPanel外,其他的Swing容器不允許把組件直接加入容器,JPanel及其子類(lèi)可以直接添加組件。其他容器添加組件的方式有如下兩種。(1)使用getContentPane()方法獲得內(nèi)容面板,并將組件加入內(nèi)容面板,示例代碼如下。jframe.getContentPane().add(jlabel);也可以將內(nèi)容面板添加到窗口容器中,示例代碼如下。jframe.add(chileComponent);(2)建立一個(gè)JPanel或JDesktopPane之類(lèi)的中間容器,把組件添加到中間容器中,并使用setContentPane()方法把中間容器設(shè)置為內(nèi)容面板,示例代碼如下。JPanelcontentPane=newJPanel();

jframe.setContentPane(contentPane);

前導(dǎo)知識(shí)【知識(shí)7-3】認(rèn)知Swing的常用容器類(lèi)組件及其相關(guān)方法Swing的常用容器類(lèi)組件包括JFrame、JWindow、JPanel、JScrollPane、JSplitPane和JToolBar這6種。(1)JFrame組件(Component)是JavaGUI最基本的組成部分,是一個(gè)可以用圖形化方式顯示在屏幕上并且能夠與用戶(hù)進(jìn)行交互的對(duì)象,如JButton、JLable等。但是組件不能獨(dú)立顯示,必須將組件放在一個(gè)容器中才能顯示出來(lái)。容器是用來(lái)組織其他圖形界面元素的基礎(chǔ)組件。容器內(nèi)部可以包含許多其他組件,也可以包含另一個(gè)容器。所有的容器類(lèi)都是Container類(lèi)的子類(lèi)。Java應(yīng)用程序一般以一個(gè)JFrame對(duì)象作為主窗口,JFrame屬于頂層容器組件,JFrame類(lèi)包含通用窗口的基本功能,如最小化窗口、移動(dòng)窗口、重新設(shè)定窗口大小等。JFrame作為頂層容器,不能被其他容器包含,但可以被其他容器創(chuàng)建并彈出成為獨(dú)立的容器。(2)JWindowJWindow可以構(gòu)造無(wú)邊框的窗口(3)JPanelJPanel組件屬于中間容器,用于將小型的輕量級(jí)組件組合在一起。(4)JScrollPaneJScrollPane組件是帶滾動(dòng)條的面板,除了具有滾動(dòng)條以外,該組件還可以設(shè)置表頭名稱(chēng)、邊角圖案與ScrollPane外框,相比于JPanel,JScrollPane具有更強(qiáng)的靈活性。(5)JSplitPaneJSplitPane組件一次可將兩個(gè)組件同時(shí)顯示在兩個(gè)顯示區(qū)中。如果想要同時(shí)在多個(gè)顯示區(qū)顯示組件,則必須同時(shí)使用多個(gè)JSplitPane組件。JSplitPane組件提供了兩個(gè)參數(shù)來(lái)設(shè)置水平分割(HORIZONTAL_SPLIT)和垂直分割(VERTICAL_SPLIT)。(6)JToolBarJToolBar是一個(gè)顯示一組動(dòng)作、命令或功能的組件,一般工具欄中的組件都是帶圖標(biāo)的按鈕,可以使用戶(hù)更加方便地選擇所需的功能。

前導(dǎo)知識(shí)【知識(shí)7-4】認(rèn)知Swing的基本組件及其相關(guān)方法Swing的基本組件包括標(biāo)簽(JLabel)、文本域(JTextField)、密碼文本框(JPasswordField)、文本域(JTextArea)、按鈕(JButton)、單選按鈕(JRadioButton)、復(fù)選框(JCheckBox)和組合框(JComboBox)這8種。(1)JLabelJLabel是其內(nèi)容只能瀏覽但不能修改的組件,可以用于顯示文字,也可以用于顯示圖標(biāo),一般為用戶(hù)提供相關(guān)的提示信息。(2)JTextFieldJTextField用于顯示或編輯單行文本,但不能顯示或編輯多行文本。(3)JPasswordFieldJPasswordField類(lèi)是JTextField類(lèi)的子類(lèi),可以使用JTextField類(lèi)的方法。該組件常用于輸入密碼,在JPasswordField組件中輸入的文字會(huì)被其他字符(如“*”)替代。(4)JTextAreaJTextArea組件用于顯示或編輯多行文本。(5)JButtonJButton是GUI應(yīng)用程序中非常重要的一種組件,當(dāng)用戶(hù)單擊按鈕時(shí),將會(huì)自動(dòng)執(zhí)行與該按鈕關(guān)聯(lián)的程序,從而實(shí)現(xiàn)預(yù)定的功能。(6)JRadioButtonJRadioButton類(lèi)和JCheckBox類(lèi)是JToggleButton的子類(lèi),JRadioButton類(lèi)可以實(shí)現(xiàn)“多選一”的操作,即在一組單選按鈕中選擇其中一個(gè)。它們可以使用AbstractButton抽象類(lèi)中的多個(gè)方法,如addItemListener()、setText()、isSelected()等。因?yàn)閱芜x按鈕是在一組按鈕中選擇一個(gè),所以必須將單選按鈕分組,即指明一個(gè)組中包含哪些單選按鈕,在IDE中可以通過(guò)屬性窗口的buttonGroup屬性將單選按鈕加入單選按鈕組。(7)JCheckBoxJCheckBox組件可以實(shí)現(xiàn)在一組在復(fù)選框中選擇多個(gè)復(fù)選框的操作。

前導(dǎo)知識(shí)【知識(shí)7-5】認(rèn)知Swing的對(duì)話框及其相關(guān)方法對(duì)話框是一種類(lèi)似窗口的容器,與一般窗口的區(qū)別在于它依賴(lài)于其他窗口(當(dāng)它所依賴(lài)的窗口消失或最小化時(shí),對(duì)話框也消失;窗口還原時(shí),對(duì)話框又會(huì)自動(dòng)恢復(fù))。對(duì)話框還具有模態(tài)特性。(1)JDialog對(duì)話框JDialog對(duì)話框是有邊框、有標(biāo)題的頂層容器。對(duì)話框分為模態(tài)對(duì)話框和非模態(tài)對(duì)話框。模態(tài)對(duì)話框只讓程序響應(yīng)對(duì)話框內(nèi)的事件,對(duì)對(duì)話框以外的事件程序不響應(yīng);非模態(tài)對(duì)話框可以讓程序響應(yīng)對(duì)話框以外的事件。(2)JOptionPane對(duì)話框使用JDialog組件來(lái)制作對(duì)話框時(shí),需要建立對(duì)話框中的每一個(gè)組件。有時(shí)候?qū)υ捒蛑皇秋@示一段文字,或一些簡(jiǎn)單選擇(是或否),這時(shí)利用JOptionPane組件更方便,并且可以達(dá)到和使用JDialog組件同樣的效果。利用javax.swing包中的JOptionPane類(lèi)提供的靜態(tài)方法可以創(chuàng)建各種類(lèi)型的簡(jiǎn)單對(duì)話框,包括Message對(duì)話框、Confirm對(duì)話框和input對(duì)話框,這些對(duì)話框還可以在建立時(shí)通過(guò)設(shè)置不同參數(shù)而產(chǎn)生不同的效果。

前導(dǎo)知識(shí)【知識(shí)7-6】認(rèn)知Swing實(shí)現(xiàn)多文檔界面應(yīng)用程序的組件多文檔界面(MultipleDocumentInterface,MDI)應(yīng)用程序只有一個(gè)父窗口,子窗口在父窗口內(nèi)顯示。在父窗口內(nèi)建立一個(gè)桌面面板(JDesktopPane)作為桌面,通過(guò)繼承JInternalFrame類(lèi)建立子窗口。子窗口可在父窗口內(nèi)打開(kāi)、關(guān)閉、最大化和最小化。(1)桌面面板桌面面板是一種特殊的層面板,用來(lái)建立虛擬桌面,它可以顯示并管理眾多內(nèi)部窗口的層次關(guān)系。桌面面板的構(gòu)造方法為JDesktopPane()。(2)內(nèi)部窗口內(nèi)部窗口(JInternalFrame)的使用與JFrame相似,可以設(shè)置最大化、最小化、關(guān)閉、添加菜單等功能。不同的是JInternalFrame不能單獨(dú)出現(xiàn),必須依附在上層組件上,一般加入JDesktopPane進(jìn)行管理。7.1創(chuàng)建JFrame窗口并添加組件7.2事件監(jiān)聽(tīng)與對(duì)話框使用7.4在JFrame窗體中創(chuàng)建并使用菜單學(xué)習(xí)要點(diǎn)7.3在JFrame窗體中創(chuàng)建并使用快捷菜單7.57.67.7在JFrame窗體中創(chuàng)建并使用工具欄在可視化設(shè)計(jì)環(huán)境中設(shè)計(jì)窗口并添加組件應(yīng)用JTable組件設(shè)計(jì)JavaGUI程序任務(wù)7-1-1

設(shè)計(jì)用戶(hù)登錄窗口【任務(wù)描述】

創(chuàng)建1個(gè)用戶(hù)登錄窗口,具體要求如下。設(shè)置窗口風(fēng)格為Windows風(fēng)格。設(shè)置窗口標(biāo)題為“用戶(hù)登錄”。設(shè)置窗口的寬度為300px、高度為150px。設(shè)置窗口圖標(biāo)為QQ1.gif。控制窗口位于屏幕中心位置??刂拼翱谝频阶钋啊TO(shè)置窗口可見(jiàn)。設(shè)置關(guān)閉行為:當(dāng)窗口關(guān)閉時(shí),隱藏并處理該窗口。任務(wù)7-1-2

在用戶(hù)登錄窗口中添加JLabel組件【任務(wù)描述】

創(chuàng)建1個(gè)用戶(hù)登錄窗口,創(chuàng)建1個(gè)標(biāo)簽對(duì)象,將標(biāo)簽添加到窗口容器中?!局R(shí)7-7】在JFrame窗體中添加組件在Swing中,JPanel組件及其子類(lèi)可以直接添加組件,在容器中添加組件有以下兩種方式。(1)使用getContentPane()方法獲取內(nèi)容面板,并將標(biāo)簽加入組件。在容器中添加組件的代碼如下。JFrameframe=newJFrame();ContainerobjContainer=frame.getContentPane()

;

//獲取內(nèi)容面板objContainer.add(組件對(duì)象)

;

//將標(biāo)簽添加到內(nèi)容面板中也可以寫(xiě)成如下形式。frame.getContentPane().add(組件對(duì)象)

;

(2)建立一個(gè)JPanel之類(lèi)的中間容器,把組件添加到中間容器中,并使用setContentPane()方法把該容器設(shè)置為內(nèi)容面板。示例代碼如下。JFrameframe=newJFrame()

;JPaneljp=newJPanel()

;jp.add(組件對(duì)象);frame.setContentPane(jp)

;

//把jp設(shè)置為內(nèi)容面板任務(wù)7-1-3

運(yùn)用手動(dòng)布局方式對(duì)用戶(hù)登錄窗口中的組件進(jìn)行布局【任務(wù)描述】

創(chuàng)建1個(gè)用戶(hù)登錄窗口,在該窗口容器中添加4個(gè)標(biāo)簽對(duì)象、1個(gè)文本字段組件、1個(gè)口令字段組件和2個(gè)按鈕組件,運(yùn)用手動(dòng)布局方式布局窗口中的組件并設(shè)置組件的大小?!局R(shí)7-8】對(duì)窗體中的組件進(jìn)行布局Java為了實(shí)現(xiàn)跨平臺(tái)的特性并且獲得動(dòng)態(tài)的布局效果,將容器內(nèi)所有組件安排給一個(gè)布局管理器管理,并將組件的排列順序、大小、位置等功能授權(quán)給對(duì)應(yīng)的布局管理器管理。不同的布局管理器使用不同的算法和策略。容器可以通過(guò)選擇不同的布局管理器來(lái)設(shè)置組件的布局方式。布局管理器主要包括FlowLayout、BorderLayout、GridLayout、CardLayout和GridBagLayout。另外,可以使用手動(dòng)布局方式布局組件。手動(dòng)布局方式直接定義了組件的位置和大小,即先將一個(gè)容器的布局設(shè)置為空布局(null),再使用setBounds(intx,inty,intwidth,intheight)方法設(shè)置組件在容器中的位置和大小。1.Java的布局方式(1)流式布局使用流式布局(FlowLayout)時(shí),組件從左上角開(kāi)始,按從左到右、從上到下的方式排列。這種布局方式在默認(rèn)情況下,組件居中,間距為5px,是內(nèi)容面板和Applet的默認(rèn)布局方式。(2)邊框布局使用邊框布局(BorderLayout)時(shí),組件被置于容器的東、南、西、北、中的位置。這種布局方式是JFrame、JWindow和JDialog等對(duì)象的默認(rèn)布局方式。任務(wù)7-1-3

運(yùn)用手動(dòng)布局方式對(duì)用戶(hù)登錄窗口中的組件進(jìn)行布局【知識(shí)7-8】對(duì)窗體中的組件進(jìn)行布局(3)網(wǎng)格布局使用網(wǎng)格布局(GridLayout)時(shí),將容器區(qū)域劃分為一個(gè)矩形網(wǎng)格,組件按行和列排列。當(dāng)所有的組件大小相同時(shí),可以使用網(wǎng)格布局。網(wǎng)格布局以行為基準(zhǔn),按行優(yōu)先順序排列,在組件數(shù)目較多時(shí)自動(dòng)擴(kuò)展列,在組件數(shù)目較少時(shí)自動(dòng)收縮列。網(wǎng)格布局的行數(shù)始終不變。(4)卡片布局使用卡片布局(CardLayout)時(shí),組件會(huì)像卡片一樣排列,多個(gè)組件擁有同一個(gè)顯示區(qū)域,但同一時(shí)刻只能顯示一個(gè)組件。(5)網(wǎng)格袋布局網(wǎng)格袋布局(GridBagLayout)與網(wǎng)格布局類(lèi)似,也在網(wǎng)格中定位組件,不同的是,網(wǎng)格袋組件不顯示規(guī)定網(wǎng)格中的行數(shù)和列數(shù),而是根據(jù)它布局的組件的約束條件確定行數(shù)和列數(shù),并且允許組件跨越多個(gè)網(wǎng)格單元。2.Java的空隙類(lèi)進(jìn)行組件布局時(shí),還可以使用空隙類(lèi)設(shè)置組件之間的間距,使組件顯示效果更好。(1)定義方形空隙Componentcomponent=Box.createRigidArea(size);(2)定義水平空隙Componentcomponent=Box.createHorizontalGlue(size);(3)定義垂直空隙Componentcomponent=Box.createVerticalStrut(size);7.1創(chuàng)建JFrame窗口并添加組件7.2事件監(jiān)聽(tīng)與對(duì)話框使用7.4在JFrame窗體中創(chuàng)建并使用菜單學(xué)習(xí)要點(diǎn)7.3在JFrame窗體中創(chuàng)建并使用快捷菜單7.57.67.7在JFrame窗體中創(chuàng)建并使用工具欄在可視化設(shè)計(jì)環(huán)境中設(shè)計(jì)窗口并添加組件應(yīng)用JTable組件設(shè)計(jì)JavaGUI程序任務(wù)7-1-3

運(yùn)用響應(yīng)動(dòng)作事件實(shí)現(xiàn)用戶(hù)登錄功能并使用對(duì)話框【任務(wù)描述】

參考程序Example7_3.java創(chuàng)建1個(gè)用戶(hù)登錄窗口,該窗體類(lèi)繼承自JFrame類(lèi),并實(shí)現(xiàn)ActionListener監(jiān)聽(tīng)接口。在窗體類(lèi)的構(gòu)造方法中注冊(cè)【取消】按鈕btnCancel的動(dòng)作事件監(jiān)聽(tīng)者為當(dāng)前對(duì)象。編寫(xiě)動(dòng)作事件處理方法actionPerformed()的程序代碼來(lái)響應(yīng)用戶(hù)的單擊操作,并在代碼中使用對(duì)話框輸出提示信息?!局R(shí)7-9】認(rèn)知事件監(jiān)聽(tīng)與響應(yīng)動(dòng)作事件Java處理事件響應(yīng)基本沿用AWT的事件類(lèi)和監(jiān)聽(tīng)接口,盡管Swing也定義了事件類(lèi)和監(jiān)聽(tīng)接口,但普遍使用的還是AWT的事件類(lèi)和監(jiān)聽(tīng)接口?;镜氖录幚硎褂胘ava.awt.event包中的類(lèi)實(shí)現(xiàn),同時(shí)javax.swing.event包中增加了一些新的事件類(lèi)和監(jiān)聽(tīng)接口。AWT事件類(lèi)都是從AWTEvent繼承來(lái)的,常用的事件有窗口事件(WindowEvent)、鼠標(biāo)事件(MouseEvent)、鍵盤(pán)事件(KeyEvent)、焦點(diǎn)事件(FocusEvent)、動(dòng)作事件(ActionEvent)、項(xiàng)目事件(ItemEvent)、文本事件(TextEvent)等。任務(wù)7-1-3

運(yùn)用響應(yīng)動(dòng)作事件實(shí)現(xiàn)用戶(hù)登錄功能并使用對(duì)話框【知識(shí)7-9】認(rèn)知事件監(jiān)聽(tīng)與響應(yīng)動(dòng)作事件事件監(jiān)聽(tīng)接口、適配器響應(yīng)方法事件源窗口事件WindowListener、WindowAdapterwindowOpened(WindowEvente)、windowActivated(WindowEvente)、windowClosing(WindowEvente)、windowClosed(WindowEvente)、windowDeactivated(WindowEvente)、windowDeiconified(WindowEvente)、windowIconified(WindowEvente)Window鼠標(biāo)事件MouseListener、MouseAdaptermouseClicked(MouseEvente)、mouseEntered(MouseEvente)、mouseExited(MouseEvente)、mousePressed(MouseEvente)、mouseReleased(MouseEvente)JComponentMouseMotionListenermouseDragged(MouseEvente)、mouseMoved(MouseEvente)JComponent鍵盤(pán)事件KeyListener、KeyAdapterkeyPressed(KeyEvente)、keyReleased(KeyEvente)、keyTyped(keyEvente)JComponent焦點(diǎn)事件FocusListener、FocusAdapterfocusGained(FocusEvente)、focusLost(FocusEvente)JComponent動(dòng)作事件ActionListeneractionPerformed(ActionEvente)AbstractButton、JComboBox、JTextField、Timer項(xiàng)目事件ItemListenerItemStateChanged(ItemEvente)AbstractButton、JComboBox文本事件TextListenertextValueChanged(TextEvente)JTextField表7-4

事件對(duì)應(yīng)的監(jiān)聽(tīng)接口、適配器、響應(yīng)方法和事件源任務(wù)7-1-3

運(yùn)用響應(yīng)動(dòng)作事件實(shí)現(xiàn)用戶(hù)登錄功能并使用對(duì)話框【知識(shí)7-9】認(rèn)知事件監(jiān)聽(tīng)與響應(yīng)動(dòng)作事件1.動(dòng)作事件圖形界面程序要實(shí)現(xiàn)交互功能,就必須不斷監(jiān)聽(tīng)單擊鼠標(biāo)和敲擊鍵盤(pán)等事件。只有這樣,應(yīng)用程序才能對(duì)發(fā)生的事件做出響應(yīng)。單擊按鈕或在文本框中按【Enter】鍵,都會(huì)發(fā)生動(dòng)作事件。Java處理事件涉及幾個(gè)重要的概念:事件源、監(jiān)聽(tīng)者、事件接口。(1)事件源能夠產(chǎn)生事件的對(duì)象稱(chēng)為事件源,如按鈕、文本框、菜單等,鼠標(biāo)或鍵盤(pán)在事件源上操作將產(chǎn)生事件。不同的事件源會(huì)產(chǎn)生不同的事件,例如,單擊按鈕將產(chǎn)生動(dòng)作事件,打開(kāi)窗口將產(chǎn)生窗口事件。(2)監(jiān)聽(tīng)者實(shí)現(xiàn)事件響應(yīng)的關(guān)鍵是一旦產(chǎn)生事件,監(jiān)聽(tīng)者必須自動(dòng)執(zhí)行響應(yīng)程序。監(jiān)聽(tīng)者是指對(duì)事件進(jìn)行監(jiān)聽(tīng),以便對(duì)產(chǎn)生的事件進(jìn)行處理的對(duì)象。事件源通過(guò)調(diào)用相應(yīng)的方法將某個(gè)對(duì)象注冊(cè)為監(jiān)聽(tīng)者。每個(gè)事件源都有注冊(cè)監(jiān)聽(tīng)者的方法,例如,通過(guò)調(diào)用如下方法為按鈕類(lèi)JButton注冊(cè)動(dòng)作事件監(jiān)聽(tīng)者:按鈕變量名.addActionListener(監(jiān)聽(tīng)者);。如果動(dòng)作事件監(jiān)聽(tīng)者是當(dāng)前對(duì)象,則“監(jiān)聽(tīng)者”為“this”,即代碼形式為變量名.addActionListener(this);。這樣,一旦單擊按鈕,就會(huì)產(chǎn)生一個(gè)動(dòng)作事件,如果按鈕注冊(cè)了監(jiān)聽(tīng)者,則事件對(duì)象將傳送到監(jiān)聽(tīng)者的actionPerformed()方法,并且監(jiān)聽(tīng)者會(huì)自動(dòng)執(zhí)行這個(gè)方法。(3)事件接口事件接口規(guī)定了監(jiān)聽(tīng)者需要實(shí)現(xiàn)的用于處理事件的方法。如果一個(gè)類(lèi)的對(duì)象能作為監(jiān)聽(tīng)者,那么該類(lèi)必須實(shí)現(xiàn)相應(yīng)的事件接口,即必須在類(lèi)體中給出該接口中所有方法的方法體。動(dòng)作事件的接口為ActionListener,該接口只有一個(gè)方法:publicvoidactionPerformed(ActionEvente)。該方法就是響應(yīng)單擊按鈕事件的方法。因?yàn)榻涌诓荒苤苯觿?chuàng)建實(shí)例對(duì)象,所以最終負(fù)責(zé)監(jiān)聽(tīng)事件的是實(shí)現(xiàn)該接口的類(lèi)的對(duì)象。與實(shí)現(xiàn)其他接口一樣,實(shí)現(xiàn)監(jiān)聽(tīng)接口必須重寫(xiě)接口中的抽象方法。重寫(xiě)的方法體就是事件響應(yīng)程序,即事件產(chǎn)生后自動(dòng)運(yùn)行的程序。任務(wù)7-1-3

運(yùn)用響應(yīng)動(dòng)作事件實(shí)現(xiàn)用戶(hù)登錄功能并使用對(duì)話框【知識(shí)7-9】認(rèn)知事件監(jiān)聽(tīng)與響應(yīng)動(dòng)作事件2.鼠標(biāo)事件鼠標(biāo)動(dòng)作引起的事件稱(chēng)為鼠標(biāo)事件。鼠標(biāo)事件的事件源一般為容器。當(dāng)鼠標(biāo)按下、釋放、單擊時(shí)會(huì)引發(fā)鼠標(biāo)事件(對(duì)應(yīng)MouseEvent類(lèi)),MouseEvent類(lèi)存于java.awt.event包中??梢酝ㄟ^(guò)實(shí)現(xiàn)java.awt.event包中的MouseListener接口和MouseMotionListener接口處理鼠標(biāo)事件。3.事件適配器Java提供了鼠標(biāo)適配器(MouseAdapter)類(lèi)和鼠標(biāo)移動(dòng)適配器(MouseMotionAdapter)類(lèi)來(lái)處理鼠標(biāo)事件。MouseAdapter類(lèi)實(shí)現(xiàn)了MouseListener接口;MouseMotionAdapter類(lèi)實(shí)現(xiàn)了MouseMotionListener接口,這些類(lèi)稱(chēng)為適配器(Adapter)類(lèi)。適配器類(lèi)重寫(xiě)了接口中的所有方法,但方法體都為空,這樣通過(guò)繼承適配器類(lèi)實(shí)現(xiàn)事件響應(yīng)時(shí)就不必實(shí)現(xiàn)接口中的所有方法了,只需重寫(xiě)需要的方法。事件適配器為人們提供了一種簡(jiǎn)單的實(shí)現(xiàn)監(jiān)聽(tīng)的手段,可以適當(dāng)減少程序代碼的編寫(xiě)量。7.1創(chuàng)建JFrame窗口并添加組件7.2事件監(jiān)聽(tīng)與對(duì)話框使用7.4在JFrame窗體中創(chuàng)建并使用菜單學(xué)習(xí)要點(diǎn)7.3在JFrame窗體中創(chuàng)建并使用快捷菜單7.57.67.7在JFrame窗體中創(chuàng)建并使用工具欄在可視化設(shè)計(jì)環(huán)境中設(shè)計(jì)窗口并添加組件應(yīng)用JTable組件設(shè)計(jì)JavaGUI程序任務(wù)7-2-1

創(chuàng)建記事本主窗口【任務(wù)描述】

(1)創(chuàng)建一個(gè)450px×300px的JFrame窗口【我的記事本】。(2)在該窗口中添加一個(gè)10行10列的JTextArea文本域,用來(lái)顯示多行信息。(3)創(chuàng)建一個(gè)JScrollPane組件,將JTextArea文本域作為其顯示組件。(4)向JFrame窗口【我的記事本】中添加JScrollPane組件。任務(wù)7-2-2

創(chuàng)建記事本主窗口并添加菜單【任務(wù)描述】

(1)創(chuàng)建1個(gè)【我的記事本】窗口。(2)在【我的記事本】窗口中添加1個(gè)菜單欄,在菜單欄容器中添加4個(gè)菜單:【文件】【編輯】【格式】和【幫助】。(3)在【文件】菜單中添加【新建】【打開(kāi)】【另存為】【退出】4個(gè)菜單項(xiàng)和1根分隔線,在【編輯】菜單中添加【復(fù)制】【剪切】【粘貼】【全選】【清除】5個(gè)菜單項(xiàng)和1根分隔線,在【格式】菜單中添加1個(gè)復(fù)選框菜單項(xiàng)【自動(dòng)換行】,在【幫助】菜單中添加1個(gè)菜單項(xiàng)【幫助】。(4)設(shè)置各個(gè)菜單和菜單項(xiàng)的熱鍵。(5)設(shè)置各個(gè)菜單項(xiàng)的快捷鍵。(6)為【退出】菜單項(xiàng)編寫(xiě)事件處理程序,實(shí)現(xiàn)退出功能。任務(wù)7-2-2

創(chuàng)建記事本主窗口并添加菜單【知識(shí)7-10】在JFrame窗體中創(chuàng)建并使用菜單菜單組件可以使窗口顯示菜單項(xiàng)。Swing提供了3個(gè)層次的菜單類(lèi),第1層的菜單欄JMenuBar是存放菜單的容器;第2層為菜單JMenu,可以直接添加到JMenuBar中創(chuàng)建頂層菜單,也可以作為其他菜單的子菜單;第3層為菜單項(xiàng)JMenuItem,其中JCheckBoxMenuItem為帶復(fù)選框的菜單項(xiàng),JRadioButtonMenuItem為帶單選按鈕的菜單項(xiàng)。創(chuàng)建菜單時(shí),首先要使用JMenuBar建立一個(gè)菜單欄,然后使用JMenu建立菜單,并使用JMenuItem為每個(gè)菜單建立菜單項(xiàng)。(1)菜單欄菜單欄(JMenuBar)是菜單的容器,其構(gòu)造方法為JMenuBar()。(2)菜單菜單(JMenu)是用來(lái)存放和整合菜單項(xiàng)的組件,它可以是單一層次的結(jié)構(gòu),也可以是一個(gè)層次化的結(jié)構(gòu)。(3)菜單項(xiàng)JMenuItem類(lèi)繼承自AbstractButton類(lèi),因此JMenuItem對(duì)象具有許多AbstractButton類(lèi)的特性,也可以說(shuō)JMenuItem是一種特殊的按鈕。同時(shí),可以在JMenuItem中添加圖標(biāo),當(dāng)選擇某一個(gè)菜單項(xiàng)時(shí)就如同按下按鈕一樣,會(huì)觸發(fā)動(dòng)作事件。(4)復(fù)選框菜單項(xiàng)JCheckBoxMenuItem類(lèi)用于建立一個(gè)復(fù)選框菜單項(xiàng)(JCheckBoxMenuItem)。(5)單選按鈕菜單項(xiàng)JRadioButtonMenuItem類(lèi)用于建立一個(gè)單選按鈕菜單項(xiàng)(JRadioButtonMenuItem)。7.1創(chuàng)建JFrame窗口并添加組件7.2事件監(jiān)聽(tīng)與對(duì)話框使用7.4在JFrame窗體中創(chuàng)建并使用菜單學(xué)習(xí)要點(diǎn)7.3在JFrame窗體中創(chuàng)建并使用快捷菜單7.57.67.7在JFrame窗體中創(chuàng)建并使用工具欄在可視化設(shè)計(jì)環(huán)境中設(shè)計(jì)窗口并添加組件應(yīng)用JTable組件設(shè)計(jì)JavaGUI程序任務(wù)7-2-3

為記事本窗口添加快捷菜單

【任務(wù)描述】

(1)創(chuàng)建1個(gè)【我的記事本】窗口。(2)在【我的記事本】窗口中添加1個(gè)快捷菜單欄,在快捷菜單欄容器中添加1個(gè)菜單【文件】、3個(gè)單選按鈕菜單項(xiàng)【復(fù)制】【剪切】【粘貼】、2根分隔線和1個(gè)菜單項(xiàng)【退出】,【文件】菜單中包含3個(gè)菜單項(xiàng)——【新建】【打開(kāi)】【另存為】。(3)設(shè)置菜單項(xiàng)的快捷鍵。(4)為JFrame窗口的文本域添加鼠標(biāo)事件監(jiān)聽(tīng)器,實(shí)現(xiàn)右擊文本域后彈出快捷菜單的功能。(5)為【退出】菜單項(xiàng)編寫(xiě)事件處理程序,實(shí)現(xiàn)退出功能。任務(wù)7-2-3

為記事本窗口添加快捷菜單【知識(shí)7-11】在JFrame窗體中創(chuàng)建與使用快捷菜單快捷菜單(JPopupMenu)是一種特殊的菜單,其性質(zhì)與菜單基本一致,但是JPopupMenu并不固定在窗口中的固定位置,而是由鼠標(biāo)和系統(tǒng)決定其位置。JPopupMenu的構(gòu)造方法如下。①JPopupMenu()。

②JPopupMenu(Stringtext)。

其中,參數(shù)text用于指定彈出快捷菜單的文本內(nèi)容。彈出快捷菜單一般通過(guò)鼠標(biāo)事件實(shí)現(xiàn),示例代碼如下。publicvoidmouseReleased(MouseEvente){if(e.isPopupTrigger()){popupMenu.show(e.getComponent(),e.getX(),e.getY());}}7.1創(chuàng)建JFrame窗口并添加組件7.2事件監(jiān)聽(tīng)與對(duì)話框使用7.4在JFrame窗體中創(chuàng)建并使用菜單學(xué)習(xí)要點(diǎn)7.3在JFrame窗體中創(chuàng)建并使用快捷菜單7.57.67.7在JFrame窗體中創(chuàng)建并使用工具欄在可視化設(shè)計(jì)環(huán)境中設(shè)計(jì)窗口并添加組件應(yīng)用JTable組件設(shè)計(jì)JavaGUI程序任務(wù)7-2-4

為記事本窗體添加工具欄

【任務(wù)描述】

(1)創(chuàng)建1個(gè)【我的記事本】窗口。(2)在【我的記事本】窗口中添加1個(gè)工具欄,在工具欄中添加【新建文件】【打開(kāi)文件】【保存文件】【復(fù)制文件】【剪切文件】【粘貼文件】和【退出】7個(gè)按鈕、2根分隔線。要求鼠標(biāo)指針移動(dòng)到按鈕上時(shí)出現(xiàn)邊框。(3)為工具欄中的【新建文件】和【退出】按鈕編寫(xiě)事件處理程序。任務(wù)7-2-4

為記事本窗體添加工具欄

【知識(shí)7-12】在JFrame窗體中創(chuàng)建與使用工具欄使用JToolBar類(lèi)創(chuàng)建一個(gè)工具欄對(duì)象,然后使用add()方法將按鈕添加到工具欄中。JToolBar類(lèi)的構(gòu)造方法如下。①JToolBar()。

②JToolBar(Stringtext)。

③JToolBar(intorientation)。

④JToolBar(Stringtext,intorientation)。

其中,參數(shù)text用于設(shè)置工具欄中按鈕的文本內(nèi)容;參數(shù)orientation用于設(shè)置工具欄中按鈕的位置。JToolBar類(lèi)的常用方法如下。①voidsetFloatable(booleanb):設(shè)置工具欄是否可以浮動(dòng)。②voidsetRollover(booleanrollover):鼠標(biāo)指針移動(dòng)到按鈕上時(shí)是否出現(xiàn)邊框。③voidsetOrientation(into):設(shè)置工具欄方向。④voidsetToolTipText():設(shè)置按鈕提示文字。⑤voidaddSeparator():添加分隔線。7.1創(chuàng)建JFrame窗口并添加組件7.2事件監(jiān)聽(tīng)與對(duì)話框使用7.4在JFrame窗體中創(chuàng)建并使用菜單學(xué)習(xí)要點(diǎn)7.3在JFrame窗體中創(chuàng)建并使用快捷菜單7.57.67.7在JFrame窗體中創(chuàng)建并使用工具欄在可視化設(shè)計(jì)環(huán)境中設(shè)計(jì)窗口并添加組件應(yīng)用JTable組件設(shè)計(jì)JavaGUI程序任務(wù)7-3

可視化設(shè)計(jì)用戶(hù)登錄程序【任務(wù)描述】

在ApacheNetBeansIDE可視化設(shè)計(jì)環(huán)境中創(chuàng)建圖7-19所示的【用戶(hù)登錄】窗口,在“用戶(hù)名”文本框中輸入正確的用戶(hù)名,在“密碼”文本框中輸入正確的密碼,單擊【登錄】按鈕,彈出“成功登錄系統(tǒng)”的提示信息對(duì)話框,否則彈出“用戶(hù)名有誤”或者“密碼不正確”的提示信息對(duì)話框。單擊【取消】按鈕,會(huì)彈出一個(gè)供用戶(hù)進(jìn)行選擇的對(duì)話框。任務(wù)7-3

可視化設(shè)計(jì)用戶(hù)登錄程序【知識(shí)7-13】創(chuàng)建與使用Java中的包1.初識(shí)包利用面向?qū)ο蟪绦蛟O(shè)計(jì)技術(shù)開(kāi)發(fā)軟件時(shí),程序員需要定義許多類(lèi)并使其共同工作,有些類(lèi)可能要反復(fù)被使用。為了使這些類(lèi)易于查找和使用、避免命名沖突以及限定類(lèi)的訪問(wèn)權(quán)限,程序員可以將一組功能相關(guān)的類(lèi)與接口打包成一個(gè)包(Package)。Java通過(guò)包可以方便地管理程序的類(lèi)和接口。包是類(lèi)和接口的集合,或者說(shuō)包是類(lèi)和接口的容器,它將一組類(lèi)或接口集中到一起。在文件系統(tǒng)中,包被轉(zhuǎn)換成一個(gè)文件夾。包中還可以有包,形成一種層次結(jié)構(gòu)。包的優(yōu)點(diǎn)主要體現(xiàn)在以下幾個(gè)方面。(1)程序員可以很容易地確定包中的類(lèi)是相關(guān)的,并且根據(jù)所需要的功能找到對(duì)應(yīng)的類(lèi)。(2)包可以防止類(lèi)命名混亂。每個(gè)包都創(chuàng)建了一個(gè)獨(dú)立的命名空間,因此位于不同包中的相同類(lèi)名不會(huì)產(chǎn)生沖突。(3)包可以控制內(nèi)部類(lèi)、接口、成員變量和方法的可見(jiàn)性。在包中,除了訪問(wèn)權(quán)限聲明為private的成員變量和方法之外,類(lèi)中所有的成員變量和方法還可以被同一包中的其他類(lèi)和方法訪問(wèn)。2.使用package創(chuàng)建包

創(chuàng)建包就是將類(lèi)與接口放入指定的包中,創(chuàng)建包可通過(guò)在類(lèi)和接口的源文件中使用package相應(yīng)語(yǔ)句實(shí)現(xiàn)。聲明包的語(yǔ)句格式如下。package包名稱(chēng)1[.包名稱(chēng)2……];其中,符號(hào)“.”代表分隔符;“包名稱(chēng)1”為最外層的包;“包名稱(chēng)2”為內(nèi)層的包。示例代碼如下。packagepackage7_3;在ApacheNetBeansIDE中,可以快捷創(chuàng)建包。任務(wù)7-3

可視化設(shè)計(jì)用戶(hù)登錄程序【知識(shí)7-13】創(chuàng)建與使用Java中的包3.Java中常用的包Java提供了以下幾個(gè)常用的包。(1)java.lang:該包包含Java編程所需要的基礎(chǔ)類(lèi)和接口,如Object類(lèi)、Math類(lèi)、String類(lèi)、StringBuffer類(lèi)、Thread類(lèi)、Throwable類(lèi)和Runnable接口等。這個(gè)包是唯一

一個(gè)可以不用導(dǎo)入就可以使用的包。(2)java.io:該包包含標(biāo)準(zhǔn)I/O類(lèi),如文件操作等。(3)java.nio:為了完善io包的功能,提高io包性能而創(chuàng)建的一個(gè)新包。(4)java.util:該包包含豐富的常用工具類(lèi),包括自成體系的集合框架、事件模型、日期時(shí)間、國(guó)際化支持工具等許多有益的工具,如Date類(lèi)、Vector類(lèi)等。(5):該包包含實(shí)現(xiàn)網(wǎng)絡(luò)功能的類(lèi),如URL、URLConnection等。(6)java.sql:該包包含訪問(wèn)數(shù)據(jù)庫(kù)的類(lèi)和接口,如Connection、Statement、ResultSet等。(7)java.awt:該包包含所有創(chuàng)建用戶(hù)界面(UserInterface,UI)、繪圖及圖像處理的類(lèi),其部分功能正在被java.swing取代。(8)java.awt.event:該包包含事件處理的類(lèi)。(9)java.applet:該包包含創(chuàng)建Applet以及Applet與其運(yùn)行上下文環(huán)境進(jìn)行通信所需要的類(lèi)。(10)javax.servlet:該包包含JSP、Servlet等使用到的類(lèi)。任務(wù)7-3

可視化設(shè)計(jì)用戶(hù)登錄程序【知識(shí)7-13】創(chuàng)建與使用Java中的包4.使用import導(dǎo)入包中的類(lèi)將類(lèi)組織成包是為了更好地利用包中的類(lèi)。通常一個(gè)類(lèi)只能直接引用與它在同一個(gè)包中的類(lèi)。如果要使用其他包中的類(lèi),則可以在類(lèi)名前面加上完整的包名,即使用“包名稱(chēng).類(lèi)名”的形式,但這種方式有些煩瑣,一般只有兩個(gè)包中含有同名的類(lèi)時(shí),為了對(duì)兩個(gè)同名類(lèi)加以區(qū)分時(shí)才使用。更簡(jiǎn)便的方法是使用import語(yǔ)句

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論