九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

《圖形用戶界面》PPT課件

上傳人:san****019 文檔編號:16516360 上傳時(shí)間:2020-10-05 格式:PPT 頁數(shù):171 大小:1.07MB
收藏 版權(quán)申訴 舉報(bào) 下載
《圖形用戶界面》PPT課件_第1頁
第1頁 / 共171頁
《圖形用戶界面》PPT課件_第2頁
第2頁 / 共171頁
《圖形用戶界面》PPT課件_第3頁
第3頁 / 共171頁

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《圖形用戶界面》PPT課件》由會(huì)員分享,可在線閱讀,更多相關(guān)《《圖形用戶界面》PPT課件(171頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。

1、1,第9章 圖形用戶界面,鄭 莉,JAVA語言程序設(shè)計(jì),2,目錄,9.1 Applet 概述 9.2 Applet應(yīng)用程序接口 9.3 繪圖 9.4 Swing基礎(chǔ) 9.5 Swing的特點(diǎn)和概念 9.6 Swing組件 9.7 其它Swing特性 9.8 本章小結(jié) (說明:本章部分例題出自java_tutorial_sun),3,9.1 Applet 概述,Java Applet 一種嵌入HTML文檔中的Java程序 與Application相比,Applet具有明顯的優(yōu)點(diǎn) web瀏覽器提供了運(yùn)行Applet所需要的許多功能 Applet是在運(yùn)行時(shí)通過網(wǎng)絡(luò)從服務(wù)器端下載的,因而便于軟件的發(fā)布

2、和及時(shí)更新 Applet也有其局限性, 不能在客戶機(jī)上讀寫當(dāng)?shù)匚募?也不能連接除它所在的服務(wù)器以外的其它機(jī)器,4,在瀏覽器中加載一個(gè)Applet,功能是顯示一個(gè)字符串“This is a Java Applet!” import java.awt.Graphics; import javax.swing.JApplet; public class Ex9_1 extends JApplet public void paint(Graphics g) /重載JApplet類的paint方法 /參數(shù)是Graphics類的對象,是由瀏覽器傳遞過來的 super.paint(g); /調(diào)用其超類JAp

3、plet類的paint方法 g.drawString(This is a Java Applet!,25,25); ,9.1 Applet概述(續(xù)) 例9_1,Applet概述,5,在NetBeans IDE中運(yùn)行,9.1 Applet概述(續(xù)) 例9_1運(yùn)行結(jié)果,Applet概述,6,編譯ex9_1.java產(chǎn)生字節(jié)碼文件ex9_1.class。接下來就需要編寫一個(gè)HTML文件ex9_1.html來嵌入ex9_1.class 將ex9_1.html文件和Ex9_1.class文件放在同一個(gè)目錄下?,F(xiàn)在,在瀏覽器中打開這個(gè)HTML文件,當(dāng)瀏覽器遇到Applet標(biāo)記時(shí),就會(huì)自動(dòng)載入指定的clas

4、s文件,就會(huì)實(shí)現(xiàn)在屏幕上繪制一串字符的效果,9.1 Applet概述(續(xù)) 例9_1運(yùn)行結(jié)果,Applet概述,7,9.2 Applet應(yīng)用程序接口,JApplet類 一個(gè)applet程序需要繼承javax.swing包中的JApplet類,也可以繼承老的AWT組件中的Applet類, JApplet類屬于新的Swing組件 提供了applet在瀏覽器中運(yùn)行需要具備的特定方法 瀏覽器載入時(shí),要依次運(yùn)行init、start、paint方法 離開瀏覽器頁面時(shí),執(zhí)行stop 退出瀏覽器時(shí),執(zhí)行destroy 提供了所有這些方法的默認(rèn)實(shí)現(xiàn),所以我們在編寫自己的applet時(shí),就可以不必寫出全部方法,只

5、要繼承這個(gè)JApplet,然后重寫特定的方法來增加特殊功能,8,9.2 Applet應(yīng)用程序接口,Applet應(yīng)用程序接口,9,9.2 Applet應(yīng)用程序接口(續(xù)),Applet應(yīng)用程序接口,10,import javax.swing.*;. import java.awt.*; public class HelloSwingApplet extends JApplet public void init() JLabel label = new JLabel( You are successfully running a Swing applet!); label.setHorizontal

6、Alignment(JLabel.CENTER); label.setBorder(BorderFactory.createMatteBorder( 1,1,2,2,Color.black); getContentPane().add(label, BorderLayout.CENTER); ,9.2 Applet應(yīng)用程序接口(續(xù)) HelloSwingApplet.java,Applet應(yīng)用程序接口,11,9.3 繪圖,圖形環(huán)境和圖形對象 顏色和字體 使用Graphics類繪圖 使用Graphics2D類繪圖,12,9.3.1 圖形環(huán)境和圖形對象,坐標(biāo) GUI組件的左上角坐標(biāo)默認(rèn)為(0,0)

7、 從左上角到右下角,水平坐標(biāo)x和垂直坐標(biāo)y增加。 坐標(biāo)的單位是象素 Graphics對象 Graphics對象是專門管理圖形環(huán)境的。Graphics類是一個(gè)抽象類 設(shè)計(jì)一個(gè)抽象類Graphics可以給程序員提供一個(gè)與平臺無關(guān)的繪圖接口,因而程序員就可以以獨(dú)立于平臺的方式來使用圖形。在各個(gè)平臺上實(shí)現(xiàn)的Java系統(tǒng)將創(chuàng)建Graphics類的一個(gè)子類,來實(shí)現(xiàn)繪圖功能,但是這個(gè)子類對程序員是透明的,也就是說我們只能看得到Graphics類,卻不必關(guān)心其實(shí)現(xiàn) 在執(zhí)行paint方法時(shí),系統(tǒng)會(huì)傳遞一個(gè)指向特定平臺的Graphics子類的圖形對象g,繪 圖,13,9.3.2 顏色和字體,Java中有關(guān)顏色的類

8、是Color類,它在java.awt包中,這個(gè)類聲明了用于操作Java程序中顏色的方法和常量,繪 圖,14,9.3.2 顏色和字體,Font類有關(guān)字體控制,在java.awt包中,繪 圖,15,9.3.3 使用Graphics類繪圖,Graphics類 其對象可以繪制文本、線條、矩形、多邊形、橢圓、弧等多種圖形,繪 圖,18,用各種顏色繪制文字及各種圖形 import java.awt.*; import javax.swing.*; public class Ex9_2 extends JFrame public Ex9_2() super( “演示字體、顏色、繪圖” ); /調(diào)用基類構(gòu)造方

9、法 setSize( 480, 250 ); /設(shè)置窗口大小 setVisible( true ); /顯示窗口 public void paint( Graphics g ) super.paint( g ); / call superclasss paint method g.setFont( new Font( SansSerif, Font.BOLD, 12 ) ); g.setColor(Color.blue); /設(shè)置顏色 g.drawString(字體ScanSerif,粗體,12號,藍(lán)色,20,50);,9.3.3 使用Graphics類繪圖(續(xù)) Ex9_2.java,繪 圖

10、,19,g.setFont( new Font( Serif, Font.ITALIC, 14 ) ); g.setColor(new Color(255,0,0); g.drawString( 字體Serif,斜體,14號,紅色, 250, 50 ); g.drawLine(20,60,460,60); /繪制直線 g.setColor(Color.green); g.drawRect(20,70,100,50); /繪制空心矩形 g.fillRect(130,70,100,50); /繪制實(shí)心矩形 g.setColor(Color.yellow); g.drawRoundRect(240,

11、70,100,50,50,50); /繪制空心圓角矩形 g.fillRoundRect(350,70,100,50,50,50); /繪制實(shí)心圓角矩形 g.setColor(Color.cyan); g.draw3DRect(20,130,100,50,true); /繪制突起效果空心矩形 g.fill3DRect(130,130,100,50,false); /繪制凹陷效果實(shí)心矩形,9.3.3 使用Graphics類繪圖(續(xù)) Ex9_2.java,繪 圖,20,g.setColor(Color.pink); g.drawOval(240,130,100,50); /繪制空心橢圓 g.fil

12、lOval(350,130,100,50); /繪制實(shí)心橢圓 g.setColor(new Color(0,120,20); g.drawArc(20,190,100,50,0,90); /繪制一段圓弧 g.fillArc(130,190,100,50,0,90); /繪制扇形 g.setColor(Color.black); int xValues=250,280,290,300,330,310,320,290,260,270; int yValues=210,210,190,210,210,220,230,220,230,220; g.drawPolygon(xValues,yValues

13、,10); /繪制空心多邊形 int xValues2=360,390,400,410,440,420,430,400,370,380; g.fillPolygon(xValues2,yValues,10); /繪制實(shí)心多邊形 ,9.3.3 使用Graphics類繪圖(續(xù)) Ex9_2.java,繪 圖,21,public static void main( String args ) JFrame.setDefaultLookAndFeelDecorated(true); /設(shè)置窗口的外觀感覺為Java默認(rèn) Ex9_2 application = new Ex9_2(); applicati

14、on.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE ); 運(yùn)行結(jié)果,9.3.3 使用Graphics類繪圖(續(xù)) Ex9_2.java運(yùn)行結(jié)果,繪 圖,22,9.3.4 使用Graphics2D類繪圖,Java2D API 提供了高級的二維圖形功能 分布在java.awt、java.awt.image、java.awt.color、java.awt.font、java.awt.geom、java.awt.print和java.awt.image.renderable包中 它能輕松使你完成以下功能: 繪制任何寬度的直線 用漸變顏色和紋理來填充圖形 平

15、移、旋轉(zhuǎn)、伸縮、切變二維圖形,對圖像進(jìn)行模糊、銳化等操作 構(gòu)建重疊的文本和圖形,繪 圖,23,Graphics2D類 要想使用Java2D API,就必須通過一個(gè)該類的對象 是Graphics類的抽象子類 事實(shí)上,所有的paint方法用于繪圖操作的對象實(shí)際上是Graphics2D的一個(gè)子類實(shí)例,該實(shí)例傳遞給paint方法,并被向上轉(zhuǎn)型為Graphics類的實(shí)例。要訪問Graphics2D功能,必須使用如下語句將傳遞給paint方法的Graphics引用強(qiáng)制轉(zhuǎn)換為Graphics2D引用: Graphics2D g2d=(Graphics2D)g,9.3.4 使用Graphics2D類繪圖(續(xù))

16、,繪 圖,24,實(shí)現(xiàn)例9_1的功能,使用Java2D使文字出現(xiàn)漸變色效果 import java.awt.*; import javax.swing.*; public class Ex9_3 extends JApplet public void paint(Graphics g) super.paint(g); Graphics2D g2d=(Graphics2D)g; g2d.setPaint(new GradientPaint(0,0,Color.red,180,45,Color.yellow); g2d.drawString(This is a Java Applet!,25,25)

17、; ,9.3.4 使用Graphics2D類繪圖(續(xù)) Ex9_3.java,繪 圖,25,9.3.4 使用Graphics2D類繪圖(續(xù)) Ex9_3.java運(yùn)行結(jié)果,繪 圖,26,9.4 Swing基礎(chǔ),前面介紹了如何在屏幕上繪制普通的圖形,但如果需要繪制一個(gè)按鈕,并使其可以對點(diǎn)擊事件作出響應(yīng),就需要使用java Swing提供的組件 其實(shí)前面我們已經(jīng)用到的JFrame、JApplet都是Swing組件,它們分別代表窗口組件和Applet容器組件,27,9.4.1 JFC與Swing,JFC Java Foundation Classes(Java基礎(chǔ)類)的縮寫 是關(guān)于GUI 組件和服務(wù)

18、的完整集合 作為J2SE 的一個(gè)有機(jī)部分,主要包含5 個(gè)部分 AWT Java2D Accessibility Drag import java.awt.event.*; import javax.swing.*; public class Ex9_4 extends JApplet public void init() Container contentPane=getContentPane(); contentPane.setLayout(new GridLayout(2,1); JButton button=new JButton(Click me); final JLabel labe

19、l=new JLabel(); contentPane.add(button); contentPane.add(label); button.addActionListener( new ActionListener() public void actionPerformed(ActionEvent event) String information=JOptionPane.showInputDialog(請輸入一串字符); label.setText(information); );/創(chuàng)建監(jiān)聽器語句結(jié)束 /init方法結(jié)束 ,9.4.3在Applet和Application中應(yīng)用Swing

20、 (續(xù)) Ex9_4.java,Swing 基礎(chǔ),32,9.4.3在Applet和Application中應(yīng)用Swing (續(xù)) Ex9_4.java運(yùn)行結(jié)果,Swing 基礎(chǔ),33,把JApplet換成JFrame,將例9-4的程序改為Application import javax.swing.*; import java.awt.event.*; import java.awt.*; public class Ex9_5 public static void main(String args) JFrame f=new JFrame(“Simple Swing Application”)

21、; Container contentPane=f.getContentPane(); contentPane.setLayout(new GridLayout(2,1); JButton button=new JButton(Click me); final JLabel label=new JLabel(); contentPane.add(button);/添加按鈕 contentPane.add(label);/添加標(biāo)簽 button.addActionListener( new ActionListener() public void actionPerformed(ActionEv

22、ent event) String information=JOptionPane.showInputDialog(請輸入一串字符); label.setText(information); ); f.setSize(200,100);/設(shè)置大小 f.show();/顯示 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ,9.4.3在Applet和Application中應(yīng)用Swing (續(xù)) Ex9_5.java,Swing 基礎(chǔ),34,9.4.3在Applet和Application中應(yīng)用Swing (續(xù)) Ex9_5.java運(yùn)行結(jié)果,

23、Swing 基礎(chǔ),35,9.5 Swing的特點(diǎn)和概念,Swing GUI 組件 javax.swing包 源于AWT(package java.awt)的組件 包括外觀和感覺 外觀以及用戶如何和程序交互 輕量級組件 完全用Java寫成,不是用當(dāng)前平臺的GUI功能 某些Swing組件也是重量級的,外觀和功能受到本地窗口系統(tǒng)的限制,如 java.awt.Windows的子類 java.applet.Applet的子類,36,9.5.1 Swing的組件和容器層次,絕大多數(shù)Swing組件的繼承層次,Swing 的特點(diǎn)和概念,37,9.5.1 Swing的組件和容器層次(續(xù)),JComponent類

24、是除了頂層容器以外所有Swing組件的基類,根據(jù)繼承關(guān)系,我們可以在每個(gè)基類中找到大多數(shù)GUI組件的常見操作 Component 類 包含paint、repaint方法,可以在屏幕上繪制組件 大多數(shù)GUI組件直接或間接擴(kuò)展Component Container 類 容納相關(guān)組件 包括add方法,用來添加組件 包括setLayout方法,這個(gè)方法可用來設(shè)置布局,以幫助Container對象對其中的組件進(jìn)行定位和設(shè)置組件大小 JComponent 類多數(shù)Swing組件的超類 可抽換的外觀和感覺,即可根據(jù)需求定制外觀和感覺。 快捷鍵 (通過鍵盤直接訪問GUI組件) 一般的事件處理功能,Swing 的

25、特點(diǎn)和概念,38,通常將javax.swing包里的Swing組件歸為三個(gè)層次 頂層容器 中間層容器 原子組件,9.5.1 Swing的組件和容器層次(續(xù)),Swing 的特點(diǎn)和概念,39,頂層容器 Swing提供三個(gè)頂層容器的類 JFrame 實(shí)現(xiàn)單個(gè)主窗口 JDialog 實(shí)現(xiàn)一個(gè)二級窗口(對話框) JApplet 在瀏覽器窗口中實(shí)現(xiàn)一個(gè)applet顯示區(qū)域 必須和操作系統(tǒng)打交道,所以都是重量級組件 從繼承結(jié)構(gòu)上來看,它們分別是從原來AWT組件的Frame、Dialog和Applet類繼承而來 每個(gè)使用Swing組件的Java程序都必須至少有一個(gè)頂層容器,別的組件都必須放在這個(gè)頂層容器上才

26、能顯現(xiàn)出來,9.5.1 Swing的組件和容器層次(續(xù)) 頂層容器,Swing 的特點(diǎn)和概念,40,中間層容器 其存在的目的僅僅是為了容納別的組件 分為兩類 一般用途的 JPanel JScrollPane JSplitPane JTabbedPane JToolBar 特殊用途的 JInternalFrame JRootPane 可以直接從頂層容器中獲得一個(gè)JRootPane對象來直接使用,而別的中間容器使用的時(shí)候需要新建一個(gè)對象,9.5.1 Swing的組件和容器層次(續(xù)) 中間層容器,Swing 的特點(diǎn)和概念,41,原子組件 通常是在圖形用戶界面中和用戶進(jìn)行交互的組件 基本功能是和用戶交

27、互信息,而不像前兩種組件那樣是用來容納別的組件的 根據(jù)功能的不同,可被分為三類 顯示不可編輯信息的JLabel、JProgressBar、JToolTip 有控制功能、可以用來輸入信息的JButton、JCheckBox、JRadioButton、JComboBox、JList、JMenu、JSlider、JSpinner、JTexComponent等 能提供格式化的信息并允許用戶選擇的JColorChooser、JFileChooser、JTable、JTree,9.5.1 Swing的組件和容器層次(續(xù)) 原子組件,Swing 的特點(diǎn)和概念,42,三層容器結(jié)構(gòu)示例 import javax

28、.swing.*; import java.awt.*; public class Ex9_6 public static void main(String args) JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame=new JFrame(Swing Frame); Container contentPane=frame.getContentPane(); JPanel panel=new JPanel(); panel.setBorder(BorderFactory.createLineBorder(Color.black,

29、5); panel.setLayout(new GridLayout(2,1); JLabel label=new JLabel(Label,SwingConstants.CENTER); JButton button=new JButton(Button); panel.add(label); panel.add(button); contentPane.add(panel); frame.pack();/對組件進(jìn)行排列 frame.show();/顯示 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ,9.5.1 Swing的組件

30、和容器層次(續(xù)) 例9_6,Swing 的特點(diǎn)和概念,43,程序說明 首先創(chuàng)建一個(gè)JFrame類頂級容器 然后獲得頂級容器的內(nèi)容面板contentPane,只有通過它才能加入其他組件。 然后創(chuàng)建一個(gè)JPanel類的中間容器panel,并設(shè)置邊框以及布局 然后創(chuàng)建原子組件Label,button,并將它們添加到中間容器上 然后將中間容器通過內(nèi)容面板添加到頂層容器上,并/對組件進(jìn)行排列,9.5.1 Swing的組件和容器層次(續(xù)) 例9_6運(yùn)行結(jié)果,Swing 的特點(diǎn)和概念,44,9.5.1 Swing的組件和容器層次(續(xù)) Swing組件列表,Swing 的特點(diǎn)和概念,45,9.5.2 布局管理

31、,如何將下級組件有秩序地?cái)[在上一級容器中 在程序中具體指定每個(gè)組件的位置 使用布局管理器(Interface LayoutManager) 布局管理器 使用方法是通過調(diào)用容器對象的setLayout方法,并以某種布局管理器對象為參數(shù),例如: Container contentPane = frame.getContentPane(); contentPane.setLayout(new FlowLayout(); 使用布局管理器可以更容易地進(jìn)行布局,而且當(dāng)改變窗口大小時(shí),它還會(huì)自動(dòng)更新版面來配合窗口的大小,不需要擔(dān)心版面會(huì)因此混亂,Swing 的特點(diǎn)和概念,46,9.5.2 布局管理(續(xù)),在

32、Java中有很多實(shí)現(xiàn)LayoutManager接口的類,經(jīng)常用到的有以下幾個(gè) BorderLayout FlowLayout GridLayout CardLayout GridBagLayout BoxLayout SpringLayout 上一節(jié)提到的內(nèi)容面板(content pane)默認(rèn)使用的就是BorderLayout,它可以將組件放置到五個(gè)區(qū)域:東、西、南、北、中,Swing 的特點(diǎn)和概念,47,在該例中,引用了SUN公司提供的幾個(gè)的示例程序,演示了布局管理器的使用方法和效果 BorderLayoutDemo.java及其運(yùn)行效果 BorderLayout以將組件放置到五個(gè)區(qū)域:東

33、、西、南、北、中,9.5.2 布局管理(續(xù)) 例9_7,Swing 的特點(diǎn)和概念,48,FlowLayoutDemo.java FlowLayout是JPanel默認(rèn)使用的布局管理器,它只是簡單地把組件放在一行,如果容器不是足夠?qū)拋砣菁{所有組件,就會(huì)自動(dòng)開始新的一行,9.5.2 布局管理(續(xù)) 例9_7,Swing 的特點(diǎn)和概念,49,GridLayoutDemo.java GridLayout將按照其構(gòu)造方法中程序員提供的行數(shù)和列數(shù)將界面分為等大的若干塊,組件被等大地按加載順序放置其中,9.5.2 布局管理(續(xù)) 例9_7,Swing 的特點(diǎn)和概念,50,CardLayoutDemo.jav

34、a CardLayout可以實(shí)現(xiàn)在一個(gè)區(qū)域出現(xiàn)不同的組件布局,就像在一套卡片中選取其中的任意一張一樣。它經(jīng)常由一個(gè)復(fù)選框控制這個(gè)區(qū)域顯示哪一組組件,可通過組合框像選擇卡片一樣選擇某一種布局,9.5.2 布局管理(續(xù)) 例9_7,Swing 的特點(diǎn)和概念,51,GridBagLayoutDemo.java GridBagLayout把組件放置在網(wǎng)格中,這一點(diǎn)類似于GridLayout,但它的優(yōu)點(diǎn)在于不僅能設(shè)置組件擺放的位置,還能設(shè)置該組件占多少行/列。這是一種非常靈活的布局管理器,9.5.2 布局管理(續(xù)) 例9_7,Swing 的特點(diǎn)和概念,52,BoxLayoutDemo.java BoxL

35、ayout將組件放在單一的行或列中,和FlowLayout不同的是,它可以考慮到組件的對齊方式,最大、最小、優(yōu)選尺寸,9.5.2 布局管理(續(xù)) 例9_7,Swing 的特點(diǎn)和概念,53,SpringDemo.java SpringLayout是一種靈活的布局管理器。它能夠精確指定組件之間的間距。組件之間的距離通過Spring類的對象來表示,每個(gè)spring有四個(gè)屬性,最小值,最大值,優(yōu)選值和實(shí)際值。每個(gè)組件的spring對象集合在一起就構(gòu)成了SpringLayout.Constraints對象,9.5.2 布局管理(續(xù)) 例9_7,Swing 的特點(diǎn)和概念,54,9.5.3 事件處理,GUI

36、是由事件驅(qū)動(dòng)的,一些常見的事件包括: 移動(dòng)鼠標(biāo) 單雙擊鼠標(biāo)各個(gè)按鈕 單擊按鈕 在文本字段輸入 在菜單中選擇菜單項(xiàng) 在組合框中選擇、單選和多選 拖動(dòng)滾動(dòng)條 關(guān)閉窗口 Swing通過事件對象來包裝事件,程序可以通過事件對象獲得事件的有關(guān)信息,Swing 的特點(diǎn)和概念,55,9.5.3 事件處理(續(xù)) Swing組件的事件對象,Swing 的特點(diǎn)和概念,56,編寫事件處理程序時(shí),要注意三個(gè)概念 事件源 與用戶進(jìn)行交互的GUI組件,表示事件來自于哪個(gè)組件或?qū)ο?比如要對按鈕被按下這個(gè)事件編寫處理程序,按鈕就是事件源 事件監(jiān)聽器 負(fù)責(zé)監(jiān)聽事件并做出響應(yīng) 一旦它監(jiān)視到事件發(fā)生,就會(huì)自動(dòng)調(diào)用相應(yīng)的事件處理程

37、序作出響應(yīng) 事件對象 封裝了有關(guān)已發(fā)生的事件的信息 例如按鈕被按下就是一個(gè)要被處理的事件,當(dāng)用戶按下按鈕時(shí),就會(huì)產(chǎn)生一個(gè)事件對象。事件對象中包含事件的相關(guān)信息和事件源,9.5.3 事件處理(續(xù)) 事件處理機(jī)制的三個(gè)部分,Swing 的特點(diǎn)和概念,57,程序員應(yīng)完成的兩項(xiàng)任務(wù) 為事件源注冊一個(gè)事件監(jiān)聽器 實(shí)現(xiàn)事件處理方法,9.5.3 事件處理(續(xù)) 程序員應(yīng)完成的兩項(xiàng)任務(wù),Swing 的特點(diǎn)和概念,58,事件源 提供注冊監(jiān)聽器或取消監(jiān)聽器的方法 維護(hù)一個(gè)已注冊的監(jiān)聽器列表,如有事件發(fā)生,就會(huì)通知每個(gè)已注冊的監(jiān)聽器 一個(gè)事件源可以注冊多個(gè)事件監(jiān)聽器,每個(gè)監(jiān)聽器又可以對多種事件進(jìn)行相應(yīng),例如一個(gè)JF

38、rame事件源上可以注冊 窗口事件監(jiān)聽器,響應(yīng) 窗口關(guān)閉 窗口最大化 窗口最小化 鼠標(biāo)事件監(jiān)聽器,響應(yīng) 鼠標(biāo)點(diǎn)擊 鼠標(biāo)移動(dòng),9.5.3 事件處理(續(xù)) 事件源,Swing 的特點(diǎn)和概念,59,事件監(jiān)聽器 是一個(gè)對象,通過事件源的addListener方法被注冊到某個(gè)事件源上 不同的Swing組件可以注冊不同的事件監(jiān)聽器 一個(gè)事件監(jiān)聽器中可以包含有對多種具體事件的專用處理方法 例如用于處理鼠標(biāo)事件的監(jiān)聽器接口MouseListener中就包含有對應(yīng)于鼠標(biāo)壓下、放開、進(jìn)入、離開、敲擊五種事件的相應(yīng)方法mousePressed、mouseReleased、mouseEntered、mouseExit

39、ed、mouseClicked,這五種方法都需要一個(gè)事件對象作為參數(shù),9.5.3 事件處理(續(xù)) 事件監(jiān)聽器,Swing 的特點(diǎn)和概念,60,通常我們用到的事件對象有 ActionEvent 發(fā)生在按下按鈕、選擇了一個(gè)項(xiàng)目、在文本框中按下回車鍵 ItemEvent 發(fā)生在具有多個(gè)選項(xiàng)的組件上,如JCheckBox、JComboBox ChangeEvent 用在可設(shè)定數(shù)值的拖曳桿上,例如JSlider、JProgressBar等 WindowEvent 用在處理窗口的操作 MouseEvent 用于鼠標(biāo)的操作,9.5.3 事件處理(續(xù)) 事件對象,Swing 的特點(diǎn)和概念,61,9.5.3 事

40、件處理(續(xù)) Swing事件源可能觸發(fā)的事件及對應(yīng)的事件監(jiān)聽器,Swing 的特點(diǎn)和概念,62,9.5.3 事件處理(續(xù)) Swing事件源可能觸發(fā)的事件及對應(yīng)的事件監(jiān)聽器,Swing 的特點(diǎn)和概念,63,9.5.3 事件處理(續(xù)) Swing事件源可能觸發(fā)的事件及對應(yīng)的事件監(jiān)聽器,Swing 的特點(diǎn)和概念,64,事件監(jiān)聽器接口 例如MouseListener是一個(gè)接口,為了在程序中創(chuàng)建一個(gè)鼠標(biāo)事件監(jiān)聽器的對象,我們需要實(shí)現(xiàn)其所有五個(gè)方法,在方法體中,我們可以通過鼠標(biāo)事件對象傳遞過來的信息(例如點(diǎn)擊的次數(shù),坐標(biāo)),實(shí)現(xiàn)各種處理功能 事件監(jiān)聽器適配器類 有時(shí)我們并不需要對所有事件進(jìn)行處理,為此S

41、wing提供了一些適配器類Adapter,這些類含有所有Listener中方法的默認(rèn)實(shí)現(xiàn)(就是什么也不做),因此我們就只需編寫那些需要進(jìn)行處理的事件的方法。例如,如果只想對鼠標(biāo)敲擊事件進(jìn)行處理,如果使用MouseAdapter類,則只需要重寫mouseClicked方法就可以了,9.5.3 事件處理(續(xù)) 事件監(jiān)聽器接口和事件監(jiān)聽器適配器類,Swing 的特點(diǎn)和概念,65,實(shí)現(xiàn)事件監(jiān)聽器接口 這種方法需要實(shí)現(xiàn)接口中所有的方法,對我們不需要進(jìn)行處理的事件方法,也要列出來,其方法體使用一對空的花括號 繼承事件監(jiān)聽器適配器類 只需要重寫我們感興趣的事件 使用匿名內(nèi)部類 特別適用于已經(jīng)繼承了某個(gè)父類(

42、例如Applet程序,主類必須繼承JApplet類或Applet類),則根據(jù)java語法規(guī)則,就不能再繼承適配器類的情況,而且使用這種方法程序看起來會(huì)比較清楚明了,9.5.3 事件處理(續(xù)) 三種實(shí)現(xiàn)事件處理的方法,Swing 的特點(diǎn)和概念,66,創(chuàng)建一窗口,當(dāng)鼠標(biāo)在窗口中點(diǎn)擊時(shí),在窗口標(biāo)題欄中顯示點(diǎn)擊位置坐標(biāo)。方法一:實(shí)現(xiàn)MouseListener接口 import java.awt.event.*; /載入MouseListener類所在的包 import javax.swing.*; /載入JFrame所在的包 public class Ex9_8_1 implements MouseL

43、istener JFrame f; public Ex9_8_1() f=new JFrame(); /新建一窗口 f.setSize(300,150); f.show(); f.addMouseListener(this); /為窗口增加鼠標(biāo)事件監(jiān)聽器 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); public void mousePressed(MouseEvent e) public void mouseReleased(MouseEvent e) public void mouseEntered(MouseEvent e) publ

44、ic void mouseExited(MouseEvent e) public void mouseClicked(MouseEvent e) f.setTitle(點(diǎn)擊坐標(biāo)為 (+e.getX()+, +e.getY public static void main(String args) new Ex9_8_1(); ,9.5.3 事件處理(續(xù)) 例9_8_1,Swing 的特點(diǎn)和概念,67,繼承MouseAdapter類 import java.awt.event.*; /載入MouseAdapter所在的包 import javax.swing.*; public class Ex9

45、_8_2 extends MouseAdapter JFrame f; public Ex9_8_2() f=new JFrame(); f.setSize(300,150); f.show(); f.addMouseListener(this); f.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); public void mouseClicked(MouseEvent e) f.setTitle(點(diǎn)擊坐標(biāo)為 (+e.getX()+, +e.getY()+); public static void main(String args) new Ex

46、9_8_2(); ,9.5.3 事件處理(續(xù)) 例9_8_2,Swing 的特點(diǎn)和概念,68,方法三:使用匿名內(nèi)部類 import java.awt.event.*; import javax.swing.*; public class Ex9_8_3 JFrame f; public Ex9_8_3() f=new JFrame(); f.setSize(300,150); f.show(); f.addMouseListener(new MouseAdapter() public void mouseClicked(MouseEvent e) f.setTitle(點(diǎn)擊坐標(biāo)為 (+e.ge

47、tX()+, +e.getY()+); ); /為窗口添加鼠標(biāo)事件監(jiān)聽器語句結(jié)束 f.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); );/為窗口添加窗口事件監(jiān)聽器語句結(jié)束 public static void main(String args) new Ex9_8_3(); ,9.5.3 事件處理(續(xù)) 例9_8_3,Swing 的特點(diǎn)和概念,69,采用三種不同方法的程序,其運(yùn)行效果都是一樣的,當(dāng)鼠標(biāo)在窗口中點(diǎn)擊的時(shí)候,窗口標(biāo)題欄將出現(xiàn)所點(diǎn)位置的坐標(biāo)信

48、息,9.5.3 事件處理(續(xù)) 例9_8運(yùn)行結(jié)果,Swing 的特點(diǎn)和概念,70,9.6 Swing組件,組件和容器 容器層次結(jié)構(gòu) 是一個(gè)以頂層容器為根的樹狀組件集合 為了顯示在屏幕上,每個(gè)組件必須是一套容器層次結(jié)構(gòu)的一部分 每個(gè)組件只能放置在某個(gè)容器內(nèi)一次 如果某個(gè)組件已經(jīng)在一個(gè)容器中,又將它加到另外一個(gè)容器中,這個(gè)組件就會(huì)從第一個(gè)容器中清除,71,9.6.1 頂層容器,Swing提供了3個(gè)頂層容器類:JFrame JApplet JDialog 都是重量級組件,分別繼承了AWT組件Frame、Applet和Dialog 每個(gè)頂層容器都有一個(gè)內(nèi)容面板,通常直接或間接的容納別的可視組件 可以有

49、選擇地為頂層容器添加菜單,菜單被放置在頂層容器上,但是在內(nèi)容面板之外,Swing 組件,72,java.lang.Object java.awt.Component java.awt.Container java.awt.Window java.awt.Frame javax.swing.JFrame 每個(gè)包含Swing 組件的主窗口都應(yīng)用JFrame 來實(shí)現(xiàn),9.6.1 頂層容器(續(xù)) JFrame的繼承結(jié)構(gòu),Swing 組件,73,java.lang.Object java.awt.Component java.awt.Container java.awt.Panel java.awt.A

50、pplet javax.swing.JApplet 每個(gè)包含Swing 組件的Applet 都應(yīng)作為JApplet 的子類來實(shí)現(xiàn),Swing 組件,9.6.1 頂層容器(續(xù)) JApplet的繼承結(jié)構(gòu),74,java.lang.Object java.awt.Component java.awt.Container java.awt.Window java.awt.Dialog javax.swing.JDialog 要實(shí)現(xiàn)對話框,需要從JDialog派生一個(gè)類,Swing 組件,9.6.1 頂層容器(續(xù)) JDialog的繼承結(jié)構(gòu),75,9.6.1 頂層容器(續(xù)) 如何獲得一個(gè)頂層容器,JA

51、pplet類的頂層容器由瀏覽器提供,通常我們不需要自己產(chǎn)生一個(gè)JApplet類的對象。JFrame和JDialog通過構(gòu)造方法進(jìn)行創(chuàng)建,Swing 組件,76,9.6.1 頂層容器(續(xù)) 如何獲得一個(gè)頂層容器續(xù),Swing 組件,77,9.6.1 頂層容器(續(xù)) FrameDemo.java,import java.awt.*; import java.awt.event.*; import javax.swing.*; public class FrameDemo public static void main(String s) JFrame frame = new JFrame(Fram

52、eDemo); frame.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); JLabel emptyLabel = new JLabel(); emptyLabel.setPreferredSize(new Dimension(175, 100); frame.getContentPane().add(emptyLabel, BorderLayout.CENTER); frame.pack(); frame.setVisible(true); ,S

53、wing 組件,78,import java.awt.*; import java.awt.event.*; import javax.swing.*; public class TopLevelDemo public static void main(String s) JFrame frame = new JFrame(TopLevelDemo); frame.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); JLabel yellowLabel

54、 = new JLabel(); yellowLabel.setOpaque(true); yellowLabel.setBackground(Color.yellow); yellowLabel.setPreferredSize(new Dimension(200, 180); JMenuBar cyanMenuBar = new JMenuBar(); cyanMenuBar.setOpaque(true); cyanMenuBar.setBackground(Color.cyan); cyanMenuBar.setPreferredSize(new Dimension(200, 20);

55、 frame.setJMenuBar(cyanMenuBar); frame.getContentPane().add(yellowLabel, BorderLayout.CENTER); frame.pack(); frame.setVisible(true); ,9.6.1 頂層容器(續(xù)) TopLevelDemo.java,Swing 組件,79,JDialog 必須實(shí)現(xiàn)對話框中的每一個(gè)組件 JOptionPane 只要顯示一段文字,或是做一些簡單的選擇的簡單對話框 在javax.swing包內(nèi) 通過使用這個(gè)類提供的一些靜態(tài)方法showDialog,就可以產(chǎn)生四種簡單的對話框 它們的方法

56、參數(shù)中絕大部分(除了輸入對話框可以不指定父窗口)都需要提供一個(gè)父窗口組件ParentComponent,只有關(guān)閉這些簡單的對話框后,才可以返回到其父窗口,也就是說,它們絕大部分都是模態(tài)的,9.6.1 頂層容器(續(xù)) JOptionPane類,Swing 組件,80,9.6.2 中間層容器,中間層容器存在的目的僅僅是為了容納別的組件,它分為兩類 一般用途的 JPanel JScrollPane JSplitPane JTabbedPane JToolBar 特殊用途的 JInternalFrame JRootPane(比較特殊,它由好幾個(gè)部分構(gòu)成,我們可以直接從頂層容器中獲得一個(gè)JRootPan

57、e對象來直接使用,而不需要像別的中間容器那樣,使用的時(shí)候需要新建一個(gè)對象),Swing 組件,81,JRootPane的層次結(jié)構(gòu) glassPane 默認(rèn)狀態(tài)下是隱藏的 可以使用glassPane來截獲所有要到達(dá)JRootPane別的部分的事件 layeredPane 分為很多層(layer),每層都有一個(gè)代表層深度的整數(shù)值(Z-order),深度值高的組件將覆蓋在深度值低的組件上 contentPane 所在層的深度值是-30000 一般我們將所有組件添加到contentPane上 JmenuBar 所在層的深度值是-30000 是可選的,如果沒有,contentPane就會(huì)充滿整個(gè)頂層容器

58、,9.6.2 中間層容器(續(xù)) JRootPane類,Swing 組件,82,JPanel 是一種經(jīng)常使用的輕量級中間容器 在默認(rèn)狀態(tài)下,除了背景色外它并不繪制任何東西 可以很容易的為它設(shè)置邊框和繪制特性,我們可以把它設(shè)置為頂層容器contentPane。有效地利用JPanel可以使版面管理更為容易 可以使用布局管理器來規(guī)劃它所容納的組件的位置和大小 可以通過setLayout方法來改變其布局 也可以在創(chuàng)建一個(gè)JPanel對象時(shí)就為它確定某種布局方式。在默認(rèn)狀態(tài)下panel使用FlowLayout布局,將各組件布局在一行,9.6.2 中間層容器(續(xù)) JPanel類,Swing 組件,83,9

59、.6.2 中間層容器(續(xù)) JPanel類常用API,Swing 組件,84,Converter.java 用到如下類,都放在JPanelDemo包中 ConversionPanel.java ConverterRangeModel.java DecimalField.java FollowerRangeModel.java FormattedDocument.java Unit.java,9.6.2 中間層容器(續(xù)) JPanel示例:Converter.java,Swing 組件,85,JScrollPane容器 當(dāng)容器內(nèi)要容納的內(nèi)容大于容器大小的時(shí)候,我們希望容器能夠有一個(gè)滾動(dòng)條,通過拖

60、動(dòng)滑塊,就可以看到更多的內(nèi)容。JScrollPane就是能夠?qū)崿F(xiàn)這種功能的特殊容器 由九個(gè)部分組成,包括一個(gè)中心顯示地帶、四個(gè)角和四條邊,9.6.2 中間層容器(續(xù)) JScrollPane,Swing 組件,86,9.6.2 中間層容器(續(xù)) JScrollPane常用API,Swing 組件,87,9.6.2 中間層容器(續(xù)) JScrollPane常用API,Swing 組件,88,9.6.2 中間層容器(續(xù)) ScrollDemo2.java,Swing 組件,89,JSplitPane 可以把兩個(gè)組件顯示在兩個(gè)顯示區(qū)域內(nèi),且隨著區(qū)域間分隔線的拖動(dòng),區(qū)域內(nèi)組件的大小也隨之發(fā)生變動(dòng) 它允

61、許設(shè)置水平分割或者垂直分割;也允許設(shè)置動(dòng)態(tài)拖曳功能(拖動(dòng)分界線時(shí)兩邊組件是否會(huì)隨著拖曳動(dòng)態(tài)改變大小還是在拖曳結(jié)束后才改動(dòng)) 我們通常先把組件放到Scroll Pane中,再把Scroll Pane放到Split Pane中。這樣在每部分窗口中,都可以拖動(dòng)滾動(dòng)條看到組件的全部內(nèi)容,9.6.2 中間層容器(續(xù)) JSplitPane,Swing 組件,90,9.6.2 中間層容器(續(xù)) JSplitPane常用API,Swing 組件,91,9.6.2 中間層容器(續(xù)) JSplitPane常用API,Swing 組件,92,import java.awt.*; import java.awt.e

62、vent.*; import javax.swing.*; import javax.swing.event.*; import java.util.*; public class SplitPaneDemo implements ListSelectionListener private Vector imageNames; private JLabel picture; private JList list; private JSplitPane splitPane; public SplitPaneDemo() ResourceBundle imageResource; try /Rea

63、d image names from a properties file imageResource = ResourceBundle.getBundle(imagenames); String imageNamesString = imageResource.getString(images); imageNames = parseList(imageNamesString); catch (MissingResourceException e) System.exit(1); ,9.6.2 中間層容器(續(xù)) JSplitPaneDemo.java,Swing 組件,93,list = ne

64、w JList(imageNames); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list.setSelectedIndex(0); list.addListSelectionListener(this); JScrollPane listScrollPane = new JScrollPane(list); ImageIcon firstImage = new ImageIcon(./build/classes/+(String)imageNames.firstElement(); picture = new JLabel(firstImage); picture.setPreferre

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!