版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第九章第九章 Swing圖形用戶界面圖形用戶界面n9.1 概述概述n9.2 容器組件容器組件n9.3 基本組件基本組件n9.4 布局管理器布局管理器n9.5 事件處理模型事件處理模型n9.6 本章小結(jié)本章小結(jié)29.1 概述概述n圖形用戶界面圖形用戶界面(GUI)lCommand Line Graphics User Interfacel數(shù)據(jù)的圖形顯示形式數(shù)據(jù)的圖形顯示形式l友好的交互方式友好的交互方式l簡(jiǎn)化計(jì)算機(jī)軟件的學(xué)習(xí)過(guò)程簡(jiǎn)化計(jì)算機(jī)軟件的學(xué)習(xí)過(guò)程lGUI示例示例jdk1.7demojfcSwingSet2GUI組件組件: Labels, Text fields, Buttons等等等等3
2、9.1 概述概述n在在Java語(yǔ)言中,有兩個(gè)包(語(yǔ)言中,有兩個(gè)包(java.awt和和javax.swing)囊括)囊括了實(shí)現(xiàn)圖形用戶界面的所有基本元素,這些基本元素主要了實(shí)現(xiàn)圖形用戶界面的所有基本元素,這些基本元素主要包括包括容器、組件、繪圖工具和布局管理器容器、組件、繪圖工具和布局管理器等。等。 njava.awt是是java1.1用來(lái)建立用來(lái)建立GUI的圖形包,的圖形包, awt是抽象窗是抽象窗口工具包(口工具包(Abstract Window Toolkit)的縮寫(xiě),其中的組)的縮寫(xiě),其中的組件常被稱(chēng)為件常被稱(chēng)為AWT組件。組件。njavax.swing是是Java2提出的提出的AWT
3、的改進(jìn)包,主要改善了組的改進(jìn)包,主要改善了組件的顯示外觀,增強(qiáng)了組件的控制能力。件的顯示外觀,增強(qiáng)了組件的控制能力。49.1 概述概述n早期版本的早期版本的AWTAWT組件組件l在在java.awtjava.awt包里,包括包里,包括ButtonButton、CheckboxCheckbox、ScrollbarScrollbar等,等,都是都是ComponentComponent類(lèi)的子類(lèi)類(lèi)的子類(lèi)l大部分含有大部分含有native codenative code,所以隨操作系統(tǒng)平臺(tái)的不同會(huì),所以隨操作系統(tǒng)平臺(tái)的不同會(huì)顯示出不同的樣子,而不能進(jìn)行更改,是重量級(jí)組件顯示出不同的樣子,而不能進(jìn)行更改,
4、是重量級(jí)組件(heavyweight components)(heavyweight components)l沒(méi)有彈性、缺乏效率沒(méi)有彈性、缺乏效率559.1 概述概述nAWT與與Swingljava.awt包中的類(lèi)及相互關(guān)系可以用下圖來(lái)描述:包中的類(lèi)及相互關(guān)系可以用下圖來(lái)描述:事件類(lèi)字體類(lèi)GraphicsComponent顏色類(lèi)布局管理類(lèi)java.lang.ObjectCheckboxContainerButtonWindowPanelAppletDialogFrameList圖像類(lèi)菜單類(lèi)Scrollpane69.1 概述概述n較新的較新的SwingSwing組件組件l其名稱(chēng)都是在原來(lái)其名稱(chēng)都
5、是在原來(lái)AWTAWT組件名稱(chēng)前加上組件名稱(chēng)前加上J J,例如,例如JButtonJButton、JCheckBoxJCheckBox、JScrollbarJScrollbar等,都是等,都是JComponentJComponent類(lèi)的子類(lèi)類(lèi)的子類(lèi)lJava1.2Java1.2推出,架構(gòu)在推出,架構(gòu)在 AWT AWT 之上,是之上,是AWTAWT的擴(kuò)展而不的擴(kuò)展而不是取代是取代, AWT, AWT仍然是仍然是SwingSwing的一個(gè)必備補(bǔ)充。的一個(gè)必備補(bǔ)充。l完全是由完全是由javajava語(yǔ)言編寫(xiě)的語(yǔ)言編寫(xiě)的,其外觀和功能不依賴(lài)于任何,其外觀和功能不依賴(lài)于任何由宿主平臺(tái)的窗口系統(tǒng)所提供的代碼
6、,是輕量級(jí)組件由宿主平臺(tái)的窗口系統(tǒng)所提供的代碼,是輕量級(jí)組件(lightweight componentslightweight components)l可提供更豐富的視覺(jué)感受,被越來(lái)越多地使用可提供更豐富的視覺(jué)感受,被越來(lái)越多地使用79.1 概述概述nSwing組件組件l在在javax.swing包中,包中,源于源于AWT(package java.awt)的)的組件組件l定義了兩種類(lèi)型的組件:定義了兩種類(lèi)型的組件:頂層容器頂層容器(JFrame,JApplet,JDialog和和JWindow)輕量級(jí)組件輕量級(jí)組件(JComponent)lSwing組件都是組件都是AWT的的Contain
7、er類(lèi)的直接子類(lèi)和間接類(lèi)的直接子類(lèi)和間接子類(lèi)。子類(lèi)。lSwing組件以組件以J開(kāi)頭,除了有與開(kāi)頭,除了有與AWT類(lèi)似的按鈕類(lèi)似的按鈕(JButton)、標(biāo)簽(標(biāo)簽(JLabel)、復(fù)選框(復(fù)選框(JCheckBox)、菜單(菜單(JMenu)等基本組件外,還增加了一個(gè)豐富的高等基本組件外,還增加了一個(gè)豐富的高層組件集合,如表格(層組件集合,如表格(JTable)、)、樹(shù)(樹(shù)(JTree)。)。89.1 概述概述nAWT與與Swing頂層窗口類(lèi)之間的關(guān)系頂層窗口類(lèi)之間的關(guān)系99.1 概述概述nSwing組件組件109.1 概述概述nSwing的組件和容器層次的組件和容器層次lJComponent
8、類(lèi)是除了頂層容器以外所有類(lèi)是除了頂層容器以外所有Swing組件的基類(lèi),根據(jù)組件的基類(lèi),根據(jù)繼承關(guān)系,我們可以在每個(gè)基類(lèi)中找到大多數(shù)繼承關(guān)系,我們可以在每個(gè)基類(lèi)中找到大多數(shù)GUI組件的常見(jiàn)操組件的常見(jiàn)操作作lComponent 類(lèi)類(lèi)包含paint、repaint方法,可以在屏幕上繪制組件大多數(shù)GUI組件直接或間接擴(kuò)展ComponentlContainer 類(lèi)類(lèi)容納相關(guān)組件包括add方法,用來(lái)添加組件包括setLayout方法,這個(gè)方法可用來(lái)設(shè)置布局,以幫助Container對(duì)象對(duì)其中的組件進(jìn)行定位和設(shè)置組件大小lJComponent 類(lèi)類(lèi)多數(shù)多數(shù)Swing組件的超類(lèi)組件的超類(lèi)可抽換的外觀和感覺(jué),
9、即可根據(jù)需求定制外觀和感覺(jué)??旖萱I (通過(guò)鍵盤(pán)直接訪問(wèn)GUI組件)一般的事件處理功能119.1 概述概述 - Swing的組件和容器層次的組件和容器層次n通常將通常將javax.swing包里的包里的Swing組件歸為三個(gè)層次組件歸為三個(gè)層次l頂層容器頂層容器l中間層容器中間層容器l基本組件基本組件n容器層次結(jié)構(gòu)容器層次結(jié)構(gòu)l是一個(gè)以是一個(gè)以頂層容器頂層容器為根的樹(shù)狀組件集合為根的樹(shù)狀組件集合l為了顯示在屏幕上,每個(gè)組件必須是一套為了顯示在屏幕上,每個(gè)組件必須是一套容器層次結(jié)構(gòu)容器層次結(jié)構(gòu)的一部分的一部分n每個(gè)組件只能放置在某個(gè)容器內(nèi)一次每個(gè)組件只能放置在某個(gè)容器內(nèi)一次l如果某個(gè)組件已經(jīng)在一個(gè)
10、容器中,又將它加到另外一個(gè)容器中,如果某個(gè)組件已經(jīng)在一個(gè)容器中,又將它加到另外一個(gè)容器中,這個(gè)組件就會(huì)從第一個(gè)容器中清除這個(gè)組件就會(huì)從第一個(gè)容器中清除容器本身也是一種組件容器本身也是一種組件129.1 概述概述 - Swing的組件和容器層次的組件和容器層次n頂層容器頂層容器lSwing提供三個(gè)頂層容器的類(lèi)提供三個(gè)頂層容器的類(lèi)JFrame 實(shí)現(xiàn)單個(gè)主窗口實(shí)現(xiàn)單個(gè)主窗口JDialog 實(shí)現(xiàn)一個(gè)二級(jí)窗口實(shí)現(xiàn)一個(gè)二級(jí)窗口(對(duì)話框?qū)υ捒?JApplet 在瀏覽器窗口中實(shí)現(xiàn)一個(gè)在瀏覽器窗口中實(shí)現(xiàn)一個(gè)applet顯示區(qū)域顯示區(qū)域l必須和操作系統(tǒng)打交道,必須和操作系統(tǒng)打交道,所以都是重量級(jí)組件所以都是重量級(jí)
11、組件l從繼承結(jié)構(gòu)上來(lái)看,它們分別是從原來(lái)從繼承結(jié)構(gòu)上來(lái)看,它們分別是從原來(lái)AWT組件的組件的Frame、Dialog和和Applet類(lèi)繼承而來(lái)。類(lèi)繼承而來(lái)。l每個(gè)使用每個(gè)使用Swing組件的組件的Java程序都必須至少有一個(gè)頂層程序都必須至少有一個(gè)頂層容器,別的組件都必須放在這個(gè)頂層容器上才能顯現(xiàn)出容器,別的組件都必須放在這個(gè)頂層容器上才能顯現(xiàn)出來(lái)。來(lái)。139.1 概述概述- Swing的組件和容器層次的組件和容器層次n中間層容器中間層容器l其存在的目的僅僅是為了容納別的組件,其存在的目的僅僅是為了容納別的組件,使界面有條理,使界面有條理,美觀,易于控制。美觀,易于控制。l分為兩類(lèi)分為兩類(lèi)一般
12、用途的一般用途的JPanelJScrollPaneJSplitPaneJTabbedPaneJToolBar特殊用途的特殊用途的JInternalFrameJRootPanel可以直接從頂層容器中獲得一個(gè)可以直接從頂層容器中獲得一個(gè)JRootPane對(duì)象來(lái)直接對(duì)象來(lái)直接使用,而別的中間容器使用的時(shí)候需要新建一個(gè)對(duì)象。使用,而別的中間容器使用的時(shí)候需要新建一個(gè)對(duì)象。149.1 概述概述- Swing的組件和容器層次的組件和容器層次n基本組件基本組件l通常是在圖形用戶界面中和用戶進(jìn)行交互的組件通常是在圖形用戶界面中和用戶進(jìn)行交互的組件l基本功能是和用戶交互信息,而不像前兩種組件那樣是基本功能是和用
13、戶交互信息,而不像前兩種組件那樣是用來(lái)容納別的組件的用來(lái)容納別的組件的l根據(jù)功能的不同,可被分為三類(lèi)根據(jù)功能的不同,可被分為三類(lèi)顯示不可編輯信息的顯示不可編輯信息的JLabel、JProgressBar、JToolTip有控制功能、可以用來(lái)輸入信息的有控制功能、可以用來(lái)輸入信息的JButton、JCheckBox、JRadioButton、JComboBox、JList、JMenu、JSlider、JSpinner、JTexComponent等能提供格式化的信息并允許用戶選擇的能提供格式化的信息并允許用戶選擇的JColorChooser、JFileChooser、JTable、JTree159
14、.1 概述概述- Swing的組件和容器層次的組件和容器層次n三層容器結(jié)構(gòu)示例三層容器結(jié)構(gòu)示例import javax.swing.*;import java.awt.*;public class Ex10_1 public static void main(String args) JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame=new JFrame(Swing Frame); Container contentPane=frame.getContentPane(); JPanel panel=new JPanel(); p
15、anel.setBorder(BorderFactory.createLineBorder(Color.black,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();/對(duì)組件進(jìn)行排列對(duì)組件進(jìn)行排列 frame.show();/顯示顯示 fr
16、ame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 169.1 概述概述- Swing的組件和容器層次的組件和容器層次n運(yùn)行結(jié)果運(yùn)行結(jié)果n程序說(shuō)明程序說(shuō)明n首先創(chuàng)建一個(gè)首先創(chuàng)建一個(gè)JFrame類(lèi)類(lèi)頂級(jí)容器頂級(jí)容器framen然后獲得頂級(jí)容器的內(nèi)容面板然后獲得頂級(jí)容器的內(nèi)容面板contentPane,只有通過(guò)它才能加,只有通過(guò)它才能加入其他組件。入其他組件。n然后創(chuàng)建一個(gè)然后創(chuàng)建一個(gè)JPanel類(lèi)類(lèi)的中間容器的中間容器panel,并設(shè)置邊框以及布局,并設(shè)置邊框以及布局n然后創(chuàng)建基本控制組件然后創(chuàng)建基本控制組件Label,button,并將它們添
17、加到中間容,并將它們添加到中間容器上器上n然后將中間容器通過(guò)內(nèi)容面板添加到頂層容器上,并對(duì)組件進(jìn)行然后將中間容器通過(guò)內(nèi)容面板添加到頂層容器上,并對(duì)組件進(jìn)行排列排列 17基于基于Swing的的Java GUI設(shè)計(jì)思路設(shè)計(jì)思路n基本的基本的java程序的程序的GUI設(shè)計(jì)工具。主要包括下述幾個(gè)概念:設(shè)計(jì)工具。主要包括下述幾個(gè)概念:n組件組件Component n容器容器Containern布局管理器布局管理器LayoutManagern事件處理事件處理n在在Java中,開(kāi)發(fā)一個(gè)中,開(kāi)發(fā)一個(gè)GUI程序,通常需要以下幾步:程序,通常需要以下幾步:l構(gòu)建構(gòu)建一個(gè)頂層容器一個(gè)頂層容器;通常是;通常是JFra
18、me或或JApplet l構(gòu)建構(gòu)建若干個(gè)組件若干個(gè)組件,組件可以是其它容器;,組件可以是其它容器; l設(shè)定設(shè)定容器的布局管理器容器的布局管理器;用容器的;用容器的add方法將這些組件加入到這個(gè)方法將這些組件加入到這個(gè)容器中;容器中;l設(shè)置組件設(shè)置組件事件事件;并將組件事件與代碼關(guān)聯(lián)。;并將組件事件與代碼關(guān)聯(lián)。18第九章第九章 Swing圖形用戶界面圖形用戶界面n9.1 概述概述n9.2 容器組件容器組件n9.3 基本組件基本組件n9.4 布局管理器布局管理器n9.5 事件處理模型事件處理模型n9.6 本章小結(jié)本章小結(jié)199.2 容器組件容器組件nJFramenJDialognJAppletnJ
19、PanelnJScrollPanenJSplitPanenJTabbedPanenJToolBar209.2 容器組件容器組件nSwing提供了提供了3個(gè)頂層容器類(lèi):個(gè)頂層容器類(lèi):lJFrame、JApplet、 JDialogl都是重量級(jí)組件,分別繼承了都是重量級(jí)組件,分別繼承了AWT組件組件Frame、Applet和和Dialogl每個(gè)頂層容器都有一個(gè)內(nèi)容面板,通常直接或間接的容每個(gè)頂層容器都有一個(gè)內(nèi)容面板,通常直接或間接的容納別的可視組件納別的可視組件l可以有選擇地為頂層容器添加菜單,菜單被放置在頂層可以有選擇地為頂層容器添加菜單,菜單被放置在頂層容器上容器上219.2 容器組件容器組件
20、 JFramen框體框體(JFrame)lJFrame是一種是一種具有邊框具有邊框的容器,它是的容器,它是Java Application程序的圖形用戶界面的最外層容器。程序的圖形用戶界面的最外層容器。l特點(diǎn):特點(diǎn):(1)有邊框)有邊框(2)能被移動(dòng)、縮放和關(guān)閉)能被移動(dòng)、縮放和關(guān)閉(3)作為最外層容器,不能被其它容器所包含)作為最外層容器,不能被其它容器所包含(4)默認(rèn)布局:邊界布局()默認(rèn)布局:邊界布局(BorderLayout)229.2 容器組件容器組件 JFramen類(lèi)類(lèi) JFrame 是是java.awt.Frame的子類(lèi)的子類(lèi)n在在Swing的組件中的組件中, JFrame 并不
21、全是由并不全是由Java編寫(xiě)的編寫(xiě)的l是一種與平臺(tái)關(guān)系比較密切的組件是一種與平臺(tái)關(guān)系比較密切的組件(Heavyweight component)java.lang.Object | +-java.awt.Component | +-java.awt.Container | +-java.awt.Window | +-java.awt.Frame | +-javax.swing.Jframel每個(gè)包含每個(gè)包含Swing 組件的主窗口都應(yīng)用組件的主窗口都應(yīng)用JFrame 來(lái)實(shí)現(xiàn)來(lái)實(shí)現(xiàn)239.2 容器組件容器組件 JFramen構(gòu)造函數(shù)構(gòu)造函數(shù)lJFrame(); 建立一個(gè)無(wú)標(biāo)題的建立一個(gè)無(wú)標(biāo)題的F
22、ramelJFrame(String title); 建立一個(gè)標(biāo)題為建立一個(gè)標(biāo)題為title的的Frame。n常用方法常用方法lString getTitle(); 獲取窗口標(biāo)題獲取窗口標(biāo)題lvoid setTitle(String s); 設(shè)置窗口標(biāo)題設(shè)置窗口標(biāo)題lvoid setVisible(boolean b); 設(shè)置窗口可見(jiàn)性設(shè)置窗口可見(jiàn)性lvoid setBounds(int a, int b, int width, int height); 設(shè)置窗口位置和設(shè)置窗口位置和大小大小lvoid setBackground(Color c); 設(shè)置窗口背景顏色設(shè)置窗口背景顏色lvoid
23、pack(); 用緊湊方式顯示窗口用緊湊方式顯示窗口lvoid setSize(int width , int height); 設(shè)置窗口大小設(shè)置窗口大小lvoid setLocation(int x, int y); 設(shè)置初始位置。其中設(shè)置初始位置。其中x, y是窗口左是窗口左上角在屏幕上的坐標(biāo)值。上角在屏幕上的坐標(biāo)值。249.2 容器組件容器組件 JFramen常用方法常用方法l通過(guò)通過(guò)setDefaultCloseOperation(int operation)方法設(shè)置方法設(shè)置關(guān)閉行為。關(guān)閉行為。 l其中其中operation的取值可以是以下幾種:的取值可以是以下幾種:DO_NOTHIN
24、G_ON_CLOSE:當(dāng)窗口關(guān)閉時(shí),不做:當(dāng)窗口關(guān)閉時(shí),不做任何處理;任何處理;HIDE_ON_CLOSE:當(dāng)窗口關(guān)閉時(shí),隱藏這個(gè)窗口;:當(dāng)窗口關(guān)閉時(shí),隱藏這個(gè)窗口;DISPOSE_ON_CLOSE:當(dāng)窗口關(guān)閉時(shí),隱藏并處:當(dāng)窗口關(guān)閉時(shí),隱藏并處理這個(gè)窗口;理這個(gè)窗口;EXIT_ON_CLOSE:當(dāng)窗口關(guān)閉時(shí),退出程序。:當(dāng)窗口關(guān)閉時(shí),退出程序。默認(rèn)是默認(rèn)是HIDE_ON_CLOSE。 259.2 容器組件容器組件 JFramen創(chuàng)建窗體有兩種方式:創(chuàng)建窗體有兩種方式:l直接創(chuàng)建直接創(chuàng)建JFrame的對(duì)象,適合于簡(jiǎn)單框體;的對(duì)象,適合于簡(jiǎn)單框體;l繼承繼承JFrame類(lèi),在繼承類(lèi)中編寫(xiě)代碼對(duì)框
25、體進(jìn)行詳細(xì)類(lèi),在繼承類(lèi)中編寫(xiě)代碼對(duì)框體進(jìn)行詳細(xì)的刻畫(huà),適合框體比較復(fù)雜的情況。的刻畫(huà),適合框體比較復(fù)雜的情況。l大多數(shù)情況下開(kāi)發(fā)人員都用第二種方法。大多數(shù)情況下開(kāi)發(fā)人員都用第二種方法。n注意:框體創(chuàng)建以后是不可見(jiàn)的,必須調(diào)用注意:框體創(chuàng)建以后是不可見(jiàn)的,必須調(diào)用Window類(lèi)的類(lèi)的show( )方法或方法或Component類(lèi)的類(lèi)的setVisible( )方法顯示該方法顯示該框體框體n見(jiàn)以下兩個(gè)例子:見(jiàn)以下兩個(gè)例子:269.2 容器組件容器組件 JFramen直接創(chuàng)建直接創(chuàng)建JFrame的對(duì)象的對(duì)象import javax.swing.import javax.swing.* *; ;pub
26、lic class Sample10_2 public class Sample10_2 public static void main(String args)public static void main(String args) / / 創(chuàng)建一個(gè)框體對(duì)象創(chuàng)建一個(gè)框體對(duì)象 JFrame myWindow = new JFrame();JFrame myWindow = new JFrame(); / / 向框體中添加一個(gè)標(biāo)簽向框體中添加一個(gè)標(biāo)簽 myWindowmyWindow.add(new JLabel(“.add(new JLabel(“這是一個(gè)框體,演示了這是一個(gè)框體,演示了JFr
27、ameJFrame類(lèi)的基本功能類(lèi)的基本功能);); / / 設(shè)置框體的標(biāo)題設(shè)置框體的標(biāo)題 myWindowmyWindow.setTitle(“.setTitle(“自定義的框體自定義的框體);); / / 設(shè)置框體的大小設(shè)置框體的大小 myWindowmyWindow.setBounds(80,80,480,180);.setBounds(80,80,480,180); / / 根據(jù)接收的根據(jù)接收的booleanboolean設(shè)置框體是否可以調(diào)整大小設(shè)置框體是否可以調(diào)整大小 myWindowmyWindow.setResizable(false); .setResizable(false);
28、 / / 設(shè)置框體的可見(jiàn)性設(shè)置框體的可見(jiàn)性 myWindowmyWindow.setVisible(true);.setVisible(true); 279.2 容器組件容器組件 JFramen繼承繼承JFrame類(lèi)類(lèi)import javax.swing.*;class MyWindow extends JFrameclass MyWindow extends JFrame/ 定義無(wú)參構(gòu)造函數(shù)public MyWindow()public MyWindow(boolean b)/ 向框體中添加一個(gè)標(biāo)簽this.add(new JLabel(“這是一個(gè)框體,演示了JFrame類(lèi)的基本功能);/
29、設(shè)置框體的標(biāo)題this.setTitle(“自定義的框體);/ 設(shè)置框體的大小this.setBounds(80,80,480,180);/ 根據(jù)接收的boolean設(shè)置框體是否可以調(diào)整大小this.setResizable(b); / 設(shè)置框體的可見(jiàn)性this.setVisible(true);public class Sample10_2public class Sample10_2public static void main(String args)/ 創(chuàng)建MyWindow類(lèi)的對(duì)象,并傳遞False值使得框體不能調(diào)整大小new MyWindow(false);289.2 容器組件容器組
30、件 JFramen繼承繼承JFrame類(lèi)類(lèi)import javax.swing.*;public class MyWindow extends JFramepublic class MyWindow extends JFrame/ 定義無(wú)參構(gòu)造函數(shù)public MyWindow()public MyWindow(boolean b)/ 向窗體中添加一個(gè)標(biāo)簽this.add(new JLabel(這是一個(gè)窗體,演示了JFrame類(lèi)的基本功能);/ 設(shè)置窗體的標(biāo)題this.setTitle(自定義的窗體);/ 設(shè)置窗體的大小this.setBounds(80,80,480,180);/ 根據(jù)接收的
31、boolean設(shè)置窗體是否可以調(diào)整大小this.setResizable(b); / 設(shè)置窗體的可見(jiàn)性this.setVisible(true);public static void main(String args)new MyWindow(false);299.2 容器組件容器組件 JFramen在在JFrame中加入組件的方法中加入組件的方法l用用getContentPane( )方法獲得方法獲得JFrame的內(nèi)容面板,再對(duì)其加入組的內(nèi)容面板,再對(duì)其加入組件:件: Container c=frame.getContentPane() c.add(childComponent)l建立一個(gè)建
32、立一個(gè)JPanel或或 JDesktopPane之類(lèi)的中間容器,把組件添加到之類(lèi)的中間容器,把組件添加到容器中,用容器中,用setContentPane()方法把該容器置為方法把該容器置為JFrame的內(nèi)容面板:的內(nèi)容面板:JPanel contentPane=new JPanel( );/把其它組件添加到把其它組件添加到Jpanel中中;frame.setContentPane(contentPane); /把把contentPane對(duì)象設(shè)置成為對(duì)象設(shè)置成為frame的內(nèi)容面板的內(nèi)容面板 309.2 容器組件容器組件nJFramenJDialognJAppletnJPanelnJScroll
33、PanenJSplitPanenJTabbedPanenJToolBar319.2 容器組件容器組件 JDialogn對(duì)話框(對(duì)話框(JDialog)n對(duì)話框(對(duì)話框(JDialog)與)與JFrame一樣,都是有一樣,都是有邊框和標(biāo)題的獨(dú)立使用的容器,不能被其它邊框和標(biāo)題的獨(dú)立使用的容器,不能被其它容器所包容。容器所包容。n與與JFrame的不同之處的不同之處:不能作為程序的最:不能作為程序的最外層容器,它外層容器,它必須屬于某個(gè)必須屬于某個(gè)JFrame,由該,由該JFrame彈出。彈出。n對(duì)話框可以接受用戶的輸入,實(shí)現(xiàn)與用戶的對(duì)話框可以接受用戶的輸入,實(shí)現(xiàn)與用戶的交互作用。交互作用。329
34、.2 容器組件容器組件 JDialognJDialogJDialog的繼承結(jié)構(gòu)的繼承結(jié)構(gòu)java.lang.Object | +-java.awt.Component | +-java.awt.Container | +-java.awt.Window | +-java.awt.Dialog | +-javax.swing.JDialogl要實(shí)現(xiàn)對(duì)話框,需要從要實(shí)現(xiàn)對(duì)話框,需要從JDialog派生一個(gè)類(lèi)派生一個(gè)類(lèi)339.2 容器組件容器組件 JDialogn構(gòu)造函數(shù)構(gòu)造函數(shù)lJDialog(Frame owner)JDialog(Frame owner) 功能:建立無(wú)標(biāo)題的通用對(duì)話框,它屬于窗
35、口功能:建立無(wú)標(biāo)題的通用對(duì)話框,它屬于窗口ownerowner,可以響應(yīng),可以響應(yīng)其它窗口。其它窗口。lJDialog(Frame owner,b oolean d)JDialog(Frame owner,b oolean d) 功能:建立無(wú)標(biāo)題的通用對(duì)話框,它屬于窗口功能:建立無(wú)標(biāo)題的通用對(duì)話框,它屬于窗口ownerowner,若,若d d為為truetrue則不能響應(yīng)其它窗口。則不能響應(yīng)其它窗口。lJDialog(Frame owner, String txt)JDialog(Frame owner, String txt) 功能:建立標(biāo)題為功能:建立標(biāo)題為txttxt的通用對(duì)話框,它屬于
36、窗口的通用對(duì)話框,它屬于窗口ownerowner,可以響應(yīng),可以響應(yīng)其它窗口。其它窗口。lJDialog(Frame owner, String txt, boolean d)JDialog(Frame owner, String txt, boolean d) 功能:建立標(biāo)題為功能:建立標(biāo)題為txttxt的通用對(duì)話框,它屬于窗口的通用對(duì)話框,它屬于窗口ownerowner,若,若d d為為truetrue則不能響應(yīng)其它窗口。則不能響應(yīng)其它窗口。349.2 容器組件容器組件 JDialogn常用方法常用方法 表列出了通用對(duì)話框表列出了通用對(duì)話框JDialogJDialog類(lèi)的幾個(gè)常用的方法。類(lèi)
37、的幾個(gè)常用的方法。方 法說(shuō) 明Container getContentPane()Container getContentPane()返回該通用對(duì)話框的contentPanelvoid setLayout(LayoutManagervoid setLayout(LayoutManagermanager)manager)設(shè)置布局管理器Component add(ComponentComponent add(Componentcomp)comp)在對(duì)話框中添加組件void setBackground(Color c)void setBackground(Color c)設(shè)置對(duì)話框的背景色void
38、setLocation(int x, int y)void setLocation(int x, int y)設(shè)置對(duì)話框的顯示位置void setSize(int width, int height)void setSize(int width, int height)設(shè)置對(duì)話框的大小void setVisible(boolean b)void setVisible(boolean b)設(shè)置對(duì)話框是否可見(jiàn)359.2 容器組件容器組件nJFramenJDialognJAppletnJPanelnJScrollPanenJSplitPanenJTabbedPanenJToolBar369.2 容器
39、組件容器組件 JAppletnJApplet的繼承結(jié)構(gòu)的繼承結(jié)構(gòu)java.lang.Object | +-java.awt.Component | +-java.awt.Container | +-java.awt.Panel | +-java.awt.Applet | +-javax.swing.JAppletn每個(gè)包含每個(gè)包含Swing 組件的組件的Applet 都應(yīng)作為都應(yīng)作為JApplet 的子類(lèi)的子類(lèi)來(lái)實(shí)現(xiàn)來(lái)實(shí)現(xiàn)nJApplet類(lèi)的頂層容器由瀏覽器提供,通常不需要自己產(chǎn)類(lèi)的頂層容器由瀏覽器提供,通常不需要自己產(chǎn)生一個(gè)生一個(gè)JApplet類(lèi)的對(duì)象。類(lèi)的對(duì)象。nJFrame和和JDial
40、og通過(guò)構(gòu)造方法進(jìn)行創(chuàng)建。通過(guò)構(gòu)造方法進(jìn)行創(chuàng)建。379.2 容器組件容器組件nJFramenJDialognJAppletnJPanelnJScrollPanenJSplitPanenJTabbedPanenJToolBar389.2 容器組件容器組件 JPaneln面板面板JPanelJPanelnSwing的JPanel,它替代了AWT的畫(huà)布(Canvas)和面板(Panel),兼有二者的功能。n是一種經(jīng)常使用的輕量級(jí)中間容器n在默認(rèn)狀態(tài)下,除了背景色外它并不繪制任何東西n很容易地設(shè)置邊框和繪制特性,可以把它設(shè)置為頂層容器contentPane。有效地利用JPanel可以使版面管理更為容易
41、nJPanel不能象JFrame那樣能夠在桌面上浮動(dòng)。399.2 容器組件容器組件 JPaneln可以通過(guò)setLayout方法來(lái)改變其布局n也可以在創(chuàng)建一個(gè)JPanel對(duì)象時(shí)就為它確定某種布局方式。n在默認(rèn)狀態(tài)下panel使用FlowLayout布局,將各組件布局在一行n對(duì)于復(fù)雜GUI,可以添加各種組件(包括面板組件)面板(JPanel)的大小由它所包含的組件決定當(dāng)組件個(gè)數(shù)增加,面板(JPanel)也會(huì)隨之而增大409.2 容器組件容器組件 JPaneln常用方法常用方法名稱(chēng)名稱(chēng)說(shuō)明說(shuō)明JPanel()JPanel()創(chuàng)建一個(gè)創(chuàng)建一個(gè)JPanelJPanel,默認(rèn)布局是,默認(rèn)布局是FlowL
42、ayoutFlowLayoutJPanel(LayoutManager layout)JPanel(LayoutManager layout)創(chuàng)建一個(gè)指定布局的創(chuàng)建一個(gè)指定布局的JPanelJPanelvoid add(Component comp)void add(Component comp)添加組件添加組件void add(Component comp, int index) void add(Component comp, int index) 把組件添加到特定位置上把組件添加到特定位置上int getComponentCount()int getComponentCount()獲得這
43、個(gè)獲得這個(gè)panelpanel里所有組件的數(shù)量里所有組件的數(shù)量Component getComponent(int index)Component getComponent(int index)獲得指定序號(hào)的某個(gè)組件獲得指定序號(hào)的某個(gè)組件Component getComponentAt(int x, int y)Component getComponentAt(int x, int y)獲得指定位置的某個(gè)組件獲得指定位置的某個(gè)組件void remove(Component)void remove(Component)移除某個(gè)組件移除某個(gè)組件void removeAll()void remove
44、All()移除所有組件移除所有組件void setLayout(LayoutManager layout)void setLayout(LayoutManager layout)設(shè)置布局設(shè)置布局LayoutManager getLayout()LayoutManager getLayout()得到現(xiàn)有布局得到現(xiàn)有布局void setBorder(Border border)void setBorder(Border border)設(shè)置邊框設(shè)置邊框419.2 容器組件容器組件 JPaneln利用利用JPanel創(chuàng)建界面創(chuàng)建界面import java.awt.*;import javax.swin
45、g.*;public class JPanelDemo extends JFrame public JPanel getGUI() JPanel p=new JPanel(); p.add(new JButton(Press me); return p; public static void main(String args) JPanelDemo jp=new JPanelDemo(); jp.setTitle(JPanel Demo); jp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jp.setContentPane(jp.getGU
46、I(); jp.setSize(200,200); jp.setVisible(true);429.2 容器組件容器組件nJFramenJDialognJAppletnJPanelnJScrollPanenJSplitPanenJTabbedPanenJToolBar439.2 容器組件容器組件 JScrollPanenJScrollPane( (滾動(dòng)窗口面板滾動(dòng)窗口面板) )l當(dāng)容器內(nèi)要容納的內(nèi)容大于容器大小的時(shí)候,我們希望容器能夠當(dāng)容器內(nèi)要容納的內(nèi)容大于容器大小的時(shí)候,我們希望容器能夠有一個(gè)滾動(dòng)條,通過(guò)拖動(dòng)滑塊,就可以看到更多的內(nèi)容。有一個(gè)滾動(dòng)條,通過(guò)拖動(dòng)滑塊,就可以看到更多的內(nèi)容。JSc
47、rollPane就是能夠?qū)崿F(xiàn)這種功能的特殊容器就是能夠?qū)崿F(xiàn)這種功能的特殊容器l由九個(gè)部分組成,包括一個(gè)中心顯示地帶、四個(gè)角和四條邊。由九個(gè)部分組成,包括一個(gè)中心顯示地帶、四個(gè)角和四條邊。nJScrollPane主要是通過(guò)移動(dòng)主要是通過(guò)移動(dòng)JViewport(視角視角)來(lái)實(shí)現(xiàn)的。來(lái)實(shí)現(xiàn)的。nJViewport是一種特殊的對(duì)象,用于查看基層組件,滾動(dòng)是一種特殊的對(duì)象,用于查看基層組件,滾動(dòng)條實(shí)際就是沿著組件移動(dòng)視口,同時(shí)描繪出它在下面條實(shí)際就是沿著組件移動(dòng)視口,同時(shí)描繪出它在下面看看到到的內(nèi)容。的內(nèi)容。449.2 容器組件容器組件 JScrollPanenJScrollPane常用常用API名稱(chēng)名
48、稱(chēng)說(shuō)明說(shuō)明static int HORIZONTAL_SCROLLBAR_ALWAYS水平滾動(dòng)條策略常數(shù):總是顯示水平滾動(dòng)條策略常數(shù):總是顯示static int HORIZONTAL_SCROLLBAR_AS_NEEDED水平滾動(dòng)條策略常數(shù):當(dāng)顯示內(nèi)容水平滾動(dòng)條策略常數(shù):當(dāng)顯示內(nèi)容水平區(qū)域大于顯示區(qū)域時(shí)才出現(xiàn)水平區(qū)域大于顯示區(qū)域時(shí)才出現(xiàn)static int HORIZONTAL_SCROLLBAR_NEVER水平滾動(dòng)條策略常數(shù):總是不顯示水平滾動(dòng)條策略常數(shù):總是不顯示static int VERTICAL_SCROLLBAR_ALWAYS垂直滾動(dòng)條策略常數(shù):總是顯示垂直滾動(dòng)條策略常數(shù):總是顯
49、示static int VERTICAL_SCROLLBAR_AS_NEEDED垂直滾動(dòng)條策略常數(shù):當(dāng)顯示內(nèi)容垂直滾動(dòng)條策略常數(shù):當(dāng)顯示內(nèi)容垂直區(qū)域大于顯示區(qū)域時(shí)才出現(xiàn)垂直區(qū)域大于顯示區(qū)域時(shí)才出現(xiàn)static int VERTICAL_SCROLLBAR_NEVER垂直滾動(dòng)條策略常數(shù):總是不顯示垂直滾動(dòng)條策略常數(shù):總是不顯示JScrollPane()建立一個(gè)空的建立一個(gè)空的JScrollPane對(duì)象對(duì)象JScrollPane(Component view)建立一個(gè)顯示組件的建立一個(gè)顯示組件的JScrollPane對(duì)對(duì)象,當(dāng)組件內(nèi)容大于顯示區(qū)域時(shí),象,當(dāng)組件內(nèi)容大于顯示區(qū)域時(shí),自動(dòng)產(chǎn)生滾動(dòng)條自動(dòng)
50、產(chǎn)生滾動(dòng)條459.2 容器組件容器組件 JScrollPanenJScrollPane常用常用API名稱(chēng)名稱(chēng)說(shuō)明說(shuō)明void setViewportView(Component)設(shè)置設(shè)置JscroollPane要中心地帶要顯示的組件要中心地帶要顯示的組件void setVerticalScrollBarPolicy(int)int getVerticalScrollBarPolicy()設(shè)置或者讀取垂直滾動(dòng)條策略常數(shù)設(shè)置或者讀取垂直滾動(dòng)條策略常數(shù)void setHorizontalScrollBarPolicy(int)int getHorizontalScrollBarPolicy()設(shè)置或
51、者讀取水平滾動(dòng)條策略常數(shù)設(shè)置或者讀取水平滾動(dòng)條策略常數(shù)void setViewportBorder(Border)Border getViewportBorder()設(shè)置或者讀取中心顯示地帶的邊框設(shè)置或者讀取中心顯示地帶的邊框void setWheelScrollingEnabled(Boolean)Boolean isWheelScrollingEnabled()設(shè)置或者讀取是否隨著鼠標(biāo)滾輪滾動(dòng)出現(xiàn)設(shè)置或者讀取是否隨著鼠標(biāo)滾輪滾動(dòng)出現(xiàn)或隱藏滾動(dòng)條,默認(rèn)狀態(tài)下為真或隱藏滾動(dòng)條,默認(rèn)狀態(tài)下為真void setColumnHeaderView(Component)void setRowHeader
52、View(Component)設(shè)置顯示在上面的邊上的組件設(shè)置顯示在上面的邊上的組件設(shè)置顯示在左面的邊上的組件設(shè)置顯示在左面的邊上的組件void setCorner(String key, Component corner)設(shè)置要顯示在指定角上的組件設(shè)置要顯示在指定角上的組件Component getCorner(String key)獲得指定角上的組件獲得指定角上的組件469.2 容器組件容器組件nJFramenJDialognJAppletnJPanelnJScrollPanenJSplitPanenJTabbedPanenJToolBar479.2 容器組件容器組件 JSplitPanen
53、JSplitPanel可以把兩個(gè)組件顯示在兩個(gè)顯示區(qū)域內(nèi),且隨著區(qū)域間可以把兩個(gè)組件顯示在兩個(gè)顯示區(qū)域內(nèi),且隨著區(qū)域間分隔線的拖動(dòng),區(qū)域內(nèi)組件的大小也隨之發(fā)生變動(dòng)分隔線的拖動(dòng),區(qū)域內(nèi)組件的大小也隨之發(fā)生變動(dòng)l它允許設(shè)置水平分割或者垂直分割;它允許設(shè)置水平分割或者垂直分割;l也允許設(shè)置動(dòng)態(tài)拖曳功能(拖動(dòng)分界線時(shí)兩邊組件是否也允許設(shè)置動(dòng)態(tài)拖曳功能(拖動(dòng)分界線時(shí)兩邊組件是否會(huì)隨著拖曳動(dòng)態(tài)改變大小還是在拖曳結(jié)束后才改動(dòng))會(huì)隨著拖曳動(dòng)態(tài)改變大小還是在拖曳結(jié)束后才改動(dòng))l通常先把組件放到通常先把組件放到Scroll Pane中,再把中,再把Scroll Pane放到放到Split Pane中。這樣在每部分
54、窗口中,都可以拖動(dòng)滾動(dòng)中。這樣在每部分窗口中,都可以拖動(dòng)滾動(dòng)條看到組件的全部?jī)?nèi)容條看到組件的全部?jī)?nèi)容489.2 容器組件容器組件 JSplitPanenJSplitPane常用常用API名稱(chēng)名稱(chēng)說(shuō)明說(shuō)明static int HORIZONTAL_SPLIT水平分割常數(shù)水平分割常數(shù)static int VERTICAL_SPLIT垂直分割常數(shù)垂直分割常數(shù)JSplitPane()創(chuàng)建一個(gè)創(chuàng)建一個(gè)JSplitPane,以水平方向排列,兩,以水平方向排列,兩邊各是一個(gè)邊各是一個(gè)button,沒(méi)有動(dòng)態(tài)拖曳功能,沒(méi)有動(dòng)態(tài)拖曳功能JSplitPane(int newOrientation)建立一個(gè)指定分割方
55、向的建立一個(gè)指定分割方向的JSplitPane,沒(méi)有,沒(méi)有動(dòng)態(tài)拖曳功能,參數(shù)為兩個(gè)分割常數(shù)之一動(dòng)態(tài)拖曳功能,參數(shù)為兩個(gè)分割常數(shù)之一JSplitPane(int newOrientation, Boolean newContinuousLayout)指定分割方向,并可指定是否有動(dòng)態(tài)拖曳指定分割方向,并可指定是否有動(dòng)態(tài)拖曳功能功能JSplitPane(int newOrientation, Boolean newContinuousLayout, Component newLeftComponent, Component newRightComponent)指定分割方向、是否具有動(dòng)態(tài)拖曳功能,指定
56、分割方向、是否具有動(dòng)態(tài)拖曳功能,和兩側(cè)組件和兩側(cè)組件499.2 容器組件容器組件 JSplitPanenJSplitPane常用常用API名稱(chēng)名稱(chēng)說(shuō)明說(shuō)明JSplitPane(int newOrientation,Component newLeftComponent, Component newRightComponent)指定分割方向和兩側(cè)組件,無(wú)自動(dòng)拖曳指定分割方向和兩側(cè)組件,無(wú)自動(dòng)拖曳功能功能void setOrientation(int newOrientation)int getOrientation()設(shè)置或獲得分割方向設(shè)置或獲得分割方向void setDividerSize(in
57、t)int getDividerSize()設(shè)置或讀取分隔線條的粗細(xì)設(shè)置或讀取分隔線條的粗細(xì)void setContinuousLayout(boolean nCL)boolean isContinuousLayout()設(shè)置或讀取是否使用動(dòng)態(tài)拖曳功能設(shè)置或讀取是否使用動(dòng)態(tài)拖曳功能void setOneTouchExpandable(Boolean oTE)boolean is OneTouchExpandable()設(shè)置或讀取是否在分隔線上顯示一個(gè)控設(shè)置或讀取是否在分隔線上顯示一個(gè)控鍵來(lái)完全擴(kuò)展和完全壓縮單側(cè)內(nèi)容。鍵來(lái)完全擴(kuò)展和完全壓縮單側(cè)內(nèi)容。void remove(Component c
58、omp)void add(Component comp)刪除或添加組件。只可以添加兩個(gè)組件刪除或添加組件。只可以添加兩個(gè)組件509.2 容器組件容器組件 JSplitPanenJSplitPaneDemo.javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import java.util.*;public class SplitPaneDemo implements ListSelectionListener private Vector imageName
59、s; private JLabel picture; private JList list; private JSplitPane splitPane; public SplitPaneDemo() ResourceBundle imageResource; try /Read image names from a properties file imageResource = ResourceBundle.getBundle(imagenames); String imageNamesString = imageResource.getString(images); imageNames =
60、 parseList(imageNamesString); catch (MissingResourceException e) System.exit(1); 519.2 容器組件容器組件 JSplitPaneDemo.java list = new JList(imageNames); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list.setSelectedIndex(0); list.addListSelectionListener(this); JScrollPane listScrollPane = ne
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年浙江省9+1聯(lián)考高一上學(xué)期期中考試歷史試題(解析版)
- 單位管理制度集合大合集【人事管理】十篇
- 單位管理制度合并匯編人力資源管理篇十篇
- 《漢字的結(jié)構(gòu)特點(diǎn)》課件
- 單位管理制度范例選集【員工管理篇】
- 單位管理制度范例合集【人事管理】十篇
- 單位管理制度呈現(xiàn)大合集【人事管理篇】十篇
- 2024管理人員年終工作總結(jié)(34篇)
- 2016年高考語(yǔ)文試卷(上海)(秋考)(解析卷)
- 幼師畢業(yè)自我鑒定15篇
- 口風(fēng)琴在小學(xué)音樂(lè)課堂中的運(yùn)用與實(shí)踐 論文
- 塑件模具驗(yàn)收?qǐng)?bào)告
- 2023年9月份濟(jì)南天橋區(qū)濼口實(shí)驗(yàn)中學(xué)八年級(jí)上學(xué)期語(yǔ)文月考試卷(含答案)
- 信號(hào)分析與處理-教學(xué)大綱
- 國(guó)家醫(yī)療保障疾病診斷相關(guān)分組(CHS-DRG)分組與付費(fèi)技術(shù)規(guī)范(可編輯)
- 特許經(jīng)銷(xiāo)合同
- 吉林大學(xué)藥學(xué)導(dǎo)論期末考試高分題庫(kù)全集含答案
- 2023-2024學(xué)年河北省唐山市灤州市數(shù)學(xué)七年級(jí)第一學(xué)期期末教學(xué)質(zhì)量檢測(cè)模擬試題含解析
- 數(shù)字油畫(huà)課件
- 2023年小學(xué)五年級(jí)數(shù)學(xué)上學(xué)期期末水平測(cè)試試卷(天河區(qū))
- 中考數(shù)學(xué)計(jì)算題100道
評(píng)論
0/150
提交評(píng)論