版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第11章 高級(jí)組件GUI設(shè)計(jì),11.1 界面布局管理 11.2 鍵盤事件(KeyEvent) 11.3 鼠標(biāo)事件(MouseEvent) 11.4 窗口與面板 11.5 菜單設(shè)計(jì) 11.6 對(duì)話框設(shè)計(jì),11.1 界面布局管理,Java語言中提供的布局編輯類,其目的正是為了將組件排列在容器中合適的位置上。 Java.awt包中共定義了五種布局編輯類,分別是FlowLayout,BorderLayout,CardLayout,GridLayout和GridBagLayout。每個(gè)布局編輯類對(duì)應(yīng)一種布局策略,這五個(gè)類都是java.lang.Object類的直接子類。 Javax.swing包中定義了
2、4種布局編輯類,分別是BoxLayout、ScrollPaneLayout、ViewportLayout和OverlayLayout。 下面將討論FlowLayout,BorderLayout,CardLayout,GridLayout和BoxLayout幾種常用的布局策略。,11.1.1 FlowLayout java.FlowLayout類是java.lang.Object類的直接子類。FlowLayout的布局策略是將遵循這種布局策略的容器中的組件按照加入的先后順序從左向右排列,當(dāng)一行排滿之后就轉(zhuǎn)到下一行繼續(xù)從左至右排列,每一行中的組件都居中排列。 FlowLayout是Applet缺省
3、使用的布局編輯策略。 FlowLayout類有三個(gè)構(gòu)造方法,分別是: (1) FlowLayout( ) :用于創(chuàng)建一個(gè)版面設(shè)定為居中對(duì)齊、各組件的水平及垂直間隔為5個(gè)像素點(diǎn)的FlowLayout類的對(duì)象。,(2) FlowLayout(int align) :用于創(chuàng)建一個(gè)FlowLayout類的對(duì)象,版面按給出的align值對(duì)齊,各組件的水平及垂直間隔為5個(gè)像素。 align的值可以是 FlowLayout.LEFT(左對(duì)齊) FlowLayout.RIGHT(右對(duì)齊) FlowLayout.CENTER(居中對(duì)齊) (3) FlowLayout(int align,int hgap,int
4、 vgap) :用于創(chuàng)建一個(gè)既指定對(duì)齊方式,又指定組件間間隔的FlowLayout類的對(duì)象。參數(shù)align作用及取值同上;參數(shù)hgap指定組件間的水平間隔;參數(shù)vgap指定各組件間的垂直間隔。間隔單位為像素點(diǎn)。,11.1.2 BorderLayout java.BorderLayout類是java.lang.Object類的直接子類。BorderLayout布局策略是把容器內(nèi)的空間劃分為東、西、南、北、中五個(gè)區(qū)域(如圖11.1所示)。 這五個(gè)區(qū)域分別用字符串常量East、West、South、North、Center表示。向這個(gè)容器內(nèi)每加入一個(gè)組件都應(yīng)該指明把它放在容器的哪個(gè)區(qū)域中。 分布策略
5、: 分布在北部和南部區(qū)域的組件將橫向擴(kuò)展至占據(jù)整個(gè)容器的長(zhǎng)度; 分布在東部和西部的組件將伸展至占據(jù)容器剩余部分的全部寬度; 最后剩余的部分將分配給位于中央的組件。,注意: 如果某個(gè)區(qū)域沒有分配組件,則其他組件可以占據(jù)它的空間。例如,如果北部沒有分配組件,則西部和東部的組件將向上擴(kuò)展到容器的最上方; 如果西部和東部沒有分配組件,則位于中央的組件將橫向擴(kuò)展到容器的左右邊界。 BorderLayout是JApplet的缺省布局策略。,BorderLayout類有兩個(gè)構(gòu)造方法,分別是 BorderLayout( ):創(chuàng)建一個(gè)各組件間的水平、垂直間隔為0的BorderLayout類的對(duì)象; Border
6、Layout(int hgap, int vgap):創(chuàng)建一個(gè)各組件間的水平間隔為hgap、垂直間隔為vgap的BorderLayout類的對(duì)象。 BorderLayout僅指定了五個(gè)區(qū)域的位置,如果容器中需要加入的組件超過五個(gè),就必須使用容器的嵌套或改用其他的布局策略。,【示例程序c11_1.java】 使用BorderLayout布局策略在五個(gè)位置分別加入了四個(gè)按鈕和一個(gè)標(biāo)簽,當(dāng)點(diǎn)擊按鈕時(shí),標(biāo)簽的文本就是按鈕的標(biāo)簽的文本。,圖11.1 程序c11_1的運(yùn)行結(jié)果,11.1.3 CardLayout CardLayout的版面布局方式是將每個(gè)組件看成一張卡片,如同撲克牌一樣將組件堆疊起來,而顯
7、示在屏幕上的每次只能是最上面的一個(gè)組件,這個(gè)被顯示的組件將占據(jù)所有的容器空間。用戶可通過表11.1所示的方法選擇使用其中的卡片。 CardLayout類有兩個(gè)構(gòu)造方法,分別是 CardLayout( ):使用默認(rèn)(間隔為0)方式創(chuàng)建一個(gè)CardLayout( )類對(duì)象 CardLayout(int hgap,int vgap):使用hgap指定的水平間隔和vgap指定的垂直間隔創(chuàng)建一個(gè)CardLayout( )類對(duì)象。,表11.1 CardLayout類的常用成員方法,【示例程序c11_2.java】 使用CardLayout的布局在容器中放入三個(gè)按鈕,顯示第二個(gè)按鈕。 注意:在程序中調(diào)用容器
8、的add( )方法可將組件加入到容器中。 例如語句add(a,bt1);中的字符串“a是為組件分配的字符串名字,分配的目的是為了讓布局編輯器根據(jù)這個(gè)名字調(diào)用顯示這個(gè)組件。,圖11.2,11.1.4 GridLayout 如果界面上需要放置的組件較多,且這些組件的大小又基本一致時(shí),例如計(jì)算器、遙控器的面板,使用GridLayout布局策略是最佳的選擇。 GridLayout的布局策略是把容器的空間劃分為若干行、若干列的網(wǎng)格區(qū)域,而每個(gè)組件按添加的順序從左向右、從上向下地占據(jù)這些網(wǎng)格。,GridLayout類的三個(gè)構(gòu)造方法如下: (1) GridLayout( ):按默認(rèn)(1行1列)方式創(chuàng)建一個(gè)G
9、ridLayout布局。 (2) GridLayout(int rows,int cols):創(chuàng)建一個(gè)具有rows行、cols列的GridLayout布局。 (3) GridLayout(int rows,int cols,int hgap,int vgap):按指定的行數(shù)rows、列數(shù)cols、水平間隔hgap和垂直間隔vgap創(chuàng)建一個(gè)GridLayout布局。,【示例程序c11_3.java】 使用GridLayout的布局,在容器中放入4個(gè)按鈕。,圖11.3 程序c11_3的運(yùn)行結(jié)果,11.1.5 BoxLayout BoxLayout是swing所提供的布局管理器,繼承關(guān)系如下: ja
10、va.lang.Object javax.swing.BoxLayout BoxLayout只有兩種排列方式,一種是水平,另一種是垂直。我們可以使用BoxLayout所提供的兩個(gè)常量X_AXIS、Y_AXIS來指明組件在容器中是水平還是垂直排列的。 BoxLayout類與Box類結(jié)合,可以提供多樣化的布局。通常的做法是使用若干個(gè)Box容器,由于Box容器的默認(rèn)布局是BoxLayout,而且只能使用這個(gè)布局,因此,每一個(gè)Box容器中組件的排列方式也只能按水平或垂直方向排列。,1BoxLayout和Box的構(gòu)造函數(shù) 創(chuàng)建BoxLayout類的對(duì)象的構(gòu)造方法是: BoxLayout(Containe
11、r target,int axis) target是容器對(duì)象; axis指明target中組件的排列方式,其值可為表示水平排列的BoxLayout.X_AXIS,或?yàn)楸硎敬怪迸帕械腂oxLayout.Y_AXIS。,Box這個(gè)容器默認(rèn)的布局是BoxLayout,而且只能使用這個(gè)布局,否則編譯時(shí)就會(huì)產(chǎn)生錯(cuò)誤。由于BoxLayout是以水平或垂直方式排列的,因此,當(dāng)我們要?jiǎng)?chuàng)建一個(gè)Box容器時(shí),就必須指定Box容器中組件的排列方式是水平還是垂直的。 Box的構(gòu)造函數(shù)為: Box(int axis) 參數(shù)axis,用以指定Box中的組件是按水平還是按垂直方式排列的。值可以用BoxLayout.X_AX
12、IS或BoxLayout.Y_AXIS指定 可使用Box類提供的兩個(gè)方法creatHorizontalBox( )與creatVerticalBox( )來指定。,2BoxLayout類和Box類的常用成員方法,BoxLayout類的常用成員方法,Box類的常用成員方法,Box類的常用成員方法,為方便布局管理,Box類還提供了4種透明組件Glue、Strut、Rigid和Filler,可以將這些透明組件插入其他組件的中間,使這些組件產(chǎn)生分開的效果。這4種透明組件的作用是: Glue:將Glue兩邊的組件擠到容器的兩端。 Strut:將Strut兩端的組件按水平或垂直方向指定的大小分開。 Rig
13、id:可以設(shè)置二維的限制,將組件按水平或垂直方向指定的大小分開。 Filler:不僅可以設(shè)置二維的限制,將組件按水平或垂直方向指定的大小分開,而且還可以設(shè)置最大、較佳、最小的長(zhǎng)寬大小。,構(gòu)造方法: Box.Filler(Dimensionmin, Dimensionpref, Dimensionmax) 使用給定的大小范圍創(chuàng)建形狀的構(gòu)造方法。,3使用BoxLayout時(shí)需要注意的事項(xiàng) (1) 當(dāng)組件按BoxLayout布局排列好后,不管窗口縮小或放大都不會(huì)變動(dòng)。 (2) 當(dāng)使用水平排列方式時(shí),若放進(jìn)去的組件不等高,則系統(tǒng)將會(huì)使所有的組件與最高組件等高。 (3) 當(dāng)放在同一行的組件超出容器的寬度
14、時(shí),系統(tǒng)不會(huì)自動(dòng)換行,需要用戶自行處理。,【示例程序c11_4.java】 使用BoxLayout布局,將6個(gè)組件按結(jié)果要求排列。,圖11.4 程序c11_4的運(yùn)行結(jié)果,11.2 鍵盤事件(KeyEvent),當(dāng)用戶使用鍵盤進(jìn)行操作時(shí)則會(huì)產(chǎn)生KeyEvent事件。 處理KeyEvent事件的監(jiān)聽者對(duì)象是可以實(shí)現(xiàn)KeyListener接口的類,或者是繼承KeyAdapter的子類。這些對(duì)象使用組件的 addKeyListener 方法注冊(cè),以接收此類事件。 在KeyListener這個(gè)接口中有如下三個(gè)事件: keyPressed(KeyEvent e) 鍵盤按鍵被按下的事件。 keyReleas
15、ed(KeyEvent e) 鍵盤按鍵被放開的事件。 keyTyped(KeyEvent e) 按鍵被敲擊的事件。,按下和釋放鍵盤上的鍵會(huì)導(dǎo)致(依次)生成以下鍵事件: KEY_PRESSED KEY_TYPED(只在可生成有效 Unicode 字符時(shí)產(chǎn)生) KEY_RELEASED KEY_TYPED事件,輸入 Unicode 字符時(shí)生成此類事件,它們被認(rèn)為是發(fā)現(xiàn)字符輸入的最佳方式。對(duì)于不生成 Unicode 字符的鍵是不會(huì)生成鍵入鍵事件的(如動(dòng)作鍵等)。通過 getKeyChar 方法可獲得鍵入的字符。 KEY_PRESSED和KEY_RELEASED事件,只要按下或釋放鍵就生成這些事件,它
16、們是發(fā)現(xiàn)不生成字符輸入的鍵(如動(dòng)作鍵等)的惟一方式。通過 getKeyCode 方法可指出按下或釋放的鍵,該方法返回一個(gè)虛擬鍵碼。,KeyEvent類中的常用方法有: (1) public char getKeyChar( ): 返回引發(fā)鍵盤事件的按鍵對(duì)應(yīng)的Unicode字符。如果這個(gè)按鍵沒有Unicode字符與之對(duì)應(yīng),則返回KeyEvent類的一個(gè)靜態(tài)常量KeyEvent.CHAR_UNDEFINED。 KEY_PRESSED 和 KEY_RELEASED 事件不用于報(bào)告字符輸入。因此,可以保證此方法返回的值只對(duì) KEY_TYPED 事件有意義。 例如:shift + a 的 KEY_TYP
17、ED 事件返回值 A。,(2) public int getKeyCode() : 返回與此事件中的鍵關(guān)聯(lián)的整數(shù) keyCode。對(duì)于 KEY_TYPED 事件,該 keyCode 為 VK_UNDEFINED。 例如: 按鍵shift 的 KEY_PRESSED 事件返回值 VK_SHIFT (3) public static String getKeyText(intkeyCode) : 返回描述 keyCode 的 String。 例如:按鍵shift的 KEY_PRESSED 事件中KeyEvent.getKeyText(e.getKeyCode()返回為“shift”,【示例程序c1
18、1_5.java】 鍵盤事件程序。,圖11.6 c11_5運(yùn)行結(jié)果,11.3 鼠標(biāo)事件(MouseEvent),在圖形用戶界面中,鼠標(biāo)主要用來進(jìn)行選擇、切換或繪畫。當(dāng)用戶用鼠標(biāo)進(jìn)行交互操作時(shí),會(huì)產(chǎn)生鼠標(biāo)事件MouseEvent。 處理MouseEvent事件的監(jiān)聽者對(duì)象是可以實(shí)現(xiàn)MouseListener接口和MouseMotionListener接口的類,或者是繼承MouseAdapter或MouseMotionAdapter的子類。,與Mouse有關(guān)的事件可分為兩類: 鼠標(biāo)事件 按下鼠標(biāo)按鍵 釋放鼠標(biāo)按鍵 單擊鼠標(biāo)按鍵(按下并釋放) 鼠標(biāo)光標(biāo)進(jìn)入組件幾何形狀的未遮掩部分 鼠標(biāo)光標(biāo)離開組件幾
19、何形狀的未遮掩部分 鼠標(biāo)移動(dòng)事件 移動(dòng)鼠標(biāo) 拖動(dòng)鼠標(biāo),組件的鼠標(biāo)事件發(fā)生時(shí),MouseEvent 對(duì)象被傳遞給每一個(gè) MouseListener 或 MouseAdapter 對(duì)象,這些對(duì)象使用組件的 addMouseListener 方法注冊(cè),以接收“感興趣的”鼠標(biāo)事件。每個(gè)此類偵聽器對(duì)象都獲得包含鼠標(biāo)事件的 MouseEvent。 組件的鼠標(biāo)移動(dòng)事件發(fā)生時(shí), MouseEvent 對(duì)象還傳遞給每一個(gè) MouseMotionListener 或 MouseMotionAdapter 對(duì)象,這些對(duì)象使用組件的 addMouseMotionListener 方法注冊(cè),以接收鼠標(biāo)移動(dòng)事件。每個(gè)此類
20、偵聽器對(duì)象都獲得包含鼠標(biāo)移動(dòng)事件的 MouseEvent。,接口 MouseListener的成員方法,接口 MouseMotionListener的成員方法,MouseEvent的常用成員方法,【示例程序c11_6.java】 鼠標(biāo)事件程序。,圖11.7 程序c11_6的運(yùn)行結(jié)果,11.4 窗 口 與 面 板,11.4.1 JFrame容器 任何一個(gè)GUI程序必須要有一個(gè)頂層容器不被其它容器包含而只包含其它容器 JFrame是Swing包中的一個(gè)頂層容器,包括有邊框、菜單欄和內(nèi)容窗格等。 JFrame類包含支持任何通用窗口特性的基本功能,如最小化窗口、移動(dòng)窗口、重新設(shè)定窗口大小等。 JFra
21、me容器作為最頂層容器,不能被其他容器所包含,但可以被其他容器創(chuàng)建并彈出成為獨(dú)立的容器。,JFrame類的繼承關(guān)系如下: java.lang.Object java.awt.Component java.awt.Container java.awt.Window java.awt.Frame javax.swing.JFrame,使用JFrame容器需要注意以下幾點(diǎn): (1) 常用構(gòu)造方法有: JFrame( ) 創(chuàng)建一個(gè)無標(biāo)簽的JFrame對(duì)象 JFrame(String title) 創(chuàng)建一個(gè)標(biāo)簽為title的JFrame對(duì)象 JFrame對(duì)象的標(biāo)題屬性還可以使用 getTitle( )
22、和setTitle(String) 來獲取或指定。 (2)setSize(int x,int y):設(shè)置JFrame容器大小。 (3)創(chuàng)建的JFrame默認(rèn)是不可見的,若要使其可見,則需要使用show( )方法或給出實(shí)際參數(shù)為true的setVisible(boolean)方法。,(4) 向JFrame中添加組件時(shí),必須先取得ContentPane,然后再使用add( )方法把組件加入到此ContentPane中,而不能像AWT中的Frame那樣直接調(diào)用add( )方法。 (5) JFrame類可以引發(fā)WindowEvent類代表的所有七種窗口事件(見表11.8)。 (6)JFrame關(guān)閉窗口
23、的操作不能通過點(diǎn)擊關(guān)閉圖標(biāo)來實(shí)現(xiàn),默認(rèn)的情況下點(diǎn)擊關(guān)閉按鈕是將對(duì)象隱藏,但可以使用下述三個(gè)辦法之一來關(guān)閉窗口: 設(shè)置一個(gè)按鈕,當(dāng)用戶點(diǎn)擊此按鈕時(shí)關(guān)閉窗口; 用WINDOWS_CLOSING事件做出響應(yīng),關(guān)閉窗口; 使用菜單命令。 但都需要用到關(guān)閉JFrame的System.exit(0)方法。,setDefaultCloseOperation方法: 格式:public void setDefaultCloseOperation(intoperation) 作用:設(shè)置用戶在此窗體上發(fā)起 close 時(shí)默認(rèn)執(zhí)行的操作。必須指定以下選項(xiàng)之一: DO_NOTHING_ON_CLOSE:不執(zhí)行任何操作;
24、要求程序在已注冊(cè)的 WindowListener 對(duì)象的 windowClosing 方法中處理該操作。 HIDE_ON_CLOSE:調(diào)用任意已注冊(cè)的 WindowListener 對(duì)象后自動(dòng)隱藏該窗體。 DISPOSE_ON_CLOSE:調(diào)用任意已注冊(cè) WindowListener 的對(duì)象后自動(dòng)隱藏并釋放該窗體。 EXIT_ON_CLOSE:使用 System exit 方法退出應(yīng)用程序。僅在應(yīng)用程序中使用。 注意:默認(rèn)情況下,該值被設(shè)置為 HIDE_ON_CLOSE。更改此屬性的值將導(dǎo)致激發(fā)屬性更改事件,其屬性名稱為 defaultCloseOperation。,【示例程序c11_7.ja
25、va】 創(chuàng)建兩個(gè)窗口對(duì)象,點(diǎn)擊第一個(gè)窗口中的按鈕時(shí)打開第二個(gè)窗口。,11.4.2 窗口事件(WindowEvent) WindowEvent指示窗口狀態(tài)改變的事件。 當(dāng)打開、關(guān)閉、激活、停用、圖標(biāo)化或取消圖標(biāo)化 Window 對(duì)象時(shí),或者焦點(diǎn)轉(zhuǎn)移到 Window 內(nèi)或移出 Window 時(shí),由 Window 對(duì)象生成此事件。 該事件被傳遞給每一個(gè)使用窗口的 addWindowListener 方法注冊(cè)以接收這種事件的 WindowListener 或 WindowAdapter 對(duì)象。發(fā)生事件時(shí),所有此類偵聽器對(duì)象都將獲取此 WindowEvent。,表11.6 WindowEvent類包含的
26、窗口事件,接口 WindowListener 中的方法,WindowEvent類的主要方法有g(shù)etWindow( )和getSource( )。 這兩個(gè)方法的區(qū)別是: getWindow( )方法返回引發(fā)當(dāng)前WindowEvent事件的具體窗口,返回值是具體的Window對(duì)象; getSource( )方法返回的是相同的事件引用,其返回值的類型為Object。,【示例程序c11_8.java】 制作兩個(gè)JFrame窗口,實(shí)現(xiàn)兩個(gè)窗口的切換、關(guān)閉、最小化等操作。,11.4.3 JPanel容器 在設(shè)計(jì)用戶界面時(shí),為了更合理的安排各組件在窗口的位置,可以考慮將所需組件先排列在一個(gè)容器中,然后將其作
27、為一個(gè)整體嵌入窗口。 Panel和JPanel就是這樣一類被稱為面板的容器。它們是一類無邊框的、不能被移動(dòng)、放大、縮小或關(guān)閉的容器。 AWT的Panel與Swing的JPanel的區(qū)別是:JPanel支持雙緩沖(Double Buffering)功能,在處理動(dòng)畫上較少發(fā)生畫面閃爍的情況。 JPanel類的繼承關(guān)系如下:,java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent javax.swing.JPanel 不能把JPanel作為一個(gè)圖形界面程序最底層的容器,也不能指明JPanel的大小。
28、JPanel總是作為一個(gè)容器組件被加入到JFrame、JApplet等其他容器中,當(dāng)然,JPanel也可以加入到JPanel容器中。 JPanel的大小由包含在它里邊的組件,包容它的那個(gè)容器的布局策略,以及該容器中的其他組件所決定。,JPanel的構(gòu)造方法,【示例程序c11_9.java】 設(shè)置兩個(gè)面板容器p1和p2,點(diǎn)擊p1容器中的按鈕使p2容器的標(biāo)簽產(chǎn)生結(jié)果,圖11.11 c11_9的運(yùn)行結(jié)果,程序說明: 最底層容器是cp容器,它上面放入了pal1容器和pal2容器。pal1容器中放入了一個(gè)標(biāo)簽1組件。pal2容器中放入pal3容器和pal4容器。pal3容器中放入一個(gè)標(biāo)簽2組件、一個(gè)按鈕
29、組件和一個(gè)標(biāo)簽3組件。pal4容器中放入一個(gè)文本域組件。,11.4.4 JScrollPane容器 當(dāng)窗口里的內(nèi)容大于窗口時(shí),我們可以在窗口的右邊和下邊設(shè)置滾動(dòng)條,借助于滾動(dòng)條我們就可以看到整個(gè)窗口的內(nèi)容。JScrollPane就是具有這種功能的組件,我們將它稱為滾動(dòng)面板,用于滾動(dòng)窗口。 JScrollPane類的繼承關(guān)系如下: java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent javax.swing. JScrollPane,JScrollPane類的構(gòu)造方法,JScrollPane中滾
30、動(dòng)條的出現(xiàn)時(shí)機(jī),可以利用下面的參數(shù)來設(shè)置: HORIZONTAl_SCROLLBAR_ALWAYS:顯示水平滾動(dòng)條。 VERTICAl_SCROLLBAR_ALWAYS:顯示垂直滾動(dòng)條。 HORIZONTAl_SCROLLBAR_NEVER:不顯示水平滾動(dòng)條。 VERTICAL_SCROLLBAR_NEVER:不顯示垂直滾動(dòng)條。 HORIZONTAl_SCROLLBAR_AS_NEEDED:需要時(shí)顯示水平滾動(dòng)條,即當(dāng)組件的內(nèi)容在水平方向上大于顯示區(qū)域時(shí)出現(xiàn)水平滾動(dòng)條。 VERTICAl_SCROLLBAR_AS_NEEDED:需要時(shí)顯示垂直滾動(dòng)條,即當(dāng)組件的內(nèi)容在垂直方向上大于顯示區(qū)域時(shí)出現(xiàn)垂
31、直滾動(dòng)條。 這些參數(shù)是在ScrollPaneConstants接口中定義的,而JScrollPane類實(shí)現(xiàn)了此接口,因此也就能使用這些參數(shù)。,11.4.5 JScrollbar組件 事實(shí)上,JScrollPane是由JViewPort和JScrollBar組件組成的。 JViewPort組件主要負(fù)責(zé)顯示內(nèi)容的區(qū)域大??;JScrollBar組件則產(chǎn)生窗口滾動(dòng)條,讓用戶看到整個(gè)內(nèi)容。用戶使用JScrollPane組件時(shí)不會(huì)直接與JViewPort和JScrollBar組件打交道,使用比較方便。 但是,當(dāng)我們想對(duì)滾動(dòng)條做更細(xì)的設(shè)置時(shí),例如在拖動(dòng)時(shí)一次滾動(dòng)多少區(qū)域等,就必須了解JScrollBar所提
32、供的功能。,圖11.12 滾動(dòng)條各部分的名稱,1JScrollbar組件的構(gòu)造方法,參數(shù) orientation:可為JScrollbar.VERTICAL或JScrollbar.HORIZONTAL,用于指定滾動(dòng)條的方向; value:默認(rèn)為0,表示開始時(shí)滾動(dòng)塊就設(shè)置在這個(gè)位置上; extent:指定滾動(dòng)塊的位移區(qū)域,當(dāng)在滾動(dòng)塊與滾動(dòng)箭頭之間點(diǎn)擊時(shí),來確定滾動(dòng)塊應(yīng)移動(dòng)的位置; Minimum:指定滾動(dòng)槽的最小值(默認(rèn)值為0); Maximum:指定滾動(dòng)槽的最大值(默認(rèn)值為100)。 在實(shí)際使用中,如果value值小于minimum值,那么value值被設(shè)置成等于minimum值。如果valu
33、e值大于maximum值,那么value值就設(shè)置成等于maximum值。,表11.10 JScrollbar類的成員方法,2JScrollbar類的常用成員方法,表11.10 JScrollbar類的成員方法,3調(diào)整事件(AdjustmentEvent) JScrollbar能夠接受調(diào)整事件(AdjustmentEvent)。AdjustmentEvent類只包含一個(gè)事件,即代表GUI組件狀態(tài)發(fā)生連續(xù)變化的事件ADJUSTMENT_VALUE_CHANGED。當(dāng)用戶通過各種方式改變滾動(dòng)塊位置從而改變其代表的數(shù)值時(shí),都會(huì)引發(fā)調(diào)整事件。 為了對(duì)JScrollbar上發(fā)生的調(diào)整事件進(jìn)行處理,在程序中
34、必須注冊(cè)調(diào)整事件的監(jiān)聽者對(duì)象,并通過相應(yīng)的方法來實(shí)現(xiàn)其功能。,【示例程序c11_10.java】 設(shè)計(jì)一個(gè)標(biāo)簽、三個(gè)滾動(dòng)條,三個(gè)滾動(dòng)條分別代表紅、綠、藍(lán)三種顏色,改變滑塊的值從而改變標(biāo)簽背景的顏色。,圖11.13 程序c11_10的運(yùn)行結(jié)果,11.4.6 JTabbedPane容器 當(dāng)界面上需要放置的組件很多時(shí),可以使用的另一種容器是JTabbedPane。 JTabbedPane容器與我們?nèi)粘J褂玫目ㄆ蓄愃?,它由多個(gè)稱為標(biāo)簽框架的卡片和表明該框架的標(biāo)簽組成。每個(gè)標(biāo)簽框架和標(biāo)簽都自成一個(gè)系統(tǒng)(也可稱為一張卡片),我們可以在標(biāo)簽框架中加入各式各樣的組件及功能。由于這些卡片被疊放在一起,為了使用
35、方便,卡片上的標(biāo)簽在頂行或底部排成一行(也可以在左邊或右邊排成一列),當(dāng)用鼠標(biāo)點(diǎn)擊某一個(gè)標(biāo)簽時(shí),這個(gè)標(biāo)簽所在的卡片(標(biāo)簽框架窗口)就會(huì)被翻到最上面,顯示出此框架的內(nèi)容。,JTabbedPane類的繼承關(guān)系如下: java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent javax.swing.JTabbedPane,可以使用下述兩個(gè)構(gòu)造方法創(chuàng)建JTabbedPane類的對(duì)象: JTabbedPane( ): 創(chuàng)建一個(gè)空的JTabbedPane對(duì)象。 JTabbedPane(int tapposit
36、ion): 創(chuàng)建一個(gè)空的 TabbedPane,具有以下指定選項(xiàng)卡布局中的一種: JTabbedPane.TOPJTabbedPane.BOTTOMJTabbedPane.LEFT JTabbedPane.RIGHT JTabbedPane(inttabPlacement, inttabLayoutPolicy) 創(chuàng)建一個(gè)空的 TabbedPane,使其具有指定的選項(xiàng)卡布局和選項(xiàng)卡布局策略。布局策略可以是以下兩種之一: JTabbedPane.WRAP_TAB_LAYOUT JTabbedPane.SCROLL_TAB_LAYOUT,【示例程序c11_11.java】 建立帶多個(gè)卡片的窗口。,
37、圖11.14 程序c11_11的運(yùn)行結(jié)果,11.5 菜 單 設(shè) 計(jì),菜單和工具欄可提供簡(jiǎn)單明了的指示說明,讓用戶順利地完成軟件的操作。菜單是非常重要的GUI組件,是軟件中必備的組件之一,利用菜單可以將程序功能模塊化。 Java語言中提供了多種樣式的菜單,如一般式、復(fù)選框式、快捷鍵式及彈出式菜單等。這里我們僅介紹一般式菜單。在Java中,一個(gè)一般式菜單由如圖11.15所示的菜單欄(JMenuBar)、菜單(JMenu)和菜單項(xiàng)(JMenuItem)三類對(duì)象組成。,菜單欄(JMenuBar)、菜單(JMenu)和菜單項(xiàng)(JMenuItem)三類的集成關(guān)系: java.lang.Object jav
38、a.awt.Component java.awt.Container javax.swing.JComponent javax.swing.JMenuBar javax.swing.AbstractButton javax.swing.JMenuItem javax.swing.JMenu,1菜單欄(JMenuBar) 菜單欄用來封裝與菜單欄相關(guān)的各項(xiàng)操作,它只用來管理菜單,不參與交互式操作。Java應(yīng)用程序中的菜單都包含在一個(gè)菜單欄對(duì)象之中。 創(chuàng)建JMenuBar類菜單欄對(duì)象的構(gòu)造方法只有一個(gè),那就是: JMenuBar( ) 注意:JMenuBar需要結(jié)合至少一個(gè)以上的JMenu組件才會(huì)在
39、畫面上顯現(xiàn)出視覺效果。,2菜單(JMenu) 菜單是用來存放和整合菜單項(xiàng)(JMenuItem)的組件,它是構(gòu)成一個(gè)菜單不可或缺的組件之一。菜單可以是單一層次的結(jié)構(gòu),也可以是一個(gè)多層次的結(jié)構(gòu),具體使用何種形式的結(jié)構(gòu)則取決于界面設(shè)計(jì)上的需要。 菜單的該實(shí)現(xiàn)是一個(gè)包含 JMenuItem 的彈出窗口,用戶選擇 JMenuBar 上的項(xiàng)時(shí)會(huì)顯示該 JMenuItem。除 JMenuItem 之外,JMenu 還可以包含 JSeparator。 菜單本質(zhì)上是帶有關(guān)聯(lián) JPopupMenu 的按鈕。當(dāng)按下“按鈕”時(shí),就會(huì)顯示 JPopupMenu。如果“按鈕”位于 JMenuBar 上,則該菜單為頂層窗口
40、。如果“按鈕”是另一個(gè)菜單項(xiàng),則 JPopupMenu 就是“右拉”菜單。,創(chuàng)建菜單對(duì)象使用JMenu類的下述構(gòu)造方法: JMenu( ): 創(chuàng)建一個(gè)空標(biāo)簽的JMenu對(duì)象。 JMenu(String text): 使用指定的標(biāo)簽創(chuàng)建一個(gè)JMenu對(duì)象。 JMenu(String text,Boolean b): 使用指定的標(biāo)簽創(chuàng)建一個(gè)JMenu對(duì)象,并給出此菜單是否具有下拉式的屬性。 JMenu(Action a): 創(chuàng)建一個(gè)支持Action的JMenu對(duì)象。,3菜單項(xiàng)(JMenuItem) 菜單項(xiàng)用來封裝與菜單項(xiàng)相關(guān)的操作,它是菜單系統(tǒng)中最基本的組件。 從前面列出的繼承關(guān)系可以看出,菜單項(xiàng)
41、JMenuItem繼承AbstractButton類,因此JMenuItem具有許多AbstractButton的特性,也可以說JMenuItem是一種特殊的按鈕。 JMenuItem支持了許多在按鈕上好用的功能,例如加入圖標(biāo)(Icon),以及當(dāng)我們?cè)诓藛沃羞x擇到某一項(xiàng)JMenuItem時(shí)就如同按下按鈕的操作一樣會(huì)觸發(fā)ActionEvent事件。我們可以通過ActionEvent的機(jī)制來針對(duì)不同的JMenuItem編寫其對(duì)應(yīng)的程序代碼。,JMenuItem類的構(gòu)造方法,4制作菜單的一般步驟 制作一個(gè)可用的菜單系統(tǒng),一般需要經(jīng)過下面的幾個(gè)步驟: (1) 創(chuàng)建一個(gè)JMenuBar對(duì)象并將其放置在一
42、個(gè)JFrame中; (2) 創(chuàng)建JMenu對(duì)象; (3) 創(chuàng)建JMenuItem對(duì)象并將其添加到JMenu對(duì)象中; (4) 把JMenu對(duì)象添加到JMenuBar中。 當(dāng)然,上面的這幾步主要是創(chuàng)建菜單的結(jié)構(gòu),如果要使用菜單所指出的功能,則必須要為菜單項(xiàng)注冊(cè)監(jiān)聽者,并在監(jiān)聽者提供的事件處理程序中寫入相應(yīng)的代碼。,【示例程序c11_12.java】 創(chuàng)建菜單。,圖11.16 程序c11_12的運(yùn)行結(jié)果,11.6 對(duì) 話 框 設(shè) 計(jì),顧名思義,對(duì)話框(Dialog)是向用戶顯示信息并獲取程序繼續(xù)運(yùn)行所需數(shù)據(jù)的窗口,可以起到與用戶交互的作用。 從本質(zhì)上講,對(duì)話框是一種特殊的窗體,它通過一個(gè)或多個(gè)組件與
43、用戶交互。與JFrame一樣,對(duì)話框是有邊框、有標(biāo)題且獨(dú)立存在的容器,并且不能被其他容器所包容,但是對(duì)話框不能作為程序的最外層容器,也不能包含菜單條,此外,Java的對(duì)話框上沒有最大化和最小化按鈕。,Java提供了JDialog與JOptionPane兩類對(duì)話框組件。JOptionPane提供了許多現(xiàn)成的對(duì)話框樣式供用戶選擇使用。如果JOptionPane提供的樣式無法滿足我們的需求時(shí),就需要使用JDialog來自行設(shè)計(jì)。 對(duì)話框可分為模態(tài)和非模態(tài)兩種類型。在程序的運(yùn)行過程中,模態(tài)對(duì)話框一旦出現(xiàn)在屏幕上,則要求用戶必須對(duì)該對(duì)話框作出響應(yīng),然后關(guān)閉對(duì)話框后才能回到原來的應(yīng)用程序中繼續(xù)執(zhí)行。而非模
44、態(tài)對(duì)話框則無上述要求。 使用JOptionPane對(duì)象所得到的對(duì)話框都是模態(tài)對(duì)話框,而使用JDialog設(shè)計(jì)的對(duì)話框則可根據(jù)實(shí)際需要進(jìn)行選擇。,11.6.1 JOptionPane對(duì)話框 JOptionPane提供了許多現(xiàn)成的對(duì)話框樣式,用戶只需使用該類提供的靜態(tài)方法,指定方法中所需要的參數(shù),JOptionPane對(duì)話框就能輕易的顯示出來。利用JOptionPane類來制作對(duì)話框不僅簡(jiǎn)單快速,而且程序代碼簡(jiǎn)潔清晰。 JOptionPane類的繼承關(guān)系如下: java.lang. Object java.awt.Component java.awt.Container javax.swing.
45、JComponent javax.swing.JOptionPane,JOptionPane的構(gòu)造方法,JOptionPane的構(gòu)造方法,參數(shù): parentComponent 定義作為此對(duì)話框的父對(duì)話框的 Component。 message 要置于對(duì)話框中的描述消息。在最常見的應(yīng)用中,message 就是一個(gè) String 或 String 常量。不過,此參數(shù)的類型實(shí)際上是 Object。 messageType 定義 message 的樣式。外觀管理器根據(jù)此值對(duì)對(duì)話框進(jìn)行不同地布置,并且通常提供默認(rèn)圖標(biāo)??赡艿闹禐椋?ERROR_MESSAGE INFORMATION_MESSAGE W
46、ARNING_MESSAGE QUESTION_MESSAGE PLAIN_MESSAGE,參數(shù): optionType 定義在對(duì)話框的底部顯示的選項(xiàng)按鈕的集合: DEFAULT_OPTION YES_NO_OPTION YES_NO_CANCEL_OPTION OK_CANCEL_OPTION options 將在對(duì)話框底部顯示的選項(xiàng)按鈕集合的更詳細(xì)描述。options 參數(shù)的常規(guī)值是 String 數(shù)組,但是參數(shù)類型是 Object 數(shù)組。,參數(shù): icon 要置于對(duì)話框中的裝飾性圖標(biāo)。圖標(biāo)的默認(rèn)值由 messageType 參數(shù)確定。 title 對(duì)話框的標(biāo)題。 initialValue 默認(rèn)選擇(輸入值)。,實(shí)際上,利用JOptionPane類來產(chǎn)生對(duì)話框,通常不用new創(chuàng)建JOptionPane對(duì)象,而是使用JOptionPane類所提供的一些靜態(tài)方法產(chǎn)生對(duì)話框。 根據(jù)對(duì)話框的用途,可將JOptionPane類的對(duì)話框分為4種類型,分別是: 只給出提示信息的Message Dialog 要求用戶進(jìn)行確認(rèn)的Confirm Dialog 可輸入數(shù)據(jù)的Input Dialog 由用戶自己定義類型的Op
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)技術(shù)課件教學(xué)課件
- 2024年度設(shè)備供應(yīng)與安裝合同
- 2024年度國(guó)際搬家集裝箱租賃合同
- 2024年城市軌道交通系統(tǒng)集成與維護(hù)合同
- 2024光通信技術(shù)研發(fā)與生產(chǎn)合同
- 2024年度區(qū)塊鏈技術(shù)應(yīng)用研發(fā)合同
- 2024年度廢舊物資回收利用合同
- 2024年度三人合伙知識(shí)產(chǎn)權(quán)協(xié)議
- 2024年床上用品批量訂購合同
- 2024年度智能客服系統(tǒng)技術(shù)服務(wù)合同
- 垃圾自動(dòng)分揀機(jī)構(gòu)plc控制畢業(yè)論文
- 2023新鄉(xiāng)生態(tài)環(huán)境局事業(yè)單位考試真題
- 有限空間辨識(shí)與作業(yè)安全管理臺(tái)賬(模板)
- 設(shè)備維修崗位危險(xiǎn)源辨識(shí)風(fēng)險(xiǎn)評(píng)價(jià)及控制表
- Java語言程序設(shè)計(jì)PPT全套完整教學(xué)課件
- 小學(xué)英語-Mum bug's bag教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 天然氣輸送管道首站門站簡(jiǎn)介演示文稿
- 復(fù)盤養(yǎng)豬分析:探尋背后的成功秘訣
- 藝術(shù)設(shè)計(jì)本科專業(yè)人才培養(yǎng)方案
- qdslrdashboard應(yīng)用軟件使用說明
- 海康2023綜合安防工程師認(rèn)證試題答案HCA
評(píng)論
0/150
提交評(píng)論