Java程序設(shè)計(jì):第9章 GUI組件和用戶界面設(shè)計(jì) _第1頁
Java程序設(shè)計(jì):第9章 GUI組件和用戶界面設(shè)計(jì) _第2頁
Java程序設(shè)計(jì):第9章 GUI組件和用戶界面設(shè)計(jì) _第3頁
Java程序設(shè)計(jì):第9章 GUI組件和用戶界面設(shè)計(jì) _第4頁
Java程序設(shè)計(jì):第9章 GUI組件和用戶界面設(shè)計(jì) _第5頁
已閱讀5頁,還剩162頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Java程序設(shè)計(jì)第9章 GUI組件和用戶界面設(shè)計(jì)1教學(xué)目標(biāo)9.1 AWT和Swing組件概述9.2 事件處理模型9.3 命令按鈕JButton9.4 標(biāo)簽、單行文本框、多行文本域與滾動條面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 適配器類9.12 鍵盤事件處理9.13 菜單9.13.1 主菜單9.13.2 彈出式菜單9.14 選項(xiàng)卡面板JTabbedPane39.1 Swing和AWT組件概述 圖形用戶界面GUI(G

2、raphical User Interfaces),給用戶提供了一個交互式的直觀圖形化操作界面。提供了程序的外觀和感覺每個Java程序利用GUI圖形用戶界面接受用戶的輸入,向用戶輸出程序運(yùn)行的結(jié)果。menu barbuttoncombo boxmenusscroll bars49.1 AWT和Swing組件概述Java語言中,為了方便圖形用戶界面的開發(fā),設(shè)計(jì)了專門的類庫來生成各種標(biāo)準(zhǔn)圖形界面元素和處理圖形界面的各種事件。用來生成圖形用戶界面的類庫在以下2個包中:java.awt包。AWT(abstract window toolkit,抽象窗口工具集) javax.swing包59.1 AWT

3、和Swing組件概述Java語言中,為了方便圖形用戶界面的開發(fā),設(shè)計(jì)了專門的類庫來生成各種標(biāo)準(zhǔn)圖形界面元素和處理圖形界面的各種事件。用來生成圖形用戶界面的類庫在以下2個包中:java.awt包。AWT(abstract window toolkit,抽象窗口工具集) javax.swing包6 1、 AWT組件介紹java.awt包提供了基本的Java程序的GUI設(shè)計(jì)工具,包中的主要類或接口之間的繼承關(guān)系: ObjectLayoutManagerComponetLabelWindowButtonCanvasCheckboxContainerPanelDialogAppletFrame71、 A

4、WT組件介紹(1)組件Component 組件是一個以圖形化的方式顯示在屏幕上并能與用戶進(jìn)行交互的對象,例如Button、Label,組件通常被放在容器中。Component類是抽象類,定義了所有組件所具有的通用特性和行為,并派生出其他所有的組件。Compoment類提供的功能:基本的繪畫支持。方法repaint()、paint()、update()等用來在屏幕上繪制組件.外形控制。包括字體、顏色等。相應(yīng)的方法有:getFont()、setFont()、setBackground()、SetForeground()等大小和位置控制。方法有:setSize()、setLocation()等。圖像

5、處理。類Component實(shí)現(xiàn)了接口ImageObserver,其中的方法imageUpdate()用來進(jìn)行圖像跟蹤。組件的狀態(tài)控制。方法有: setEnable()控制組件是否接收用戶的輸入,isEnable(),isVisible()、isValid()返回組件的狀態(tài)。 81、 AWT組件介紹 (2)容器Container容器(Container)也是一個類,實(shí)際上是Component的子類,因此容器本身也是一個組件,具有組件的所有性質(zhì),但是它的主要功能是容納其它組件和容器。每個容器add()方法向容器添加某個組件,remove()方法從容器中刪除某個組件。每個容器都與一個布局管理器相聯(lián),

6、以確定容器內(nèi)組件的布局方式。容器通過方法setLayout()設(shè)置某種布局。 91、 AWT組件介紹(3)布局管理器LayoutManager 容器里組件的位置和大小是由布局管理器來決定的。布局管理器類都實(shí)現(xiàn)了接LayoutManager。Java系統(tǒng)提供的標(biāo)準(zhǔn)布局管理器類:FlowLayoutBorderLayoutGridLayoutCardLayoutBoxLayoutGridBagLayout 102. Swing介紹Swing 組件在javax.swing包中。其特點(diǎn): (1) Swing組件是用100純Java代碼實(shí)現(xiàn)的輕量級(light-weight)組件.Swing組件是純Ja

7、va實(shí)現(xiàn)的輕量級組件,沒有本地代碼,不依賴操作系統(tǒng)的支持,這是與AWT組件的最大區(qū)別。因此Swing組件的外觀和功能不依賴于任何由宿主平臺的窗口系統(tǒng)提供的代碼,程序員可以為它設(shè)置在不同操作系統(tǒng)下統(tǒng)一的外觀風(fēng)格,當(dāng)然也可以隨操作系統(tǒng)的不同而變。并且Swing組件能夠提供本地窗口系統(tǒng)不支持的其他特性。112. Swing介紹(2) Swing組件的多樣化 javax.swing包中的Swing組件以“J”開頭,除了有與AWT類似的按鈕(JButton)、標(biāo)簽(JLabel)、復(fù)選框(JCheckBox)、菜單(JMenu)等基本組件外,增加了一個豐富的高層組件集合,如表格(JTable)、樹(JT

8、ree)。Swing組件都是AWT的Container類的直接子類和間接子類。大多數(shù)Swing組件從JComponent類(除了頂層容器以外的所有組件的基類)繼承JComponent是一個抽象類,它定義所有子類組件的一般方法,如:使用setBorder()方法:設(shè)置組件外圍的邊框;使用setTooltipText()方法:為組件設(shè)置對用戶有幫助的提示信息。 12Swing 組件的繼承的超類132. Swing介紹(3)可插入的外觀感覺在AWT組件中,由于控制組件外觀的對等類與具體平臺相關(guān),使得AWT組件總是具有與本機(jī)操作系統(tǒng)相關(guān)的外觀。Swing可以使Java程序在一個平臺上運(yùn)行時能夠有不同的

9、外觀,可以根據(jù)不同用戶的習(xí)慣確定。143. Swing組件的分類從功能上分:(1)頂層容器:JFrame(框架窗口),JApplet(小應(yīng)用程序,Applet 的子類), JDialog(對話框), JWindow(無邊框的窗口)共4個(2)普通容器:JPanel(面板), JScrollPane(滾動條面板), 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(顏色選擇對話框 ), JFileChooser (文件選擇對話框 ),JTable(表格),JTextArea(多行文本域 )153. Swing組件的分類Swing組件歸為頂層容器、中間層容器、基本組件三個層次。1.頂層容器Swing提供三個頂層容器的類,分別是J

11、Frame、JDialog和JApplet,因?yàn)轫攲尤萜鞅仨毢筒僮飨到y(tǒng)打交道,所以,它們是重量級組件。從繼承結(jié)構(gòu)上來看,它們分別是原來AWT組件的Frame、Dialog、Applet類繼承而來。每個使用Swing組件的Java程序都必須至少要有一個頂層容器,別的組件都必須放在這個頂層容器上才能顯現(xiàn)出來。163. Swing組件的分類Swing組件歸為頂層容器、中間層容器、基本組件三個層次。2.中間層容器中間層容器存在的目的僅僅是為了容納別的組件,它分為兩類,即一般用途的和特殊用途的。一般用途的有JPanel(面板)、 JScrollPane(滾動條面板)、 JSplitPane(分割面板)、

12、 JTabbedPane(選項(xiàng)卡)、 JToolBar(工具欄)特殊用途的有JInternalFrame(內(nèi)部窗體), JLayeredPane(分層窗格), JRootPane(根窗格)173. Swing組件的分類Swing組件歸為頂層容器、中間層容器、基本組件三個層次。3.基本組件基本組件通常是在圖形用戶界面中和用戶進(jìn)行交換的組件。它的基本功能就是和用戶交換信息,而不像前兩種組件那樣是用來容納別的組件的。根據(jù)功能的不同,它可被分為三類:向用戶顯示不可編輯信息的組件JLabel(標(biāo)簽), JProgressBar(進(jìn)度條), ToolTip(提示框)實(shí)現(xiàn)人機(jī)交互的組件JButton(按鈕)

13、, JComboBox(組合框),列表JList(列表),JMenu(菜單),JSlider(滑塊),JTextField(單行文本框)向用戶顯示能被編輯的格式化信息的組件.如JColorChooser(顏色選擇對話框 ), JFileChooser (文件選擇對話框 ),JTable(表格),JTextArea(多行文本域 )18圖形用戶界面程序的設(shè)計(jì)步驟建立用戶界面設(shè)計(jì)一個頂層容器對象,如JFrame確定布局,添加組件改變組件屬性(大小、位置、顏色、字體等)增加事件處理編寫事件監(jiān)聽器類(內(nèi)含事件處理方法)在事件源上注冊事件監(jiān)聽器對象顯示用戶界面19JFrameJFrame(窗口)是一個帶有

14、標(biāo)題欄和邊框的窗口。設(shè)計(jì)程序的用戶界面往往使用JFrame子類的實(shí)例作為應(yīng)用程序的窗口。JFrame是放置其他 Swing 組件的頂級容器,它的構(gòu)造方法:JFrame(),建立一個無標(biāo)題的JFrame。JFrame(String title),建立一個標(biāo)題為title的JFrame。 20JFrameJFrame對象常用方法:(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)布置容器后,再修改此容器的子組件的時候應(yīng)該調(diào)用該方法。 (9) void setLocation(int x, int y):將窗體移到新位置(10) void setResizable(b

16、oolean):設(shè)置窗體是否允許拖動以調(diào)整大小21JFrameJFrame對象常用方法:(11)void setDefaultCloseOperation(int operation):設(shè)置用戶在此窗體上發(fā)起 “close” 時默認(rèn)執(zhí)行的操作。Operation的值必須指定:WindowConstants.DO_NOTHING_ON_CLOSE:不執(zhí)行任何操作;要求程序在已注冊的 WindowListener 對象的 windowClosing 方法中處理該操作。 WindowConstants.HIDE_ON_CLOSE(默認(rèn)值):調(diào)用任意已注冊的 WindowListener 對象后自動隱

17、藏該窗體。 WindowConstants.DISPOSE_ON_CLOSE:調(diào)用任意已注冊 WindowListener 的對象后自動隱藏并釋放該窗體。 相當(dāng)于調(diào)用窗口對象的dispose方法。JFrame .EXIT_ON_CLOSE:調(diào)用 System.exit ()方法退出應(yīng)用程序。默認(rèn)情況下,該值被設(shè)置為 HIDE_ON_CLOSE。22創(chuàng)建JFrame窗體有兩種方式:使用JFrame類創(chuàng)建窗體使用JFrame類的子類創(chuàng)建窗體【例】 建立一個標(biāo)題為“Swing窗口”,大小為(300,200)的窗口,屏幕效果如下圖所示。(JFrameDemo.java)231、使用JFrame類創(chuàng)建窗

18、體import javax.swing.JFrame;public class JFrameDemo public static void main(String args) JFrame frame = new JFrame(“Swing窗口”);/ 創(chuàng)建一個帶標(biāo)題的窗體frame.setSize(300, 200);/ 設(shè)置窗口大小frame.setVisible(true);/ 設(shè)置窗口可見frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/關(guān)閉窗口時,退出程序242、使用JFrame類的子類創(chuàng)建窗體import javax.swi

19、ng.JFrame;public class JFrameDemo extends JFrame public JFrameDemo() super(“Swing窗口”);/ 調(diào)用超類的構(gòu)造方法。setSize(300, 200);/ 設(shè)置窗口大小setVisible(true);/ 設(shè)置窗口可見setDefaultCloseOperation(EXIT_ON_CLOSE);/關(guān)閉窗口,退出程序public static void main(String args) JFrameDemo frame = new JFrameDemo();25設(shè)置窗體的標(biāo)題方式1通過super(String t

20、itle)調(diào)用基類的構(gòu)造方法例如:JFrame frame=new JFrame(“窗口示例”);方式2通過setTitle(String title)方法來設(shè)置標(biāo)題。例如:JFrame frame=new JFrame();frame.setTitle(“窗口示例”);26【例】 建立一個標(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組件不能直接添加到頂層容器中,它必須添加到一個與Swing頂層容

23、器相關(guān)聯(lián)的內(nèi)容面板(content pane)上。例如,對JFrame頂層容器而言,添加組件有兩種方式:方式1:用getContentPane( )方法獲得JFrame的內(nèi)容面板,再對其加入組件:frame.getContentPane().add(childComponent);方式2:建立一個JPanel或 JDesktopPane之類的中間容器,把組件添加到容器中,用setContentPane()方法把該容器置為JFrame的內(nèi)容面板: JPanel contentPane=new JPanel( ); /把其它組件添加到JPanel中; frame.setContentPane(co

24、ntentPane); 29方式1:獲得JFrame的內(nèi)容面板,再對其加入組件import java.awt.FlowLayout;import javax.swing.JButton;import javax.swing.JFrame;public class JFrameDemo extends JFrame public JFrameDemo() super(Swing窗口);/ 調(diào)用超類的構(gòu)造方法。setLayout(new FlowLayout();JButton bt = new JButton(按鈕);getContentPane().add(bt);setSize(300, 2

25、00);/ 設(shè)置窗口大小setVisible(true);/ 設(shè)置窗口可見setDefaultCloseOperation(EXIT_ON_CLOSE);/ 關(guān)閉窗口,退出程序public static void main(String args) JFrameDemo frame = new JFrameDemo();30方式1:獲得JFrame的內(nèi)容面板,再對其加入組件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)建一個帶標(biāo)題的窗口frame.setLayout(new FlowLayout();JButton bt=new JButton(按鈕);frame.getContentPane().add(bt);frame.setSize(300, 200);/ 設(shè)置窗口大小frame.setVisible(true);/ 設(shè)置窗口可見frame. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/關(guān)閉窗口,退出程序31方式1:

27、獲得JFrame的內(nèi)容面板,再對其加入組件public class JFrameDemo extends JFrame public JFrameDemo() super(Swing窗口);/ 調(diào)用超類的構(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è)置窗口可見setDefaultCloseOperation(EXIT_ON_CLOSE);/ 關(guān)閉窗口,退出程序public static void main(String args) JFrameDemo frame = new JFrameDemo();32方式2:建立一個中間容器,把組件添加到容器中,再把該容器置為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)用超類的構(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è)置窗口可見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)行過程中,當(dāng)用戶通過行程序的用戶界面進(jìn)行某個操作時,便引發(fā)一個相應(yīng)的事件。例如,在一個按鈕上單擊鼠標(biāo)時,該按鈕就是事件源,會產(chǎn)生一個ActionEvent類型的事件。(2)事件對象(Event object):封裝了發(fā)生事件的有關(guān)信息。對于不同的事件源,Java虛擬機(jī)會產(chǎn)生相應(yīng)類型的事件對象。是一個數(shù)據(jù)對象,用來描述用戶所執(zhí)行的操作

31、。Java中定義了很多事件類,分別用來描述用戶不同類型的操作。事件類包含在java.awt.event和javax.swing.event包中。(3)事件監(jiān)聽器(Event listener):當(dāng)事件發(fā)生時被通知到接受事件的事件監(jiān)聽器,然后調(diào)用事件監(jiān)聽器中對應(yīng)的方法響應(yīng)該事件。一個事件監(jiān)聽器是實(shí)現(xiàn)了系統(tǒng)規(guī)定的事件監(jiān)聽接口的類的對象。事件監(jiān)聽接口中提供了事件處理的抽象方法的描述。349.2 事件處理模型當(dāng)用戶單擊一個按鈕,或者單擊某個菜單項(xiàng),或者單擊窗口右上角的狀態(tài)按鈕時,這個動作就會觸發(fā)一個相應(yīng)的事件,該事件由AWT封裝成相應(yīng)的Event對象,該對象會觸發(fā)組件上注冊的事件監(jiān)聽器(特殊的Java

32、對象),事件監(jiān)聽器調(diào)用其內(nèi)部定義的相應(yīng)的方法來響應(yīng)該事件。35圖9-4 Java系統(tǒng)的事件監(jiān)聽接口java.awt.event包定義了Java系統(tǒng)的一組事件監(jiān)聽接口類型,一個監(jiān)聽接口往往聲明了一個以上的抽象方法。每個抽象方法對應(yīng)著要處理的事件動作,由用戶實(shí)現(xiàn)它。 EventListenerActionListenerAdjustmentListenerComponentListenerContainerListenerFocusListenerItemListenerKeyListenerMouseListenerMouseMotionListenerTextListenerWindowLis

33、tener36java.awt.event包中的事件類ObjectEventObjectAWTEventActionEventAdjustmentEventItemEventTextEventContainerEventFocusEventPaintEventWindowEventInputEventMouseWheelEventComponentEventKeyEventMouseEvent379.2 事件處理模型 2.當(dāng)需要對組件的某種事件進(jìn)行響應(yīng)和處理時,程序員必須完成兩個步驟:為組件注冊實(shí)現(xiàn)規(guī)定接口的事件監(jiān)聽器; 實(shí)現(xiàn)事件監(jiān)聽器接口中聲明的事件處理抽象方法。例如, button組件的事

34、件響應(yīng)過程:JButton button=new JButton(Press ); /(1)為button組件注冊事件監(jiān)聽器button.addActionListener(new ButtonHandler();ClassButtonHandler implementsActionListener /實(shí)現(xiàn)事件監(jiān)聽接口的類 public void actionPerformed( ActionEvent event ) /(2)實(shí)現(xiàn)事件處理方法。 /事件處理代碼 鼠標(biāo)單擊,觸發(fā)事件ActionEvent將調(diào)用方法actionPerformed389.2 事件處理模型注冊事件監(jiān)聽器為了能夠讓事件

35、監(jiān)聽器檢查某個組件(事件源)是否發(fā)生了某些事件,并且在發(fā)生時激活事件處理器進(jìn)行相應(yīng)的處理,必須在事件源上注冊事件監(jiān)聽器。這是通過使用事件源組件的以下方法來完成的:addXxxListener(事件監(jiān)聽器對象)Xxx對應(yīng)相應(yīng)的事件類。399.2 事件處理模型圖形界面程序(一個類)監(jiān)聽器類(含事件處理方法)監(jiān)聽器對象(含事件處理方法)實(shí)例化注冊外部動作事件對象產(chǎn)生并傳遞事件對象接收事件對象,激活事件處理器,實(shí)現(xiàn)預(yù)定功能事件源(例如一個按鈕)含有409.2 事件處理模型3. ActionEvent動作事件 ActionEvent:當(dāng)特定組件(例如Button)的動作(例如點(diǎn)擊按鈕)發(fā)生時,由組件生成

36、此動作事件。該事件被傳遞給使用組件的 addActionListener 方法注冊的每一個 ActionListener 對象,用以接收這類事件.能夠觸發(fā)這個事件的動作,主要包括:(1) 點(diǎn)擊按鈕(2) 雙擊一個列表中的選項(xiàng);(3) 選擇菜單項(xiàng);(4) 在文本框中輸入回車。419.2 事件處理模型ActionEvent事件常用的一些方法:(1) String getActionCommand( ):返回引發(fā)事件的動作的命令字符串。例如,對于Button按鈕返回的是Button的標(biāo)簽。對于JTextField返回的是文本內(nèi)容。 (2) String getSource( ):返回引發(fā)該事件的組件

37、對象(事件源)的引用。使用getSource( )方法可以區(qū)分產(chǎn)生動作命令的不同事件源下面將介紹各個GUI組件時將結(jié)合相應(yīng)的事件類型和事件監(jiān)聽器接口類型進(jìn)行程序設(shè)計(jì)的過程。429.3 命令按鈕JButton 命令按鈕(JButton)是一種組件,當(dāng)用戶通過單擊按鈕時將產(chǎn)生動作事件ActionEvent,以觸發(fā)特定的動作代碼,從而完成預(yù)先指定的功能。Swing中JButton既支持文本按鈕,也支持圖像按鈕,或兩者兼有。 439.3 命令按鈕JButton1創(chuàng)建按鈕對象JButton類常用的一組構(gòu)造方法:(1) JButton(String text):創(chuàng)建一個帶文本的按鈕。(2) JButton

38、(Icon icon) :創(chuàng)建一個帶圖標(biāo)的按鈕。(3)JButton(String text, Icon icon) :創(chuàng)建一個帶文本和圖標(biāo)的按鈕。 getClass().getResource()方法是從當(dāng)前.class文件路徑查找資源 2按鈕對象的常用方法 getLabel( ):返回按鈕的標(biāo)簽字符串; setLabel(String s):設(shè)置按鈕的標(biāo)簽為字符串s。449.3 命令按鈕JButton3ActionEvent事件響應(yīng)當(dāng)用戶單擊一個按鈕時就引發(fā)了一個動作事件ActionEvent。調(diào)用JButton的方法addActionListener給按鈕注冊實(shí)現(xiàn)ActionListen

39、er接口的事件監(jiān)聽器為這個接口的actionPerformed(ActionEvent e)方法書寫方法體。e.getSource( ):獲取引發(fā)動作事件的按鈕對象引用e.getActionCommand( ):獲取按鈕的標(biāo)簽。459.3 命令按鈕JButton例9-1 文本按鈕和圖像按鈕的程序設(shè)計(jì)示例 46實(shí)現(xiàn)事件監(jiān)聽器的4種方式事件監(jiān)聽器是一個特殊的Java對象,實(shí)現(xiàn)事件監(jiān)聽器有以下4種方式:內(nèi)部類形式:將事件監(jiān)聽器類定義成當(dāng)前類的內(nèi)部類。外部類形式:將事件監(jiān)聽器類定義成一個外部類。類本身作為事件監(jiān)聽器類:讓當(dāng)前類本身實(shí)現(xiàn)監(jiān)聽器接口或繼承事件適配器。匿名內(nèi)部類形式:使用匿名內(nèi)部類創(chuàng)建事件監(jiān)

40、聽器。471.使用內(nèi)部類定義事件監(jiān)聽器類import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Test extends JFrame public Test() super(事件處理模型);/ 調(diào)用超類的構(gòu)造犯法。setLayout(new FlowLayout();JButton button=new JButton(Press); /創(chuàng)建一個JButton按鈕button.addActionListener(new ButtonHandler();getContentPane().add(bu

41、tton);setSize(500, 600);/ 設(shè)置窗口大小setVisible(true);/ 設(shè)置窗口可見public static void main(String args) Test application=new Test(); /創(chuàng)建一個窗口application.setDefaultCloseOperation(EXIT_ON_CLOSE);/使用內(nèi)部類定義事件監(jiān)聽器類class ButtonHandler implements ActionListener/實(shí)現(xiàn)事件處理的方法public void actionPerformed(ActionEvent e)/事件處理代碼

42、JOptionPane.showMessageDialog(Test.this, 你按下的是+e.getActionCommand()+按鈕,事件處理,JOptionPane.PLAIN_MESSAGE);482.使用外部類定義事件監(jiān)聽器類import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Test extends JFrame public Test() super(事件處理模型);/ 調(diào)用超類的構(gòu)造犯法。setLayout(new FlowLayout();JButton button=ne

43、w JButton(Press); /創(chuàng)建一個JButton按鈕button.addActionListener(new ButtonHandler();getContentPane().add(button);setSize(500, 600);/ 設(shè)置窗口大小setVisible(true);/ 設(shè)置窗口可見public static void main(String args) Test application=new Test(); /創(chuàng)建一個窗口application.setDefaultCloseOperation(EXIT_ON_CLOSE);/使用外部部類定義事件監(jiān)聽器類cla

44、ss ButtonHandler implements ActionListener/實(shí)現(xiàn)事件處理的方法public void actionPerformed(ActionEvent e)/事件處理代碼JOptionPane.showMessageDialog(Test.this, 你按下的是+e.getActionCommand()+按鈕,事件處理,JOptionPane.PLAIN_MESSAGE);493.使用類本身定義事件監(jiān)聽器類import java.awt.*;import java.awt.event.*;import javax.swing.*;/使用類本身定義事件監(jiān)聽器類pu

45、blic class Test extends JFrame implements ActionListenerpublic Test() super(“事件處理模型”);/ 調(diào)用超類的構(gòu)造方法設(shè)置窗口標(biāo)題。setLayout(new FlowLayout();JButton button=new JButton(Press); /創(chuàng)建一個JButton按鈕button.addActionListener(this);getContentPane().add(button);setSize(500, 600);/ 設(shè)置窗口大小setVisible(true);/ 設(shè)置窗口可見 /實(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)建一個窗口application.setDefaultCloseOperation(EXIT_ON_CLOSE);504.使用匿名內(nèi)部類實(shí)現(xiàn)事件監(jiān)聽器imp

47、ort java.awt.*;import java.awt.event.*;import javax.swing.*;public class Test extends JFrame public Test() super(事件處理模型);/ 調(diào)用超類的構(gòu)造犯法。setLayout(new FlowLayout();nnJButton button = new JButton(Press); / 創(chuàng)建一個JButton按鈕/使用匿名內(nèi)部類定義事件監(jiān)聽器類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è)置窗口可見public static void main(String args) Test application = new Test(); / 創(chuàng)建

49、一個窗口application.setDefaultCloseOperation(EXIT_ON_CLOSE);519.4 標(biāo)簽、單行文本框、多行文本域與滾動條面板搭建GUI圖形界面使用最多的Swing組件:標(biāo)簽(JLabel)、單行文本框(JTextField、JTextPassword)多行文本域(JTextArea)滾動條面板(JScrollPane)529.4.1 標(biāo)簽 JLabel JLabel標(biāo)簽是用戶不能修改只能查看其內(nèi)容的文本顯示區(qū)域,它起到信息說明的作用。JLabel 對象可以顯示文本和圖像。539.4.1 標(biāo)簽 JLabel使用JLabel類的構(gòu)造方法創(chuàng)建標(biāo)簽對象。JLab

50、el類常用的構(gòu)造方法有:(1)JLabel(Stringtext)創(chuàng)建具有指定文本的JLabel對象(2)JLabel(Iconimage) 創(chuàng)建具有指定圖像的JLabel對象(3)JLabel(Stringtext inthorizontalAlignment) 水平對齊方式HorizontalAlignment值:SwingConstants接口中靜態(tài)常量:LEFT、CENTER、RIGHT、LEADING 或 TRAILING。(4)JLabel(Stringtext, Iconicon,inthorizontalAlignment) 創(chuàng)建具有指定文本、圖像和水平對齊方式的JLabel對

51、象,該標(biāo)簽在其顯示區(qū)內(nèi)垂直居中對齊。文本位于圖像的結(jié)尾。 549.4.1 標(biāo)簽 JLabel設(shè)置或讀取JLabel對象屬性的常用方法(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í)例的語句: label1=new JLabel( “用戶名 ); label1.setColor(Color.RED); 569.4.1 標(biāo)簽 JLabel 例:創(chuàng)建文本內(nèi)容為 “照片”, 圖像是czims.jpg,且整個標(biāo)簽水平靠左對齊的JLabel實(shí)例語句: Icon bug = new ImageIcon(getClass().getResource(CZIMS.JPG) ) label2 = new JLabel( “照片, bug,SwingConstants.LEFT ); /設(shè)置label2的文本相對于圖片的位置:水平方向居中對齊,垂直方向在圖

53、片的底部 label2.setHorizontalTextPosition( SwingConstants.CENTER );label2.setVerticalTextPosition( SwingConstants.BOTTOM ); 579.4.2 JTextField與JTextArea從JTextComponent父類派生單行文本框JTextField、JPasswordField允許編輯單行文本,JTextField顯示用戶輸入的內(nèi)容,JPasswordField隱藏用戶實(shí)際輸入的內(nèi)容。多行文本域JTextArea允許用戶編輯多行文本。滾動條面板JScrollPane :提供JTe

54、xtArea內(nèi)容水平滾動和縱向滾動。 589.4.2 JTextField與JTextArea1JTextField和JPasswordFieldJTextField常用的構(gòu)造方法:(1)JTextField()構(gòu)造一個內(nèi)容為空的JTextField實(shí)例。(2)JTextField(int columns)構(gòu)造一個內(nèi)容為空和指定列寬 的JTextField實(shí)例。(3)JTextField(String text) 構(gòu)造一個用指定文本的JTextField實(shí)例。(4)JTextField(String text, int columns)構(gòu)造一個指定文本和列寬的JTextField實(shí)例。 JPa

55、ssword類的構(gòu)造方法類似于JTextField.599.4.2 JTextField與JTextArea2JTextArea的常用構(gòu)造方法:JTextArea() 構(gòu)造一個內(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時)JTextArea(String text,int rows,int columns) 構(gòu)造具有指定文本、行數(shù)和列數(shù)的JTex

56、tArea實(shí)例。609.4.2 JTextField與JTextArea3JTextComponent對象的常用方法:void setText(String) 設(shè)置文本內(nèi)容String getText() 取得文本內(nèi)容void setEditable(boolean b)設(shè)置TextComponent是否為可編輯的(b值為true時)String getSelectedText()返回TextComponent中包含的選定文本619.4.2 JTextField與JTextArea4TextEvent和ActionEvent事件響應(yīng)JTextField和JTextArea的事件響應(yīng)首先由它們的

57、父類JTextComponent決定JTextComponent引發(fā)事件TextEvent當(dāng)用戶對文本做編輯修改操作時,將引發(fā)TextEvent文本改變事件。JTextField比JTextArea多產(chǎn)生一種事件ActionEvent 當(dāng)用戶在文本框中按回車鍵時,將引發(fā)ActionEvent動作事件。JTextArea卻不能產(chǎn)生ActionEvent事件.629.4.3 滾動條面板JScrollPane JScrollPane是帶滾動條的面板。它是一個容器組件,其作用是通過滾動條在一個較小的區(qū)域顯示較多大的內(nèi)容。 JScrollPane的構(gòu)造方法:JScrollPane(Component v

58、iew):創(chuàng)建一個顯示指定組件內(nèi)容的 JScrollPane,只要組件的內(nèi)容超過視圖大小就會顯示水平和垂直滾動條。 63例9-2 JLabel、JTextField、JPasswordField和JTextArea的應(yīng)用程序運(yùn)行輸出結(jié)果如圖9-7。程序的功能:(1)當(dāng)用戶分別在用戶名和口令的文本框中輸入內(nèi)容按回車鍵后,將在標(biāo)簽為“顯示用戶名或口令”的文本框中顯示用戶輸入的內(nèi)容。(2)在圖的下半部分定義了一個水平方向的Box對象,加入Box的組件按水平方向排列。在Box對象中加入了三個GUI組件:兩個JTextArea和一個JButton。 用戶可通過鼠標(biāo)選擇左邊的textArea1的內(nèi)容,然后

59、鼠標(biāo)單擊標(biāo)簽為“拷貝”按鈕,會將選中的textArea1的內(nèi)容拷貝到右邊JScrollPane中。兩個JTextArea對象分別放入兩個JScrollPane滾動條面板對象中. 649.5 JCheckBox和JRadioButton SwingGUI組件包含3種類型的狀態(tài)按鈕:JToggleButton復(fù)選框按鈕JCheckBox和單選按鈕JRadioButton按鈕都有開/關(guān)(真/假)兩種值。提供用戶在給定的數(shù)據(jù)中進(jìn)行選擇.Swing button 的繼承層次JComponentAbstractButtonJToggleButtonJRadioButtonJCheckBoxJButton6

60、51. 復(fù)選框(JCheckBox)JCheckBox提供簡單的“on/off”開關(guān),旁邊顯示文本標(biāo)簽。它只有兩種狀態(tài):選中和未選中。在一組復(fù)選框中,可以同時選擇多項(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)建一個帶文本和圖標(biāo)的復(fù)選框,并指定其

溫馨提示

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

最新文檔

評論

0/150

提交評論