![Java程序設(shè)計(jì):第9章 GUI組件和用戶界面設(shè)計(jì) _第1頁(yè)](http://file4.renrendoc.com/view/9e233798921cfe6324b087f0b916e7bf/9e233798921cfe6324b087f0b916e7bf1.gif)
![Java程序設(shè)計(jì):第9章 GUI組件和用戶界面設(shè)計(jì) _第2頁(yè)](http://file4.renrendoc.com/view/9e233798921cfe6324b087f0b916e7bf/9e233798921cfe6324b087f0b916e7bf2.gif)
![Java程序設(shè)計(jì):第9章 GUI組件和用戶界面設(shè)計(jì) _第3頁(yè)](http://file4.renrendoc.com/view/9e233798921cfe6324b087f0b916e7bf/9e233798921cfe6324b087f0b916e7bf3.gif)
![Java程序設(shè)計(jì):第9章 GUI組件和用戶界面設(shè)計(jì) _第4頁(yè)](http://file4.renrendoc.com/view/9e233798921cfe6324b087f0b916e7bf/9e233798921cfe6324b087f0b916e7bf4.gif)
![Java程序設(shè)計(jì):第9章 GUI組件和用戶界面設(shè)計(jì) _第5頁(yè)](http://file4.renrendoc.com/view/9e233798921cfe6324b087f0b916e7bf/9e233798921cfe6324b087f0b916e7bf5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java程序設(shè)計(jì)第9章 GUI組件和用戶界面設(shè)計(jì)1教學(xué)目標(biāo)9.1 AWT和Swing組件概述9.2 事件處理模型9.3 命令按鈕JButton9.4 標(biāo)簽、單行文本框、多行文本域與滾動(dòng)條面9.5 復(fù)選框按鈕JCheckBox和單選按鈕JRadioButton9.6 組合框JComboBox9.7 列表JList 9.8 布局管理器2教學(xué)目標(biāo)(續(xù))9.9 面板JPanel和窗口9.10 鼠標(biāo)事件處理9.11 適配器類(lèi)9.12 鍵盤(pán)事件處理9.13 菜單9.13.1 主菜單9.13.2 彈出式菜單9.14 選項(xiàng)卡面板JTabbedPane39.1 Swing和AWT組件概述 圖形用戶界面GUI(G
2、raphical User Interfaces),給用戶提供了一個(gè)交互式的直觀圖形化操作界面。提供了程序的外觀和感覺(jué)每個(gè)Java程序利用GUI圖形用戶界面接受用戶的輸入,向用戶輸出程序運(yùn)行的結(jié)果。menu barbuttoncombo boxmenusscroll bars49.1 AWT和Swing組件概述Java語(yǔ)言中,為了方便圖形用戶界面的開(kāi)發(fā),設(shè)計(jì)了專(zhuān)門(mén)的類(lèi)庫(kù)來(lái)生成各種標(biāo)準(zhǔn)圖形界面元素和處理圖形界面的各種事件。用來(lái)生成圖形用戶界面的類(lèi)庫(kù)在以下2個(gè)包中:java.awt包。AWT(abstract window toolkit,抽象窗口工具集) javax.swing包59.1 AWT
3、和Swing組件概述Java語(yǔ)言中,為了方便圖形用戶界面的開(kāi)發(fā),設(shè)計(jì)了專(zhuān)門(mén)的類(lèi)庫(kù)來(lái)生成各種標(biāo)準(zhǔn)圖形界面元素和處理圖形界面的各種事件。用來(lái)生成圖形用戶界面的類(lèi)庫(kù)在以下2個(gè)包中:java.awt包。AWT(abstract window toolkit,抽象窗口工具集) javax.swing包6 1、 AWT組件介紹java.awt包提供了基本的Java程序的GUI設(shè)計(jì)工具,包中的主要類(lèi)或接口之間的繼承關(guān)系: ObjectLayoutManagerComponetLabelWindowButtonCanvasCheckboxContainerPanelDialogAppletFrame71、 A
4、WT組件介紹(1)組件Component 組件是一個(gè)以圖形化的方式顯示在屏幕上并能與用戶進(jìn)行交互的對(duì)象,例如Button、Label,組件通常被放在容器中。Component類(lèi)是抽象類(lèi),定義了所有組件所具有的通用特性和行為,并派生出其他所有的組件。Compoment類(lèi)提供的功能:基本的繪畫(huà)支持。方法repaint()、paint()、update()等用來(lái)在屏幕上繪制組件.外形控制。包括字體、顏色等。相應(yīng)的方法有:getFont()、setFont()、setBackground()、SetForeground()等大小和位置控制。方法有:setSize()、setLocation()等。圖像
5、處理。類(lèi)Component實(shí)現(xiàn)了接口ImageObserver,其中的方法imageUpdate()用來(lái)進(jìn)行圖像跟蹤。組件的狀態(tài)控制。方法有: setEnable()控制組件是否接收用戶的輸入,isEnable(),isVisible()、isValid()返回組件的狀態(tài)。 81、 AWT組件介紹 (2)容器Container容器(Container)也是一個(gè)類(lèi),實(shí)際上是Component的子類(lèi),因此容器本身也是一個(gè)組件,具有組件的所有性質(zhì),但是它的主要功能是容納其它組件和容器。每個(gè)容器add()方法向容器添加某個(gè)組件,remove()方法從容器中刪除某個(gè)組件。每個(gè)容器都與一個(gè)布局管理器相聯(lián),
6、以確定容器內(nèi)組件的布局方式。容器通過(guò)方法setLayout()設(shè)置某種布局。 91、 AWT組件介紹(3)布局管理器LayoutManager 容器里組件的位置和大小是由布局管理器來(lái)決定的。布局管理器類(lèi)都實(shí)現(xiàn)了接LayoutManager。Java系統(tǒng)提供的標(biāo)準(zhǔn)布局管理器類(lèi):FlowLayoutBorderLayoutGridLayoutCardLayoutBoxLayoutGridBagLayout 102. Swing介紹Swing 組件在javax.swing包中。其特點(diǎn): (1) Swing組件是用100純Java代碼實(shí)現(xiàn)的輕量級(jí)(light-weight)組件.Swing組件是純Ja
7、va實(shí)現(xiàn)的輕量級(jí)組件,沒(méi)有本地代碼,不依賴(lài)操作系統(tǒng)的支持,這是與AWT組件的最大區(qū)別。因此Swing組件的外觀和功能不依賴(lài)于任何由宿主平臺(tái)的窗口系統(tǒng)提供的代碼,程序員可以為它設(shè)置在不同操作系統(tǒng)下統(tǒng)一的外觀風(fēng)格,當(dāng)然也可以隨操作系統(tǒng)的不同而變。并且Swing組件能夠提供本地窗口系統(tǒng)不支持的其他特性。112. Swing介紹(2) Swing組件的多樣化 javax.swing包中的Swing組件以“J”開(kāi)頭,除了有與AWT類(lèi)似的按鈕(JButton)、標(biāo)簽(JLabel)、復(fù)選框(JCheckBox)、菜單(JMenu)等基本組件外,增加了一個(gè)豐富的高層組件集合,如表格(JTable)、樹(shù)(JT
8、ree)。Swing組件都是AWT的Container類(lèi)的直接子類(lèi)和間接子類(lèi)。大多數(shù)Swing組件從JComponent類(lèi)(除了頂層容器以外的所有組件的基類(lèi))繼承JComponent是一個(gè)抽象類(lèi),它定義所有子類(lèi)組件的一般方法,如:使用setBorder()方法:設(shè)置組件外圍的邊框;使用setTooltipText()方法:為組件設(shè)置對(duì)用戶有幫助的提示信息。 12Swing 組件的繼承的超類(lèi)132. Swing介紹(3)可插入的外觀感覺(jué)在AWT組件中,由于控制組件外觀的對(duì)等類(lèi)與具體平臺(tái)相關(guān),使得AWT組件總是具有與本機(jī)操作系統(tǒng)相關(guān)的外觀。Swing可以使Java程序在一個(gè)平臺(tái)上運(yùn)行時(shí)能夠有不同的
9、外觀,可以根據(jù)不同用戶的習(xí)慣確定。143. Swing組件的分類(lèi)從功能上分:(1)頂層容器:JFrame(框架窗口),JApplet(小應(yīng)用程序,Applet 的子類(lèi)), JDialog(對(duì)話框), JWindow(無(wú)邊框的窗口)共4個(gè)(2)普通容器:JPanel(面板), JScrollPane(滾動(dòng)條面板), JSplitPane(分割面板), JToolBar(工具欄)(3)特殊容器:在GUI上起特殊作用的中間層.JInternalFrame(內(nèi)部窗體), JLayeredPane(分層窗格), JRootPane(根窗格).(4)基本控件:實(shí)現(xiàn)人際交互的組件,如JButton(按鈕),
10、 JComboBox(組合框),列表JList(列表),JMenu(菜單),JSlider(滑塊),JTextField(單行文本框)(5)向用戶顯示不可編輯信息的組件.例如JLabel(標(biāo)簽), JProgressBar(進(jìn)度條), ToolTip(提示框)(6)向用戶顯示能被編輯的格式化信息的組件.如JColorChooser(顏色選擇對(duì)話框 ), JFileChooser (文件選擇對(duì)話框 ),JTable(表格),JTextArea(多行文本域 )153. Swing組件的分類(lèi)Swing組件歸為頂層容器、中間層容器、基本組件三個(gè)層次。1.頂層容器Swing提供三個(gè)頂層容器的類(lèi),分別是J
11、Frame、JDialog和JApplet,因?yàn)轫攲尤萜鞅仨毢筒僮飨到y(tǒng)打交道,所以,它們是重量級(jí)組件。從繼承結(jié)構(gòu)上來(lái)看,它們分別是原來(lái)AWT組件的Frame、Dialog、Applet類(lèi)繼承而來(lái)。每個(gè)使用Swing組件的Java程序都必須至少要有一個(gè)頂層容器,別的組件都必須放在這個(gè)頂層容器上才能顯現(xiàn)出來(lái)。163. Swing組件的分類(lèi)Swing組件歸為頂層容器、中間層容器、基本組件三個(gè)層次。2.中間層容器中間層容器存在的目的僅僅是為了容納別的組件,它分為兩類(lèi),即一般用途的和特殊用途的。一般用途的有JPanel(面板)、 JScrollPane(滾動(dòng)條面板)、 JSplitPane(分割面板)、
12、 JTabbedPane(選項(xiàng)卡)、 JToolBar(工具欄)特殊用途的有JInternalFrame(內(nèi)部窗體), JLayeredPane(分層窗格), JRootPane(根窗格)173. Swing組件的分類(lèi)Swing組件歸為頂層容器、中間層容器、基本組件三個(gè)層次。3.基本組件基本組件通常是在圖形用戶界面中和用戶進(jìn)行交換的組件。它的基本功能就是和用戶交換信息,而不像前兩種組件那樣是用來(lái)容納別的組件的。根據(jù)功能的不同,它可被分為三類(lèi):向用戶顯示不可編輯信息的組件JLabel(標(biāo)簽), JProgressBar(進(jìn)度條), ToolTip(提示框)實(shí)現(xiàn)人機(jī)交互的組件JButton(按鈕)
13、, JComboBox(組合框),列表JList(列表),JMenu(菜單),JSlider(滑塊),JTextField(單行文本框)向用戶顯示能被編輯的格式化信息的組件.如JColorChooser(顏色選擇對(duì)話框 ), JFileChooser (文件選擇對(duì)話框 ),JTable(表格),JTextArea(多行文本域 )18圖形用戶界面程序的設(shè)計(jì)步驟建立用戶界面設(shè)計(jì)一個(gè)頂層容器對(duì)象,如JFrame確定布局,添加組件改變組件屬性(大小、位置、顏色、字體等)增加事件處理編寫(xiě)事件監(jiān)聽(tīng)器類(lèi)(內(nèi)含事件處理方法)在事件源上注冊(cè)事件監(jiān)聽(tīng)器對(duì)象顯示用戶界面19JFrameJFrame(窗口)是一個(gè)帶有
14、標(biāo)題欄和邊框的窗口。設(shè)計(jì)程序的用戶界面往往使用JFrame子類(lèi)的實(shí)例作為應(yīng)用程序的窗口。JFrame是放置其他 Swing 組件的頂級(jí)容器,它的構(gòu)造方法:JFrame(),建立一個(gè)無(wú)標(biāo)題的JFrame。JFrame(String title),建立一個(gè)標(biāo)題為title的JFrame。 20JFrameJFrame對(duì)象常用方法:(1)Container getContentPane():獲得內(nèi)容面板(2)void setContentPane(Container):設(shè)置內(nèi)容面板(3)void setMenuBar(JMenuBar):設(shè)置菜單條(4) void setTitle(String t
15、itle):將窗口標(biāo)題設(shè)置為指定的字符串(5)void setVisible(boolean b):根據(jù)參數(shù)b 的值顯示或隱藏此組件(6) void setSize(Dimension d):設(shè)置窗口的大小,寬度d.width,高度 d.height。 (7) void pack():窗體調(diào)整到足夠顯示所有組件 (8) void validate():驗(yàn)證此容器及其所有子組件, 使容器再次布置其子組件。已經(jīng)布置容器后,再修改此容器的子組件的時(shí)候應(yīng)該調(diào)用該方法。 (9) void setLocation(int x, int y):將窗體移到新位置(10) void setResizable(b
16、oolean):設(shè)置窗體是否允許拖動(dòng)以調(diào)整大小21JFrameJFrame對(duì)象常用方法:(11)void setDefaultCloseOperation(int operation):設(shè)置用戶在此窗體上發(fā)起 “close” 時(shí)默認(rèn)執(zhí)行的操作。Operation的值必須指定:WindowConstants.DO_NOTHING_ON_CLOSE:不執(zhí)行任何操作;要求程序在已注冊(cè)的 WindowListener 對(duì)象的 windowClosing 方法中處理該操作。 WindowConstants.HIDE_ON_CLOSE(默認(rèn)值):調(diào)用任意已注冊(cè)的 WindowListener 對(duì)象后自動(dòng)隱
17、藏該窗體。 WindowConstants.DISPOSE_ON_CLOSE:調(diào)用任意已注冊(cè) WindowListener 的對(duì)象后自動(dòng)隱藏并釋放該窗體。 相當(dāng)于調(diào)用窗口對(duì)象的dispose方法。JFrame .EXIT_ON_CLOSE:調(diào)用 System.exit ()方法退出應(yīng)用程序。默認(rèn)情況下,該值被設(shè)置為 HIDE_ON_CLOSE。22創(chuàng)建JFrame窗體有兩種方式:使用JFrame類(lèi)創(chuàng)建窗體使用JFrame類(lèi)的子類(lèi)創(chuàng)建窗體【例】 建立一個(gè)標(biāo)題為“Swing窗口”,大小為(300,200)的窗口,屏幕效果如下圖所示。(JFrameDemo.java)231、使用JFrame類(lèi)創(chuàng)建窗
18、體import javax.swing.JFrame;public class JFrameDemo public static void main(String args) JFrame frame = new JFrame(“Swing窗口”);/ 創(chuàng)建一個(gè)帶標(biāo)題的窗體frame.setSize(300, 200);/ 設(shè)置窗口大小frame.setVisible(true);/ 設(shè)置窗口可見(jiàn)frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/關(guān)閉窗口時(shí),退出程序242、使用JFrame類(lèi)的子類(lèi)創(chuàng)建窗體import javax.swi
19、ng.JFrame;public class JFrameDemo extends JFrame public JFrameDemo() super(“Swing窗口”);/ 調(diào)用超類(lèi)的構(gòu)造方法。setSize(300, 200);/ 設(shè)置窗口大小setVisible(true);/ 設(shè)置窗口可見(jiàn)setDefaultCloseOperation(EXIT_ON_CLOSE);/關(guān)閉窗口,退出程序public static void main(String args) JFrameDemo frame = new JFrameDemo();25設(shè)置窗體的標(biāo)題方式1通過(guò)super(String t
20、itle)調(diào)用基類(lèi)的構(gòu)造方法例如:JFrame frame=new JFrame(“窗口示例”);方式2通過(guò)setTitle(String title)方法來(lái)設(shè)置標(biāo)題。例如:JFrame frame=new JFrame();frame.setTitle(“窗口示例”);26【例】 建立一個(gè)標(biāo)題為“Swing窗口”,大小為(300,200),圖標(biāo)為qq.png,位置居中的窗口。屏幕效果如下圖所示。(JFrameDemo.java)27設(shè)置窗口位于屏幕中央public class JFrameDemo extends JFrame public JFrameDemo() super(Swing窗
21、口);/設(shè)置窗口圖標(biāo)Toolkit kit=Toolkit.getDefaultToolkit();/定義工具包System.out.println(this.getClass().getResource(qq.png);Image img = kit.getImage(getClass().getResource(qq.png); setIconImage(img);/設(shè)置窗口居中int fw=getWidth();/獲得窗口寬度int fh=getHeight();/獲得窗口高度Dimension screensize=kit.getScreenSize();/獲取屏幕尺寸int sw=s
22、creensize.width;/獲取屏幕的寬度int sh=screensize.height;/獲取屏幕的高度setLocation(sw/2-fw/2, sh/2-fh/2);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(300,200);setVisible(true);public static void main(String args) JFrameDemo f=new JFrameDemo();284使用Swing的基本規(guī)則與AWT組件不同,Swing組件不能直接添加到頂層容器中,它必須添加到一個(gè)與Swing頂層容
23、器相關(guān)聯(lián)的內(nèi)容面板(content pane)上。例如,對(duì)JFrame頂層容器而言,添加組件有兩種方式:方式1:用getContentPane( )方法獲得JFrame的內(nèi)容面板,再對(duì)其加入組件:frame.getContentPane().add(childComponent);方式2:建立一個(gè)JPanel或 JDesktopPane之類(lèi)的中間容器,把組件添加到容器中,用setContentPane()方法把該容器置為JFrame的內(nèi)容面板: JPanel contentPane=new JPanel( ); /把其它組件添加到JPanel中; frame.setContentPane(co
24、ntentPane); 29方式1:獲得JFrame的內(nèi)容面板,再對(duì)其加入組件import java.awt.FlowLayout;import javax.swing.JButton;import javax.swing.JFrame;public class JFrameDemo extends JFrame public JFrameDemo() super(Swing窗口);/ 調(diào)用超類(lèi)的構(gòu)造方法。setLayout(new FlowLayout();JButton bt = new JButton(按鈕);getContentPane().add(bt);setSize(300, 2
25、00);/ 設(shè)置窗口大小setVisible(true);/ 設(shè)置窗口可見(jiàn)setDefaultCloseOperation(EXIT_ON_CLOSE);/ 關(guān)閉窗口,退出程序public static void main(String args) JFrameDemo frame = new JFrameDemo();30方式1:獲得JFrame的內(nèi)容面板,再對(duì)其加入組件import java.awt.FlowLayout;import javax.swing.JButton;import javax.swing.JFrame;public class JFrameDemo public s
26、tatic void main(String args) JFrame frame = new JFrame(Swing窗口);/ 創(chuàng)建一個(gè)帶標(biāo)題的窗口frame.setLayout(new FlowLayout();JButton bt=new JButton(按鈕);frame.getContentPane().add(bt);frame.setSize(300, 200);/ 設(shè)置窗口大小frame.setVisible(true);/ 設(shè)置窗口可見(jiàn)frame. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/關(guān)閉窗口,退出程序31方式1:
27、獲得JFrame的內(nèi)容面板,再對(duì)其加入組件public class JFrameDemo extends JFrame public JFrameDemo() super(Swing窗口);/ 調(diào)用超類(lèi)的構(gòu)造方法。setLayout(new FlowLayout();JButton bt = new JButton(按鈕);/getContentPane().add(bt);Container container=getContentPane(); /獲得內(nèi)容面板container.add(bt); /將按鈕添加到內(nèi)容面板中setSize(300, 200);/ 設(shè)置窗口大小gsetVisib
28、le(true);/ 設(shè)置窗口可見(jiàn)setDefaultCloseOperation(EXIT_ON_CLOSE);/ 關(guān)閉窗口,退出程序public static void main(String args) JFrameDemo frame = new JFrameDemo();32方式2:建立一個(gè)中間容器,把組件添加到容器中,再把該容器置為JFrame的內(nèi)容面板import java.awt.FlowLayout;import javax.swing.JButton;import javax.swing.JFrame;public class JFrameDemo extends JFra
29、me public JFrameDemo() super(Swing窗口);/ 調(diào)用超類(lèi)的構(gòu)造方法。setLayout(new FlowLayout();JButton bt = new JButton(按鈕);JPanel pane=new JPanel();pane.add(bt);setContentPane(pane);setSize(300, 200);/ 設(shè)置窗口大小setVisible(true);/ 設(shè)置窗口可見(jiàn)setDefaultCloseOperation(EXIT_ON_CLOSE);/ 關(guān)閉窗口,退出程序public static void main(String ar
30、gs) JFrameDemo frame = new JFrameDemo();339.2 事件處理模型Java的事件處理模型由三部分組成:(1)事件源(Event source):是用戶交互的各種GUI組件,例如按鈕、窗口、菜單等產(chǎn)生事件的組件。在Java程序的運(yùn)行過(guò)程中,當(dāng)用戶通過(guò)行程序的用戶界面進(jìn)行某個(gè)操作時(shí),便引發(fā)一個(gè)相應(yīng)的事件。例如,在一個(gè)按鈕上單擊鼠標(biāo)時(shí),該按鈕就是事件源,會(huì)產(chǎn)生一個(gè)ActionEvent類(lèi)型的事件。(2)事件對(duì)象(Event object):封裝了發(fā)生事件的有關(guān)信息。對(duì)于不同的事件源,Java虛擬機(jī)會(huì)產(chǎn)生相應(yīng)類(lèi)型的事件對(duì)象。是一個(gè)數(shù)據(jù)對(duì)象,用來(lái)描述用戶所執(zhí)行的操作
31、。Java中定義了很多事件類(lèi),分別用來(lái)描述用戶不同類(lèi)型的操作。事件類(lèi)包含在java.awt.event和javax.swing.event包中。(3)事件監(jiān)聽(tīng)器(Event listener):當(dāng)事件發(fā)生時(shí)被通知到接受事件的事件監(jiān)聽(tīng)器,然后調(diào)用事件監(jiān)聽(tīng)器中對(duì)應(yīng)的方法響應(yīng)該事件。一個(gè)事件監(jiān)聽(tīng)器是實(shí)現(xiàn)了系統(tǒng)規(guī)定的事件監(jiān)聽(tīng)接口的類(lèi)的對(duì)象。事件監(jiān)聽(tīng)接口中提供了事件處理的抽象方法的描述。349.2 事件處理模型當(dāng)用戶單擊一個(gè)按鈕,或者單擊某個(gè)菜單項(xiàng),或者單擊窗口右上角的狀態(tài)按鈕時(shí),這個(gè)動(dòng)作就會(huì)觸發(fā)一個(gè)相應(yīng)的事件,該事件由AWT封裝成相應(yīng)的Event對(duì)象,該對(duì)象會(huì)觸發(fā)組件上注冊(cè)的事件監(jiān)聽(tīng)器(特殊的Java
32、對(duì)象),事件監(jiān)聽(tīng)器調(diào)用其內(nèi)部定義的相應(yīng)的方法來(lái)響應(yīng)該事件。35圖9-4 Java系統(tǒng)的事件監(jiān)聽(tīng)接口java.awt.event包定義了Java系統(tǒng)的一組事件監(jiān)聽(tīng)接口類(lèi)型,一個(gè)監(jiān)聽(tīng)接口往往聲明了一個(gè)以上的抽象方法。每個(gè)抽象方法對(duì)應(yīng)著要處理的事件動(dòng)作,由用戶實(shí)現(xiàn)它。 EventListenerActionListenerAdjustmentListenerComponentListenerContainerListenerFocusListenerItemListenerKeyListenerMouseListenerMouseMotionListenerTextListenerWindowLis
33、tener36java.awt.event包中的事件類(lèi)ObjectEventObjectAWTEventActionEventAdjustmentEventItemEventTextEventContainerEventFocusEventPaintEventWindowEventInputEventMouseWheelEventComponentEventKeyEventMouseEvent379.2 事件處理模型 2.當(dāng)需要對(duì)組件的某種事件進(jìn)行響應(yīng)和處理時(shí),程序員必須完成兩個(gè)步驟:為組件注冊(cè)實(shí)現(xiàn)規(guī)定接口的事件監(jiān)聽(tīng)器; 實(shí)現(xiàn)事件監(jiān)聽(tīng)器接口中聲明的事件處理抽象方法。例如, button組件的事
34、件響應(yīng)過(guò)程:JButton button=new JButton(Press ); /(1)為button組件注冊(cè)事件監(jiān)聽(tīng)器button.addActionListener(new ButtonHandler();ClassButtonHandler implementsActionListener /實(shí)現(xiàn)事件監(jiān)聽(tīng)接口的類(lèi) public void actionPerformed( ActionEvent event ) /(2)實(shí)現(xiàn)事件處理方法。 /事件處理代碼 鼠標(biāo)單擊,觸發(fā)事件ActionEvent將調(diào)用方法actionPerformed389.2 事件處理模型注冊(cè)事件監(jiān)聽(tīng)器為了能夠讓事件
35、監(jiān)聽(tīng)器檢查某個(gè)組件(事件源)是否發(fā)生了某些事件,并且在發(fā)生時(shí)激活事件處理器進(jìn)行相應(yīng)的處理,必須在事件源上注冊(cè)事件監(jiān)聽(tīng)器。這是通過(guò)使用事件源組件的以下方法來(lái)完成的:addXxxListener(事件監(jiān)聽(tīng)器對(duì)象)Xxx對(duì)應(yīng)相應(yīng)的事件類(lèi)。399.2 事件處理模型圖形界面程序(一個(gè)類(lèi))監(jiān)聽(tīng)器類(lèi)(含事件處理方法)監(jiān)聽(tīng)器對(duì)象(含事件處理方法)實(shí)例化注冊(cè)外部動(dòng)作事件對(duì)象產(chǎn)生并傳遞事件對(duì)象接收事件對(duì)象,激活事件處理器,實(shí)現(xiàn)預(yù)定功能事件源(例如一個(gè)按鈕)含有409.2 事件處理模型3. ActionEvent動(dòng)作事件 ActionEvent:當(dāng)特定組件(例如Button)的動(dòng)作(例如點(diǎn)擊按鈕)發(fā)生時(shí),由組件生成
36、此動(dòng)作事件。該事件被傳遞給使用組件的 addActionListener 方法注冊(cè)的每一個(gè) ActionListener 對(duì)象,用以接收這類(lèi)事件.能夠觸發(fā)這個(gè)事件的動(dòng)作,主要包括:(1) 點(diǎn)擊按鈕(2) 雙擊一個(gè)列表中的選項(xiàng);(3) 選擇菜單項(xiàng);(4) 在文本框中輸入回車(chē)。419.2 事件處理模型ActionEvent事件常用的一些方法:(1) String getActionCommand( ):返回引發(fā)事件的動(dòng)作的命令字符串。例如,對(duì)于Button按鈕返回的是Button的標(biāo)簽。對(duì)于JTextField返回的是文本內(nèi)容。 (2) String getSource( ):返回引發(fā)該事件的組件
37、對(duì)象(事件源)的引用。使用getSource( )方法可以區(qū)分產(chǎn)生動(dòng)作命令的不同事件源下面將介紹各個(gè)GUI組件時(shí)將結(jié)合相應(yīng)的事件類(lèi)型和事件監(jiān)聽(tīng)器接口類(lèi)型進(jìn)行程序設(shè)計(jì)的過(guò)程。429.3 命令按鈕JButton 命令按鈕(JButton)是一種組件,當(dāng)用戶通過(guò)單擊按鈕時(shí)將產(chǎn)生動(dòng)作事件ActionEvent,以觸發(fā)特定的動(dòng)作代碼,從而完成預(yù)先指定的功能。Swing中JButton既支持文本按鈕,也支持圖像按鈕,或兩者兼有。 439.3 命令按鈕JButton1創(chuàng)建按鈕對(duì)象JButton類(lèi)常用的一組構(gòu)造方法:(1) JButton(String text):創(chuàng)建一個(gè)帶文本的按鈕。(2) JButton
38、(Icon icon) :創(chuàng)建一個(gè)帶圖標(biāo)的按鈕。(3)JButton(String text, Icon icon) :創(chuàng)建一個(gè)帶文本和圖標(biāo)的按鈕。 getClass().getResource()方法是從當(dāng)前.class文件路徑查找資源 2按鈕對(duì)象的常用方法 getLabel( ):返回按鈕的標(biāo)簽字符串; setLabel(String s):設(shè)置按鈕的標(biāo)簽為字符串s。449.3 命令按鈕JButton3ActionEvent事件響應(yīng)當(dāng)用戶單擊一個(gè)按鈕時(shí)就引發(fā)了一個(gè)動(dòng)作事件ActionEvent。調(diào)用JButton的方法addActionListener給按鈕注冊(cè)實(shí)現(xiàn)ActionListen
39、er接口的事件監(jiān)聽(tīng)器為這個(gè)接口的actionPerformed(ActionEvent e)方法書(shū)寫(xiě)方法體。e.getSource( ):獲取引發(fā)動(dòng)作事件的按鈕對(duì)象引用e.getActionCommand( ):獲取按鈕的標(biāo)簽。459.3 命令按鈕JButton例9-1 文本按鈕和圖像按鈕的程序設(shè)計(jì)示例 46實(shí)現(xiàn)事件監(jiān)聽(tīng)器的4種方式事件監(jiān)聽(tīng)器是一個(gè)特殊的Java對(duì)象,實(shí)現(xiàn)事件監(jiān)聽(tīng)器有以下4種方式:內(nèi)部類(lèi)形式:將事件監(jiān)聽(tīng)器類(lèi)定義成當(dāng)前類(lèi)的內(nèi)部類(lèi)。外部類(lèi)形式:將事件監(jiān)聽(tīng)器類(lèi)定義成一個(gè)外部類(lèi)。類(lèi)本身作為事件監(jiān)聽(tīng)器類(lèi):讓當(dāng)前類(lèi)本身實(shí)現(xiàn)監(jiān)聽(tīng)器接口或繼承事件適配器。匿名內(nèi)部類(lèi)形式:使用匿名內(nèi)部類(lèi)創(chuàng)建事件監(jiān)
40、聽(tīng)器。471.使用內(nèi)部類(lèi)定義事件監(jiān)聽(tīng)器類(lèi)import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Test extends JFrame public Test() super(事件處理模型);/ 調(diào)用超類(lèi)的構(gòu)造犯法。setLayout(new FlowLayout();JButton button=new JButton(Press); /創(chuàng)建一個(gè)JButton按鈕button.addActionListener(new ButtonHandler();getContentPane().add(bu
41、tton);setSize(500, 600);/ 設(shè)置窗口大小setVisible(true);/ 設(shè)置窗口可見(jiàn)public static void main(String args) Test application=new Test(); /創(chuàng)建一個(gè)窗口application.setDefaultCloseOperation(EXIT_ON_CLOSE);/使用內(nèi)部類(lèi)定義事件監(jiān)聽(tīng)器類(lèi)class ButtonHandler implements ActionListener/實(shí)現(xiàn)事件處理的方法public void actionPerformed(ActionEvent e)/事件處理代碼
42、JOptionPane.showMessageDialog(Test.this, 你按下的是+e.getActionCommand()+按鈕,事件處理,JOptionPane.PLAIN_MESSAGE);482.使用外部類(lèi)定義事件監(jiān)聽(tīng)器類(lèi)import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Test extends JFrame public Test() super(事件處理模型);/ 調(diào)用超類(lèi)的構(gòu)造犯法。setLayout(new FlowLayout();JButton button=ne
43、w JButton(Press); /創(chuàng)建一個(gè)JButton按鈕button.addActionListener(new ButtonHandler();getContentPane().add(button);setSize(500, 600);/ 設(shè)置窗口大小setVisible(true);/ 設(shè)置窗口可見(jiàn)public static void main(String args) Test application=new Test(); /創(chuàng)建一個(gè)窗口application.setDefaultCloseOperation(EXIT_ON_CLOSE);/使用外部部類(lèi)定義事件監(jiān)聽(tīng)器類(lèi)cla
44、ss ButtonHandler implements ActionListener/實(shí)現(xiàn)事件處理的方法public void actionPerformed(ActionEvent e)/事件處理代碼JOptionPane.showMessageDialog(Test.this, 你按下的是+e.getActionCommand()+按鈕,事件處理,JOptionPane.PLAIN_MESSAGE);493.使用類(lèi)本身定義事件監(jiān)聽(tīng)器類(lèi)import java.awt.*;import java.awt.event.*;import javax.swing.*;/使用類(lèi)本身定義事件監(jiān)聽(tīng)器類(lèi)pu
45、blic class Test extends JFrame implements ActionListenerpublic Test() super(“事件處理模型”);/ 調(diào)用超類(lèi)的構(gòu)造方法設(shè)置窗口標(biāo)題。setLayout(new FlowLayout();JButton button=new JButton(Press); /創(chuàng)建一個(gè)JButton按鈕button.addActionListener(this);getContentPane().add(button);setSize(500, 600);/ 設(shè)置窗口大小setVisible(true);/ 設(shè)置窗口可見(jiàn) /實(shí)現(xiàn)事件處理的
46、方法public void actionPerformed(ActionEvent e)/事件處理代碼JOptionPane.showMessageDialog(Test.this, 你按下的是+e.getActionCommand()+按鈕,事件處理,JOptionPane.PLAIN_MESSAGE);public static void main(String args) Test application=new Test(); /創(chuàng)建一個(gè)窗口application.setDefaultCloseOperation(EXIT_ON_CLOSE);504.使用匿名內(nèi)部類(lèi)實(shí)現(xiàn)事件監(jiān)聽(tīng)器imp
47、ort java.awt.*;import java.awt.event.*;import javax.swing.*;public class Test extends JFrame public Test() super(事件處理模型);/ 調(diào)用超類(lèi)的構(gòu)造犯法。setLayout(new FlowLayout();nnJButton button = new JButton(Press); / 創(chuàng)建一個(gè)JButton按鈕/使用匿名內(nèi)部類(lèi)定義事件監(jiān)聽(tīng)器類(lèi)button.addActionListener( new ActionListener()/ 實(shí)現(xiàn)事件處理的方法public void a
48、ctionPerformed(ActionEvent e) / 事件處理代碼JOptionPane.showMessageDialog(Test.this,你按下的是 + e.getActionCommand() + 按鈕, 事件處理,JOptionPane.PLAIN_MESSAGE); );getContentPane().add(button);setSize(500, 600);/ 設(shè)置窗口大小setVisible(true);/ 設(shè)置窗口可見(jiàn)public static void main(String args) Test application = new Test(); / 創(chuàng)建
49、一個(gè)窗口application.setDefaultCloseOperation(EXIT_ON_CLOSE);519.4 標(biāo)簽、單行文本框、多行文本域與滾動(dòng)條面板搭建GUI圖形界面使用最多的Swing組件:標(biāo)簽(JLabel)、單行文本框(JTextField、JTextPassword)多行文本域(JTextArea)滾動(dòng)條面板(JScrollPane)529.4.1 標(biāo)簽 JLabel JLabel標(biāo)簽是用戶不能修改只能查看其內(nèi)容的文本顯示區(qū)域,它起到信息說(shuō)明的作用。JLabel 對(duì)象可以顯示文本和圖像。539.4.1 標(biāo)簽 JLabel使用JLabel類(lèi)的構(gòu)造方法創(chuàng)建標(biāo)簽對(duì)象。JLab
50、el類(lèi)常用的構(gòu)造方法有:(1)JLabel(Stringtext)創(chuàng)建具有指定文本的JLabel對(duì)象(2)JLabel(Iconimage) 創(chuàng)建具有指定圖像的JLabel對(duì)象(3)JLabel(Stringtext inthorizontalAlignment) 水平對(duì)齊方式HorizontalAlignment值:SwingConstants接口中靜態(tài)常量:LEFT、CENTER、RIGHT、LEADING 或 TRAILING。(4)JLabel(Stringtext, Iconicon,inthorizontalAlignment) 創(chuàng)建具有指定文本、圖像和水平對(duì)齊方式的JLabel對(duì)
51、象,該標(biāo)簽在其顯示區(qū)內(nèi)垂直居中對(duì)齊。文本位于圖像的結(jié)尾。 549.4.1 標(biāo)簽 JLabel設(shè)置或讀取JLabel對(duì)象屬性的常用方法(1)設(shè)置或讀取JLabel顯示的文本setText(String text) String getText()(2)設(shè)置或讀取JLabel顯示的圖像setIcon(Iconimage)getIcon()(3)設(shè)置JLabel顯示文本的前景色和背景色。setForeground(Color c)setBackground(Color c) (4)設(shè)置JLabel顯示的文本字體setFont(Font f)559.4.1 標(biāo)簽 JLabel例如:創(chuàng)建文本內(nèi)容是“文本
52、標(biāo)簽”且顏色是紅色的 JLabel實(shí)例的語(yǔ)句: label1=new JLabel( “用戶名 ); label1.setColor(Color.RED); 569.4.1 標(biāo)簽 JLabel 例:創(chuàng)建文本內(nèi)容為 “照片”, 圖像是czims.jpg,且整個(gè)標(biāo)簽水平靠左對(duì)齊的JLabel實(shí)例語(yǔ)句: Icon bug = new ImageIcon(getClass().getResource(CZIMS.JPG) ) label2 = new JLabel( “照片, bug,SwingConstants.LEFT ); /設(shè)置label2的文本相對(duì)于圖片的位置:水平方向居中對(duì)齊,垂直方向在圖
53、片的底部 label2.setHorizontalTextPosition( SwingConstants.CENTER );label2.setVerticalTextPosition( SwingConstants.BOTTOM ); 579.4.2 JTextField與JTextArea從JTextComponent父類(lèi)派生單行文本框JTextField、JPasswordField允許編輯單行文本,JTextField顯示用戶輸入的內(nèi)容,JPasswordField隱藏用戶實(shí)際輸入的內(nèi)容。多行文本域JTextArea允許用戶編輯多行文本。滾動(dòng)條面板JScrollPane :提供JTe
54、xtArea內(nèi)容水平滾動(dòng)和縱向滾動(dòng)。 589.4.2 JTextField與JTextArea1JTextField和JPasswordFieldJTextField常用的構(gòu)造方法:(1)JTextField()構(gòu)造一個(gè)內(nèi)容為空的JTextField實(shí)例。(2)JTextField(int columns)構(gòu)造一個(gè)內(nèi)容為空和指定列寬 的JTextField實(shí)例。(3)JTextField(String text) 構(gòu)造一個(gè)用指定文本的JTextField實(shí)例。(4)JTextField(String text, int columns)構(gòu)造一個(gè)指定文本和列寬的JTextField實(shí)例。 JPa
55、ssword類(lèi)的構(gòu)造方法類(lèi)似于JTextField.599.4.2 JTextField與JTextArea2JTextArea的常用構(gòu)造方法:JTextArea() 構(gòu)造一個(gè)內(nèi)容為空的JTextArea實(shí)例。JTextArea(int rows,int columns) 構(gòu)造具有指定行數(shù)和列數(shù)的JTextArea實(shí)例。JTextArea(String text) 構(gòu)造具有指定文本的JTextArea實(shí)例。設(shè)置TextComponent是否為可編輯的(b值為true時(shí))JTextArea(String text,int rows,int columns) 構(gòu)造具有指定文本、行數(shù)和列數(shù)的JTex
56、tArea實(shí)例。609.4.2 JTextField與JTextArea3JTextComponent對(duì)象的常用方法:void setText(String) 設(shè)置文本內(nèi)容String getText() 取得文本內(nèi)容void setEditable(boolean b)設(shè)置TextComponent是否為可編輯的(b值為true時(shí))String getSelectedText()返回TextComponent中包含的選定文本619.4.2 JTextField與JTextArea4TextEvent和ActionEvent事件響應(yīng)JTextField和JTextArea的事件響應(yīng)首先由它們的
57、父類(lèi)JTextComponent決定JTextComponent引發(fā)事件TextEvent當(dāng)用戶對(duì)文本做編輯修改操作時(shí),將引發(fā)TextEvent文本改變事件。JTextField比JTextArea多產(chǎn)生一種事件ActionEvent 當(dāng)用戶在文本框中按回車(chē)鍵時(shí),將引發(fā)ActionEvent動(dòng)作事件。JTextArea卻不能產(chǎn)生ActionEvent事件.629.4.3 滾動(dòng)條面板JScrollPane JScrollPane是帶滾動(dòng)條的面板。它是一個(gè)容器組件,其作用是通過(guò)滾動(dòng)條在一個(gè)較小的區(qū)域顯示較多大的內(nèi)容。 JScrollPane的構(gòu)造方法:JScrollPane(Component v
58、iew):創(chuàng)建一個(gè)顯示指定組件內(nèi)容的 JScrollPane,只要組件的內(nèi)容超過(guò)視圖大小就會(huì)顯示水平和垂直滾動(dòng)條。 63例9-2 JLabel、JTextField、JPasswordField和JTextArea的應(yīng)用程序運(yùn)行輸出結(jié)果如圖9-7。程序的功能:(1)當(dāng)用戶分別在用戶名和口令的文本框中輸入內(nèi)容按回車(chē)鍵后,將在標(biāo)簽為“顯示用戶名或口令”的文本框中顯示用戶輸入的內(nèi)容。(2)在圖的下半部分定義了一個(gè)水平方向的Box對(duì)象,加入Box的組件按水平方向排列。在Box對(duì)象中加入了三個(gè)GUI組件:兩個(gè)JTextArea和一個(gè)JButton。 用戶可通過(guò)鼠標(biāo)選擇左邊的textArea1的內(nèi)容,然后
59、鼠標(biāo)單擊標(biāo)簽為“拷貝”按鈕,會(huì)將選中的textArea1的內(nèi)容拷貝到右邊JScrollPane中。兩個(gè)JTextArea對(duì)象分別放入兩個(gè)JScrollPane滾動(dòng)條面板對(duì)象中. 649.5 JCheckBox和JRadioButton SwingGUI組件包含3種類(lèi)型的狀態(tài)按鈕:JToggleButton復(fù)選框按鈕JCheckBox和單選按鈕JRadioButton按鈕都有開(kāi)/關(guān)(真/假)兩種值。提供用戶在給定的數(shù)據(jù)中進(jìn)行選擇.Swing button 的繼承層次JComponentAbstractButtonJToggleButtonJRadioButtonJCheckBoxJButton6
60、51. 復(fù)選框(JCheckBox)JCheckBox提供簡(jiǎn)單的“on/off”開(kāi)關(guān),旁邊顯示文本標(biāo)簽。它只有兩種狀態(tài):選中和未選中。在一組復(fù)選框中,可以同時(shí)選擇多項(xiàng)。661. 復(fù)選框(JCheckBox)復(fù)選框的常用的構(gòu)造方法:(1) JCheckBox(String text)(2)JCheckBox(String text, boolean selected)(3) JCheckBox(Icon icon, boolean selected)(4) JCheckBox(String text, Icon icon, boolean selected)創(chuàng)建一個(gè)帶文本和圖標(biāo)的復(fù)選框,并指定其
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年學(xué)歷鑒定申請(qǐng)與咨詢(xún)服務(wù)協(xié)議
- 2025年農(nóng)業(yè)國(guó)際合作協(xié)議
- 2025年塑膠瓶銷(xiāo)售合同模板
- 2025年高速公路交通標(biāo)識(shí)策劃與安全導(dǎo)流協(xié)議
- 2025年二期消防工程合同規(guī)范版本
- 2025年焊接工培訓(xùn)申請(qǐng)與能力發(fā)展協(xié)議
- 2025年產(chǎn)品制造聯(lián)盟協(xié)議規(guī)范
- 2025年建筑行業(yè)勞務(wù)費(fèi)用結(jié)算協(xié)議
- 2025年勞動(dòng)合同樣本制定
- 2025年勞動(dòng)爭(zhēng)議解決法律合同
- DL-T 297-2023 汽輪發(fā)電機(jī)合金軸瓦超聲檢測(cè)
- JGJT 152-2019 混凝土中鋼筋檢測(cè)技術(shù)標(biāo)準(zhǔn)
- 交通銀行股份有限公司操作風(fēng)險(xiǎn)管理政策
- 2024年《公務(wù)員法》相關(guān)法律法規(guī)知識(shí)考試題庫(kù)含完整答案(必刷)
- 手術(shù)室氣體的使用
- 數(shù)字證書(shū)使用承諾函
- 汽車(chē)銷(xiāo)售經(jīng)理年終總結(jié)
- 透析患者的血糖管理
- 2024大型活動(dòng)標(biāo)準(zhǔn)化執(zhí)行手冊(cè)
- 瀝青拌合站講義課件
- 《快遞實(shí)務(wù)》 教案 項(xiàng)目三 快遞收件業(yè)務(wù)操作、項(xiàng)目七 快遞保價(jià)與賠償業(yè)務(wù)
評(píng)論
0/150
提交評(píng)論