Java程序設(shè)計(jì)Java_11Swing圖形界面設(shè)計(jì)_第1頁
Java程序設(shè)計(jì)Java_11Swing圖形界面設(shè)計(jì)_第2頁
Java程序設(shè)計(jì)Java_11Swing圖形界面設(shè)計(jì)_第3頁
Java程序設(shè)計(jì)Java_11Swing圖形界面設(shè)計(jì)_第4頁
Java程序設(shè)計(jì)Java_11Swing圖形界面設(shè)計(jì)_第5頁
已閱讀5頁,還剩185頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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簡化計(jì)算機(jī)軟件的學(xué)習(xí)過程簡化計(jì)算機(jī)軟件的學(xué)習(xí)過程lGUI示例示例jdk1.7demojfcSwingSet2GUI組件組件: Labels, Text fields, Buttons等等等等3

2、9.1 概述概述n在在Java語言中,有兩個(gè)包(語言中,有兩個(gè)包(java.awt和和javax.swing)囊括)囊括了實(shí)現(xiàn)圖形用戶界面的所有基本元素,這些基本元素主要了實(shí)現(xiàn)圖形用戶界面的所有基本元素,這些基本元素主要包括包括容器、組件、繪圖工具和布局管理器容器、組件、繪圖工具和布局管理器等。等。 njava.awt是是java1.1用來建立用來建立GUI的圖形包,的圖形包, awt是抽象窗是抽象窗口工具包(口工具包(Abstract Window Toolkit)的縮寫,其中的組)的縮寫,其中的組件常被稱為件常被稱為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大部分含有大部分含有native codenative code,所以隨操作系統(tǒng)平臺的不同會,所以隨操作系統(tǒng)平臺的不同會顯示出不同的樣子,而不能進(jìn)行更改,是重量級組件顯示出不同的樣子,而不能進(jìn)行更改,

4、是重量級組件(heavyweight components)(heavyweight components)l沒有彈性、缺乏效率沒有彈性、缺乏效率559.1 概述概述nAWT與與Swingljava.awt包中的類及相互關(guān)系可以用下圖來描述:包中的類及相互關(guān)系可以用下圖來描述:事件類字體類GraphicsComponent顏色類布局管理類java.lang.ObjectCheckboxContainerButtonWindowPanelAppletDialogFrameList圖像類菜單類Scrollpane69.1 概述概述n較新的較新的SwingSwing組件組件l其名稱都是在原來其名稱都

5、是在原來AWTAWT組件名稱前加上組件名稱前加上J J,例如,例如JButtonJButton、JCheckBoxJCheckBox、JScrollbarJScrollbar等,都是等,都是JComponentJComponent類的子類類的子類lJava1.2Java1.2推出,架構(gòu)在推出,架構(gòu)在 AWT AWT 之上,是之上,是AWTAWT的擴(kuò)展而不的擴(kuò)展而不是取代是取代, AWT, AWT仍然是仍然是SwingSwing的一個(gè)必備補(bǔ)充。的一個(gè)必備補(bǔ)充。l完全是由完全是由javajava語言編寫的語言編寫的,其外觀和功能不依賴于任何,其外觀和功能不依賴于任何由宿主平臺的窗口系統(tǒng)所提供的代碼

6、,是輕量級組件由宿主平臺的窗口系統(tǒng)所提供的代碼,是輕量級組件(lightweight componentslightweight components)l可提供更豐富的視覺感受,被越來越多地使用可提供更豐富的視覺感受,被越來越多地使用79.1 概述概述nSwing組件組件l在在javax.swing包中,包中,源于源于AWT(package java.awt)的)的組件組件l定義了兩種類型的組件:定義了兩種類型的組件:頂層容器頂層容器(JFrame,JApplet,JDialog和和JWindow)輕量級組件輕量級組件(JComponent)lSwing組件都是組件都是AWT的的Contain

7、er類的直接子類和間接類的直接子類和間接子類。子類。lSwing組件以組件以J開頭,除了有與開頭,除了有與AWT類似的按鈕類似的按鈕(JButton)、標(biāo)簽(標(biāo)簽(JLabel)、復(fù)選框(復(fù)選框(JCheckBox)、菜單(菜單(JMenu)等基本組件外,還增加了一個(gè)豐富的高等基本組件外,還增加了一個(gè)豐富的高層組件集合,如表格(層組件集合,如表格(JTable)、)、樹(樹(JTree)。)。89.1 概述概述nAWT與與Swing頂層窗口類之間的關(guān)系頂層窗口類之間的關(guān)系99.1 概述概述nSwing組件組件109.1 概述概述nSwing的組件和容器層次的組件和容器層次lJComponent

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

9、即可根據(jù)需求定制外觀和感覺??旖萱I (通過鍵盤直接訪問GUI組件)一般的事件處理功能119.1 概述概述 - Swing的組件和容器層次的組件和容器層次n通常將通常將javax.swing包里的包里的Swing組件歸為三個(gè)層次組件歸為三個(gè)層次l頂層容器頂層容器l中間層容器中間層容器l基本組件基本組件n容器層次結(jié)構(gòu)容器層次結(jié)構(gòu)l是一個(gè)以是一個(gè)以頂層容器頂層容器為根的樹狀組件集合為根的樹狀組件集合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è)組件就會從第一個(gè)容器中清除這個(gè)組件就會從第一個(gè)容器中清除容器本身也是一種組件容器本身也是一種組件129.1 概述概述 - Swing的組件和容器層次的組件和容器層次n頂層容器頂層容器lSwing提供三個(gè)頂層容器的類提供三個(gè)頂層容器的類JFrame 實(shí)現(xiàn)單個(gè)主窗口實(shí)現(xiàn)單個(gè)主窗口JDialog 實(shí)現(xiàn)一個(gè)二級窗口實(shí)現(xiàn)一個(gè)二級窗口(對話框?qū)υ捒?JApplet 在瀏覽器窗口中實(shí)現(xiàn)一個(gè)在瀏覽器窗口中實(shí)現(xiàn)一個(gè)applet顯示區(qū)域顯示區(qū)域l必須和操作系統(tǒng)打交道,必須和操作系統(tǒng)打交道,所以都是重量級組件所以都是重量級

11、組件l從繼承結(jié)構(gòu)上來看,它們分別是從原來從繼承結(jié)構(gòu)上來看,它們分別是從原來AWT組件的組件的Frame、Dialog和和Applet類繼承而來。類繼承而來。l每個(gè)使用每個(gè)使用Swing組件的組件的Java程序都必須至少有一個(gè)頂層程序都必須至少有一個(gè)頂層容器,別的組件都必須放在這個(gè)頂層容器上才能顯現(xiàn)出容器,別的組件都必須放在這個(gè)頂層容器上才能顯現(xiàn)出來。來。139.1 概述概述- Swing的組件和容器層次的組件和容器層次n中間層容器中間層容器l其存在的目的僅僅是為了容納別的組件,其存在的目的僅僅是為了容納別的組件,使界面有條理,使界面有條理,美觀,易于控制。美觀,易于控制。l分為兩類分為兩類一般

12、用途的一般用途的JPanelJScrollPaneJSplitPaneJTabbedPaneJToolBar特殊用途的特殊用途的JInternalFrameJRootPanel可以直接從頂層容器中獲得一個(gè)可以直接從頂層容器中獲得一個(gè)JRootPane對象來直接對象來直接使用,而別的中間容器使用的時(shí)候需要新建一個(gè)對象。使用,而別的中間容器使用的時(shí)候需要新建一個(gè)對象。149.1 概述概述- Swing的組件和容器層次的組件和容器層次n基本組件基本組件l通常是在圖形用戶界面中和用戶進(jìn)行交互的組件通常是在圖形用戶界面中和用戶進(jìn)行交互的組件l基本功能是和用戶交互信息,而不像前兩種組件那樣是基本功能是和用

13、戶交互信息,而不像前兩種組件那樣是用來容納別的組件的用來容納別的組件的l根據(jù)功能的不同,可被分為三類根據(jù)功能的不同,可被分為三類顯示不可編輯信息的顯示不可編輯信息的JLabel、JProgressBar、JToolTip有控制功能、可以用來輸入信息的有控制功能、可以用來輸入信息的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();/對組件進(jìn)行排列對組件進(jìn)行排列 frame.show();/顯示顯示 fr

16、ame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 169.1 概述概述- Swing的組件和容器層次的組件和容器層次n運(yùn)行結(jié)果運(yùn)行結(jié)果n程序說明程序說明n首先創(chuàng)建一個(gè)首先創(chuàng)建一個(gè)JFrame類類頂級容器頂級容器framen然后獲得頂級容器的內(nèi)容面板然后獲得頂級容器的內(nèi)容面板contentPane,只有通過它才能加,只有通過它才能加入其他組件。入其他組件。n然后創(chuàng)建一個(gè)然后創(chuàng)建一個(gè)JPanel類類的中間容器的中間容器panel,并設(shè)置邊框以及布局,并設(shè)置邊框以及布局n然后創(chuàng)建基本控制組件然后創(chuàng)建基本控制組件Label,button,并將它們添

17、加到中間容,并將它們添加到中間容器上器上n然后將中間容器通過內(nèi)容面板添加到頂層容器上,并對組件進(jìn)行然后將中間容器通過內(nèi)容面板添加到頂層容器上,并對組件進(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中,開發(fā)一個(gè)中,開發(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è)頂層容器類:個(gè)頂層容器類:lJFrame、JApplet、 JDialogl都是重量級組件,分別繼承了都是重量級組件,分別繼承了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類類 JFrame 是是java.awt.Frame的子類的子類n在在Swing的組件中的組件中, JFrame 并不

21、全是由并不全是由Java編寫的編寫的l是一種與平臺關(guān)系比較密切的組件是一種與平臺關(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 來實(shí)現(xiàn)來實(shí)現(xiàn)239.2 容器組件容器組件 JFramen構(gòu)造函數(shù)構(gòu)造函數(shù)lJFrame(); 建立一個(gè)無標(biāo)題的建立一個(gè)無標(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è)置窗口可見性設(shè)置窗口可見性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通過通過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的對象,適合于簡單框體;的對象,適合于簡單框體;l繼承繼承JFrame類,在繼承類中編寫代碼對框

25、體進(jìn)行詳細(xì)類,在繼承類中編寫代碼對框體進(jìn)行詳細(xì)的刻畫,適合框體比較復(fù)雜的情況。的刻畫,適合框體比較復(fù)雜的情況。l大多數(shù)情況下開發(fā)人員都用第二種方法。大多數(shù)情況下開發(fā)人員都用第二種方法。n注意:框體創(chuàng)建以后是不可見的,必須調(diào)用注意:框體創(chuàng)建以后是不可見的,必須調(diào)用Window類的類的show( )方法或方法或Component類的類的setVisible( )方法顯示該方法顯示該框體框體n見以下兩個(gè)例子:見以下兩個(gè)例子:269.2 容器組件容器組件 JFramen直接創(chuàng)建直接創(chuàng)建JFrame的對象的對象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è)框體對象創(chuàng)建一個(gè)框體對象 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類的基本功能類的基本功能);); / / 設(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è)置框體的可見性設(shè)置框體的可見性 myWindowmyWindow.setVisible(true);.setVisible(true); 279.2 容器組件容器組件 JFramen繼承繼承JFrame類類import javax.swing.*;class MyWindow extends JFrameclass MyWindow extends JFrame/ 定義無參構(gòu)造函數(shù)public MyWindow()public MyWindow(boolean b)/ 向框體中添加一個(gè)標(biāo)簽this.add(new JLabel(“這是一個(gè)框體,演示了JFrame類的基本功能);/

29、設(shè)置框體的標(biāo)題this.setTitle(“自定義的框體);/ 設(shè)置框體的大小this.setBounds(80,80,480,180);/ 根據(jù)接收的boolean設(shè)置框體是否可以調(diào)整大小this.setResizable(b); / 設(shè)置框體的可見性this.setVisible(true);public class Sample10_2public class Sample10_2public static void main(String args)/ 創(chuàng)建MyWindow類的對象,并傳遞False值使得框體不能調(diào)整大小new MyWindow(false);289.2 容器組件容器組

30、件 JFramen繼承繼承JFrame類類import javax.swing.*;public class MyWindow extends JFramepublic class MyWindow extends JFrame/ 定義無參構(gòu)造函數(shù)public MyWindow()public MyWindow(boolean b)/ 向窗體中添加一個(gè)標(biāo)簽this.add(new JLabel(這是一個(gè)窗體,演示了JFrame類的基本功能);/ 設(shè)置窗體的標(biāo)題this.setTitle(自定義的窗體);/ 設(shè)置窗體的大小this.setBounds(80,80,480,180);/ 根據(jù)接收的

31、boolean設(shè)置窗體是否可以調(diào)整大小this.setResizable(b); / 設(shè)置窗體的可見性this.setVisible(true);public static void main(String args)new MyWindow(false);299.2 容器組件容器組件 JFramen在在JFrame中加入組件的方法中加入組件的方法l用用getContentPane( )方法獲得方法獲得JFrame的內(nèi)容面板,再對其加入組的內(nèi)容面板,再對其加入組件:件: Container c=frame.getContentPane() c.add(childComponent)l建立一個(gè)建

32、立一個(gè)JPanel或或 JDesktopPane之類的中間容器,把組件添加到之類的中間容器,把組件添加到容器中,用容器中,用setContentPane()方法把該容器置為方法把該容器置為JFrame的內(nèi)容面板:的內(nèi)容面板:JPanel contentPane=new JPanel( );/把其它組件添加到把其它組件添加到Jpanel中中;frame.setContentPane(contentPane); /把把contentPane對象設(shè)置成為對象設(shè)置成為frame的內(nèi)容面板的內(nèi)容面板 309.2 容器組件容器組件nJFramenJDialognJAppletnJPanelnJScroll

33、PanenJSplitPanenJTabbedPanenJToolBar319.2 容器組件容器組件 JDialogn對話框(對話框(JDialog)n對話框(對話框(JDialog)與)與JFrame一樣,都是有一樣,都是有邊框和標(biāo)題的獨(dú)立使用的容器,不能被其它邊框和標(biāo)題的獨(dú)立使用的容器,不能被其它容器所包容。容器所包容。n與與JFrame的不同之處的不同之處:不能作為程序的最:不能作為程序的最外層容器,它外層容器,它必須屬于某個(gè)必須屬于某個(gè)JFrame,由該,由該JFrame彈出。彈出。n對話框可以接受用戶的輸入,實(shí)現(xiàn)與用戶的對話框可以接受用戶的輸入,實(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)對話框,需要從要實(shí)現(xiàn)對話框,需要從JDialog派生一個(gè)類派生一個(gè)類339.2 容器組件容器組件 JDialogn構(gòu)造函數(shù)構(gòu)造函數(shù)lJDialog(Frame owner)JDialog(Frame owner) 功能:建立無標(biāo)題的通用對話框,它屬于窗

35、口功能:建立無標(biāo)題的通用對話框,它屬于窗口ownerowner,可以響應(yīng),可以響應(yīng)其它窗口。其它窗口。lJDialog(Frame owner,b oolean d)JDialog(Frame owner,b oolean d) 功能:建立無標(biāo)題的通用對話框,它屬于窗口功能:建立無標(biāo)題的通用對話框,它屬于窗口ownerowner,若,若d d為為truetrue則不能響應(yīng)其它窗口。則不能響應(yīng)其它窗口。lJDialog(Frame owner, String txt)JDialog(Frame owner, String txt) 功能:建立標(biāo)題為功能:建立標(biāo)題為txttxt的通用對話框,它屬于

36、窗口的通用對話框,它屬于窗口ownerowner,可以響應(yīng),可以響應(yīng)其它窗口。其它窗口。lJDialog(Frame owner, String txt, boolean d)JDialog(Frame owner, String txt, boolean d) 功能:建立標(biāo)題為功能:建立標(biāo)題為txttxt的通用對話框,它屬于窗口的通用對話框,它屬于窗口ownerowner,若,若d d為為truetrue則不能響應(yīng)其它窗口。則不能響應(yīng)其它窗口。349.2 容器組件容器組件 JDialogn常用方法常用方法 表列出了通用對話框表列出了通用對話框JDialogJDialog類的幾個(gè)常用的方法。類

37、的幾個(gè)常用的方法。方 法說 明Container getContentPane()Container getContentPane()返回該通用對話框的contentPanelvoid setLayout(LayoutManagervoid setLayout(LayoutManagermanager)manager)設(shè)置布局管理器Component add(ComponentComponent add(Componentcomp)comp)在對話框中添加組件void setBackground(Color c)void setBackground(Color c)設(shè)置對話框的背景色void

38、setLocation(int x, int y)void setLocation(int x, int y)設(shè)置對話框的顯示位置void setSize(int width, int height)void setSize(int width, int height)設(shè)置對話框的大小void setVisible(boolean b)void setVisible(boolean b)設(shè)置對話框是否可見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 的子類的子類來實(shí)現(xiàn)來實(shí)現(xiàn)nJApplet類的頂層容器由瀏覽器提供,通常不需要自己產(chǎn)類的頂層容器由瀏覽器提供,通常不需要自己產(chǎn)生一個(gè)生一個(gè)JApplet類的對象。類的對象。nJFrame和和JDial

40、og通過構(gòu)造方法進(jìn)行創(chuàng)建。通過構(gòu)造方法進(jìn)行創(chuàng)建。379.2 容器組件容器組件nJFramenJDialognJAppletnJPanelnJScrollPanenJSplitPanenJTabbedPanenJToolBar389.2 容器組件容器組件 JPaneln面板面板JPanelJPanelnSwing的JPanel,它替代了AWT的畫布(Canvas)和面板(Panel),兼有二者的功能。n是一種經(jīng)常使用的輕量級中間容器n在默認(rèn)狀態(tài)下,除了背景色外它并不繪制任何東西n很容易地設(shè)置邊框和繪制特性,可以把它設(shè)置為頂層容器contentPane。有效地利用JPanel可以使版面管理更為容易

41、nJPanel不能象JFrame那樣能夠在桌面上浮動(dòng)。399.2 容器組件容器組件 JPaneln可以通過setLayout方法來改變其布局n也可以在創(chuàng)建一個(gè)JPanel對象時(shí)就為它確定某種布局方式。n在默認(rèn)狀態(tài)下panel使用FlowLayout布局,將各組件布局在一行n對于復(fù)雜GUI,可以添加各種組件(包括面板組件)面板(JPanel)的大小由它所包含的組件決定當(dāng)組件個(gè)數(shù)增加,面板(JPanel)也會隨之而增大409.2 容器組件容器組件 JPaneln常用方法常用方法名稱名稱說明說明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)獲得指定序號的某個(gè)組件獲得指定序號的某個(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)條,通過拖動(dòng)滑塊,就可以看到更多的內(nèi)容。有一個(gè)滾動(dòng)條,通過拖動(dòng)滑塊,就可以看到更多的內(nèi)容。JSc

47、rollPane就是能夠?qū)崿F(xiàn)這種功能的特殊容器就是能夠?qū)崿F(xiàn)這種功能的特殊容器l由九個(gè)部分組成,包括一個(gè)中心顯示地帶、四個(gè)角和四條邊。由九個(gè)部分組成,包括一個(gè)中心顯示地帶、四個(gè)角和四條邊。nJScrollPane主要是通過移動(dòng)主要是通過移動(dòng)JViewport(視角視角)來實(shí)現(xiàn)的。來實(shí)現(xiàn)的。nJViewport是一種特殊的對象,用于查看基層組件,滾動(dòng)是一種特殊的對象,用于查看基層組件,滾動(dòng)條實(shí)際就是沿著組件移動(dòng)視口,同時(shí)描繪出它在下面條實(shí)際就是沿著組件移動(dòng)視口,同時(shí)描繪出它在下面看看到到的內(nèi)容。的內(nèi)容。449.2 容器組件容器組件 JScrollPanenJScrollPane常用常用API名稱名

48、稱說明說明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對象對象JScrollPane(Component view)建立一個(gè)顯示組件的建立一個(gè)顯示組件的JScrollPane對對象,當(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名稱名稱說明說明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í)兩邊組件是否會隨著拖曳動(dòng)態(tài)改變大小還是在拖曳結(jié)束后才改動(dòng))會隨著拖曳動(dòng)態(tài)改變大小還是在拖曳結(jié)束后才改動(dòng))l通常先把組件放到通常先把組件放到Scroll Pane中,再把中,再把Scroll Pane放到放到Split Pane中。這樣在每部分

54、窗口中,都可以拖動(dòng)滾動(dòng)中。這樣在每部分窗口中,都可以拖動(dòng)滾動(dòng)條看到組件的全部內(nèi)容條看到組件的全部內(nèi)容489.2 容器組件容器組件 JSplitPanenJSplitPane常用常用API名稱名稱說明說明static int HORIZONTAL_SPLIT水平分割常數(shù)水平分割常數(shù)static int VERTICAL_SPLIT垂直分割常數(shù)垂直分割常數(shù)JSplitPane()創(chuàng)建一個(gè)創(chuàng)建一個(gè)JSplitPane,以水平方向排列,兩,以水平方向排列,兩邊各是一個(gè)邊各是一個(gè)button,沒有動(dòng)態(tài)拖曳功能,沒有動(dòng)態(tài)拖曳功能JSplitPane(int newOrientation)建立一個(gè)指定分割方

55、向的建立一個(gè)指定分割方向的JSplitPane,沒有,沒有動(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名稱名稱說明說明JSplitPane(int newOrientation,Component newLeftComponent, Component newRightComponent)指定分割方向和兩側(cè)組件,無自動(dòng)拖曳指定分割方向和兩側(cè)組件,無自動(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è)控鍵來完全擴(kuò)展和完全壓縮單側(cè)內(nè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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論