JAVA語(yǔ)言程序設(shè)計(jì) 圖形用戶(hù)界面
《JAVA語(yǔ)言程序設(shè)計(jì) 圖形用戶(hù)界面》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《JAVA語(yǔ)言程序設(shè)計(jì) 圖形用戶(hù)界面(71頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第第7 7章章 圖形用戶(hù)界面圖形用戶(hù)界面2主要內(nèi)容n7.1 Java GUI概述nSwing組件nSwing容器(重點(diǎn):JFrame類(lèi))n7.2 圖形與繪圖n7.3 事件處理與Swing常用組件nJava事件處理機(jī)制n常用組件n7.4 布局管理器37.1 Java GUI概述7.1.1 AWT與SwingAWT組件:Java 2版本之前的Java平臺(tái)提供的一套圖形用戶(hù)界面;java.awt包中包含了一個(gè)完整的類(lèi)集以支持GUI程序的設(shè)計(jì);重量級(jí)組件,平臺(tái)相關(guān);沒(méi)有彈性,缺乏效率。Swing組件:建立在AWT組件之上;輕量級(jí)組件,平臺(tái)無(wú)關(guān);有彈性;效率高;豐富的視覺(jué)感受。47.1.2 Swing組
2、件Swing組件都是AWT的Container類(lèi)的直接子類(lèi)和間接子類(lèi)。57.1.2 Swing組件Swing組件以J開(kāi)頭,除了有與AWT類(lèi)似的按鈕(JButton)、標(biāo)簽(JLabel)、復(fù)選框(JCheckBox)、菜單(JMenu)等基本組件外,還增加了一個(gè)豐富的高層組件集合,如表格(JTable)、樹(shù)(JTree)。Swing組件從功能上分:(參見(jiàn)表7。1)容器組件(頂層容器,中間層容器,特殊容器)原子組件(基本組件,不可編輯組件,可編輯組件)原子組件必須加在容器組件內(nèi)。7.1.3 Swing容器 容器(Container)也是一個(gè)類(lèi),實(shí)際上是Component的子類(lèi),因此容器本身也是一
3、個(gè)組件,具有組件的所有性質(zhì),但是它的主要功能是容納其它組件和容器。1)容器可以簡(jiǎn)化圖形化界面的設(shè)計(jì),以整體結(jié)構(gòu)來(lái)布置界面。2)所有的容器都可以通過(guò)add()方法向容器中添加組件。6Swing容器層次結(jié)構(gòu)頂層容器頂層容器JLayeredPaneJLayeredPaneJRootPaneJRootPaneJContentPaneJContentPaneJGlassPaneJGlassPaneJMenuBarJMenuBarJRootPaneJRootPane(根面板)根面板):虛擬容器,無(wú)法操作。JLayeredPaneJLayeredPane(層次面板)層次面板):管理菜單欄和內(nèi)容面板。JCon
4、tentPaneJContentPane(內(nèi)容面板)內(nèi)容面板):Swing組件不能直接加入到的頂層容器中,必須添加到頂層容器的內(nèi)容面板上。JGlassPaneJGlassPane(玻璃面板)玻璃面板):用來(lái)產(chǎn)生繪圖效果及觸發(fā)窗口程序的各種事件。注注:中間層容器沒(méi)有根面板,不能在桌面上浮動(dòng),必須添加到頂層容器中才能顯示。7容器分類(lèi)n頂層容器窗體nJFrame;JWindow;JApplet;n對(duì)話(huà)框JDialog(JOptionPane)n中間層容器n面板JPanel;滾動(dòng)窗格JScrollPane,JScrollBar;拆分窗格JSplitPane;索查標(biāo)簽窗格JTabbedPanen特殊容器
5、n內(nèi)部窗體JInternalFrame;分層窗格JLayeredPane;根窗格JRootPane81.框架窗口JFrame框架窗口是一種窗體,其中帶有邊框、標(biāo)題欄及用于關(guān)閉和最大/最小化窗口的圖標(biāo)等,簡(jiǎn)稱(chēng)窗口。1。JFrame構(gòu)造方法主要有:nJFrame(),建立一個(gè)無(wú)標(biāo)題的JFrame。nJFrame(String title),建立一個(gè)標(biāo)題為title的JFrame。窗口的基本操作:(1)創(chuàng)建窗口 JFrame frame=new JFrame();(2)設(shè)置標(biāo)題JFrame frame=new JFrame(“窗口示例”);或者:JFrame myFrame=new JFrame()
6、;myFrame.setTitle(“窗口示例”);(3)設(shè)置初始位置setLocation(int x,int y)(4)設(shè)置大小setSize(int width,int height)(5)設(shè)置圖標(biāo)setIconImage(Icon icon)9框架窗口JFrame(6)定義關(guān)閉行為setDefaultCloseOperation(int operation)。operation取值:nDO_NOTHING_ON_CLOSE:當(dāng)窗口關(guān)閉時(shí),不做任何處理;nHIDE_ON_CLOSE:當(dāng)窗口關(guān)閉時(shí),隱藏這個(gè)窗口;nDISPOSE_ON_CLOSE:當(dāng)窗口關(guān)閉時(shí),隱藏并處理這個(gè)窗口;nEXI
7、T_ON_CLOSE:當(dāng)窗口關(guān)閉時(shí),退出程序。n默認(rèn)是HIDE_ON_CLOSE。(7)添加組件兩種方式:n用getContentPane()方法獲得JFrame的內(nèi)容面板,再對(duì)其加入組件:frame.getContentPane().add(childComponent)n建立一個(gè)JPanel或 JDesktopPane之類(lèi)的中間容器,把組件添加到容器中,用setContentPane()方法把該容器置為JFrame的內(nèi)容面板:JPanel conPane=new JPanel();/把其它組件添加到JPanel中;frame.setContentPane(conPane);/把conPan
8、e對(duì)象設(shè)置成為frame的內(nèi)容面板 10框架窗口JFrame【例7.1】建立一個(gè)標(biāo)題為“Swing窗口”,大小為(300,200),圖標(biāo)為javalogo.gif,位置居中的窗口。屏幕效果如圖所示。11Swing容器2.無(wú)邊框的窗口JWindowJWindow可以構(gòu)造無(wú)邊框的窗口。主要構(gòu)造方法有:nJWindow():創(chuàng)建一個(gè)無(wú)邊界的窗口;nJWindow(Frame owner):創(chuàng)建一個(gè)依賴(lài)Frame對(duì)象的窗口。3對(duì)話(huà)框JDialog 對(duì)話(huà)框與框架窗口類(lèi)似,是有邊框、有標(biāo)題、可獨(dú)立存在的頂級(jí)容器。對(duì)話(huà)框分為無(wú)模態(tài)對(duì)話(huà)框和模態(tài)對(duì)話(huà)框(只響應(yīng)對(duì)話(huà)框內(nèi)的事件)。構(gòu)造方法有:nJDialog(Fr
9、ame owner);nJDialog(Frame owner,Boolean modal);nJDialog(Frame owner,String title);nJDialog(Frame owner,String title,Boolean modal);4面板JPanelJPanel是一個(gè)非頂級(jí)的通用容器,總是處于其它一些容器中。JPanel不能象JFrame那樣能夠在桌面上浮動(dòng)。利用JPanel可以使版面的排列方式更生動(dòng),對(duì)于復(fù)雜GUI,通常由多個(gè)面板組成,而每個(gè)面板以特定的布局來(lái)排列組件。JPanel的構(gòu)造方法有:nJPanel();nJPanel(boolean isDouble
10、Buffered);nJPanel(LayoutManager layout);nJPanel(LayoutManager layout,boolean isDoubleBuffered);12Swing容器5.分割面板JSplitPane一次可將兩個(gè)組件同時(shí)顯示在兩個(gè)顯示區(qū)中,若想要同時(shí)在多個(gè)顯示區(qū)顯示組件,便必須同時(shí)使用多個(gè)JSplitPane。JSplitPane提供兩個(gè)常數(shù):HORIZONTAL_SPLIT、VERTICAL_SPLIT,用來(lái)設(shè)置水平分割或是垂直分割。6.JTabbedPane如果一個(gè)窗口的功能有幾項(xiàng),可以給每項(xiàng)設(shè)置一個(gè)標(biāo)簽,每個(gè)標(biāo)簽下面包含為完成此功能專(zhuān)用的若干組件。
11、用戶(hù)要使用哪項(xiàng)功能,只要單擊相應(yīng)的標(biāo)簽,就可以進(jìn)入相應(yīng)的頁(yè)面。這種選項(xiàng)卡功能的實(shí)現(xiàn)就需要使用JTabbedPane這個(gè)中間層容器。7.滾動(dòng)面板JScrollPane當(dāng)容器內(nèi)要容納的內(nèi)容大于容器時(shí),希望容器能夠有一個(gè)滾動(dòng)條,通過(guò)拖動(dòng)滑塊,就可以看到更多的內(nèi)容。JScrollPane就是能夠?qū)崿F(xiàn)這種功能的容器。8.JInternalFrame使用JInternalFrame容器類(lèi)可以實(shí)現(xiàn)在一個(gè)主窗口中打開(kāi)很多個(gè)文檔,每個(gè)文檔各自占用一個(gè)新的窗口。JInternalFrame的使用跟JFrame幾乎一樣,可以最大化、最小化、關(guān)閉窗口、加入菜單;唯一不同的是JInternalFrame是輕量級(jí)組件,它
12、只能是中間容器,必須依附于頂層容器上。137.1.4 基于Swing的Java GUI設(shè)計(jì)思路構(gòu)造用戶(hù)界面主要包括下述幾個(gè)概念:組件Component (API)容器-Container布局管理器LayoutManager事件處理在Java中,開(kāi)發(fā)一個(gè)GUI程序,通常需要以下幾步:(1)構(gòu)建一個(gè)頂層容器;通常是JFrame或JApplet(2)構(gòu)建若干個(gè)組件,組件可以是其它容器(因?yàn)槿萜饕彩墙M件);(3)設(shè)定容器的布局管理器;用容器的add方法將這些組件加入到這個(gè)容器中;(4)設(shè)置組件事件;并將組件事件與代碼關(guān)聯(lián)。147.2 圖形與繪圖7.2.1 繪圖表面在Swing程序中可以直接在頂層窗口(
13、通常是JApplet和JFrame)上繪圖,或者在JPanel的子類(lèi)上繪圖。7.2.2 圖形環(huán)境和圖形對(duì)象GUI組件(諸如applet或窗口)的左上角坐標(biāo)默認(rèn)為(0,0),坐標(biāo)對(duì)由一個(gè)x坐標(biāo)(水平坐標(biāo))和一個(gè)y坐標(biāo)(垂直坐標(biāo))組成。(x,y)(0,0)x軸y軸+x+y15圖形環(huán)境和圖形對(duì)象在屏幕上繪圖要使用Java圖形環(huán)境,每個(gè)Java組件(包括Swing組件),都有一個(gè)與之關(guān)聯(lián)的圖形環(huán)境,也稱(chēng)圖形上下文,用java.awt.Graphics類(lèi)的一個(gè)對(duì)象來(lái)表示。Graphics對(duì)象用于管理圖形環(huán)境,并在屏幕上繪制代表文本或其它圖形對(duì)象(如線(xiàn)條、橢圓、矩形或其它多邊形)的像素。Graphics
14、類(lèi)是所有圖形上下文的抽象基類(lèi),允許應(yīng)用程序?qū)D形繪制到由不同設(shè)備實(shí)現(xiàn)的組件上,以及繪制到空閑屏幕的映像中。一個(gè) Graphics 對(duì)象封裝有 Java 所支持的基本繪圖操作所需的狀態(tài)信息。此狀態(tài)信息包括下列屬性:n要被繪制到其上的組件對(duì)象;n繪制和剪貼坐標(biāo)的平移原點(diǎn);n當(dāng)前的剪貼區(qū);n當(dāng)前顏色;n當(dāng)前的字體;n當(dāng)前的邏輯像素操作函數(shù)(XOR 或 Paint);16圖形圖像處理類(lèi)Graphics類(lèi)常用方法1)畫(huà)線(xiàn)g.drawLine(xcenter,ycenter,xs,ys);2)畫(huà)圓g.drawArc(xcenter-50,ycenter-50,100,100,0,360);3)繪制字符串
15、g.drawString(lastdate,5,125)4)設(shè)置字體 g.setFont(clockFaceFont);Font clockFaceFont=new Font(Serif,Font.PLAIN,14);5)設(shè)置顏色 g.setColor(handColor);Color handColor=Color.blue;177.2.3 顏色njava.awt.Color類(lèi)定義了顏色常量和方法。每種顏色都是從RGB值創(chuàng)建出來(lái)的。public Color(int r,int g,int b);n預(yù)定義了13個(gè)顏色常量。見(jiàn)表7.4nColor類(lèi)的常用方法見(jiàn)表7.5187.2.4 字體 jav
16、a.awt.Font類(lèi):字體是從字形創(chuàng)建的,一個(gè)字形是一個(gè)位映射圖像,它定義字體中的字符和符號(hào)的外觀(guān)。Font clockFaceFont=new Font(Serif,Font.PLAIN,14);Font類(lèi)的構(gòu)造函數(shù)有3個(gè)參數(shù):字體名稱(chēng)、字體風(fēng)格和字體大小。1)字體名稱(chēng)可以是運(yùn)行程序的當(dāng)前系統(tǒng)所支持的任何字體,在Java1.1和以后的版本中,所支持的字體名字有Monospaced、SansSerif、Serif、Dialog和DialogInput。2)字體風(fēng)格public final static int PLAIN一個(gè)代表普通字體風(fēng)格的常量public final static int
17、 BOLD一個(gè)代表粗體字體風(fēng)格的常量public final static int ITALIC一個(gè)代表斜體字體風(fēng)格的常量也可以是BOLD與ITALIC的結(jié)合197.2.5 使用Graphics類(lèi)繪圖當(dāng)在AWT組件和Swing頂層窗口(JApplet和JFrame,是java.awt.Component的子類(lèi))上繪圖時(shí),需要重寫(xiě)組件的paint()方法;當(dāng)在Swing的JComponent的子類(lèi)組件上繪圖時(shí),則需重寫(xiě)paintComponent()方法。在這兩種情況(Swing和AWT)下,都是以一個(gè)Graphics對(duì)象作為參數(shù)。在某個(gè)組件需要進(jìn)行繪圖操作時(shí),系統(tǒng)會(huì)將Graphics對(duì)象傳遞給
18、paint方法或paintComponent方法。paint方法和paintComponent方法的頭部分別為:npublic void paint(Graphics g)npublic void paintComponent(Graphics g)20使用Graphics類(lèi)繪圖【例7.2】使用各種顏色、字體繪制文字及各種圖形。Graphic.java 217.3事件處理與Swing常用組件聲明組件,處理事件,將組件置于容器內(nèi)n事件處理機(jī)制:一種事件處理框架,其目的是把GUI交互動(dòng)作(鼠標(biāo)點(diǎn)擊、菜單選擇等)轉(zhuǎn)變?yōu)檎{(diào)用相關(guān)的事件處理程序進(jìn)行處理。JDK1.1以后Java采取了授權(quán)處理機(jī)制(Del
19、egation-based Model),事件源可以把在其自身所有可能發(fā)生的事件分別授權(quán)給不同的事件處理者來(lái)處理。n窗口管理器無(wú)法直接調(diào)用開(kāi)發(fā)人員提供的事件處理程序,必須在運(yùn)行時(shí)告訴事件模型,哪一個(gè)例程用于處理事件。因此,為了獲取任何事件,開(kāi)發(fā)人員必須事先通知窗口系統(tǒng),令其將事件發(fā)送給自己提供的事件處理程序,把事件處理程序注冊(cè)為窗口管理器中的一個(gè)回調(diào)例程,使之連接到產(chǎn)生事件的組件上。227.3.1 Java事件處理機(jī)制在事件處理的過(guò)程中,主要涉及三類(lèi)對(duì)象:n事件源,事件發(fā)生的場(chǎng)所,通常就是各個(gè)組件,例如按鈕JButton。n事件對(duì)象,用戶(hù)對(duì)界面操作在java語(yǔ)言上的描述,以類(lèi)的形式出現(xiàn),例如點(diǎn)
20、擊按鈕對(duì)應(yīng)的事件類(lèi)是ActionEvent。n事件處理者,接收事件對(duì)象并對(duì)其進(jìn)行處理的對(duì)象。(事件監(jiān)聽(tīng)器對(duì)象)該對(duì)象所屬的類(lèi)實(shí)現(xiàn)了java.awt.event或javax.swing.event包中的一個(gè)或多個(gè)事件監(jiān)聽(tīng)器的接口23【例7.3】關(guān)閉窗口事件處理。/CloseDemo1.javaimport javax.swing.*;import java.awt.event.*;public class CloseDemo1 public static void main(String args)JFrame jframe=new JFrame(關(guān)閉窗口例);/創(chuàng)建一個(gè)窗口 jframe.se
21、tSize(400,100);/設(shè)置窗口大小 jframe.setVisible(true);/使窗口可見(jiàn) myWinClose handler=new myWinClose();/聲明事件對(duì)象 jframe.addWindowListener(handler);/注冊(cè)事件監(jiān)聽(tīng)器 /實(shí)現(xiàn)了WindowListener接口的類(lèi)的定義class myWinClose implements WindowListener/關(guān)閉窗口的事件處理方法public void windowClosing(WindowEvent e)System.exit(0);public void windowClosed(
22、WindowEvent e)public void windowOpened(WindowEvent e)public void windowIconified(WindowEvent e)public void windowDeiconified(WindowEvent e)public void windowActivated(WindowEvent e)public void windowDeactivated(WindowEvent e)事件處理程序均可采用以下步驟進(jìn)行編寫(xiě):n編寫(xiě)一個(gè)實(shí)現(xiàn)了SomethingListener接口的類(lèi)。在其中包括用于事件處理的方法。n聲明一個(gè)類(lèi)的對(duì)象,如
23、handler。n調(diào)用組件的addSomethingListener(handler)方法。注冊(cè)事件監(jiān)聽(tīng)器對(duì)象,同時(shí)也就注冊(cè)了用于事件處理的回調(diào)程序。247.3.2精簡(jiǎn)事件處理程序的技巧1.使用監(jiān)聽(tīng)器適配器類(lèi)一個(gè)適配器類(lèi)實(shí)現(xiàn)一個(gè)接口,并為該接口的所有方法提供默認(rèn)實(shí)現(xiàn)(空方法體),從而允許我們僅僅覆蓋自己感興趣的少量方法?!纠?.4】利用適配器,進(jìn)行關(guān)閉窗口事件處理。/CloseDemo2.javaimport javax.swing.*;import java.awt.event.*;public class CloseDemo2 public static void main(String
24、args)JFrame jframe=new JFrame(關(guān)閉窗口例);jframe.setSize(400,100);jframe.setVisible(true);myWinClose2 handler=new myWinClose2();jframe.addWindowListener(handler);/定義繼承于窗口適配器的類(lèi)class myWinClose2 extends WindowAdapter public void windowClosing(WindowEvent e)System.exit(0);25精簡(jiǎn)事件處理程序的技巧2.匿名內(nèi)部類(lèi)的使用【例7.5】使用匿名類(lèi)進(jìn)
25、行關(guān)閉窗口事件處理。/CloseDemo3.javaimport javax.swing.*;import java.awt.event.*;public class CloseDemo3 public static void main(String args)JFrame jframe=new JFrame(關(guān)閉窗口例);jframe.setSize(400,100);jframe.setVisible(true);jframe.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)Syste
26、m.exit(0););26精簡(jiǎn)事件處理程序的技巧3.讓頂級(jí)類(lèi)實(shí)現(xiàn)監(jiān)聽(tīng)器接口【例7.6】讓頂級(jí)類(lèi)實(shí)現(xiàn)監(jiān)聽(tīng)器接口,進(jìn)行關(guān)閉窗口事件處理。/CloseDemo4.javaimport javax.swing.*;import java.awt.event.*;public class CloseDemo4 extends WindowAdapter/*定義頂級(jí)類(lèi)時(shí),另其繼承于窗口適配器*/public static void main(String args)JFrame jframe=new JFrame(關(guān)閉窗口例);jframe.setSize(400,100);jframe.setVisi
27、ble(true);jframe.addWindowListener(new CloseDemo4();/窗口關(guān)閉事件處理程序public void windowClosing(WindowEvent e)System.exit(0);277.3.3 JLabel組件與鼠標(biāo)事件處理1.鼠標(biāo)事件用于處理鼠標(biāo)事件監(jiān)聽(tīng)器接口有MouseListener和MouseMotionListener接口。任何派生于java.awt.Component的GUI組件都可以捕獲鼠標(biāo)事件。表7.9總結(jié)了MouseListener和MouseMotionListener接口的方法。2.JLabelGUI使用標(biāo)簽輸出文
28、本提示或信息。標(biāo)簽由JLabel類(lèi)定義。JLabel是最簡(jiǎn)單的JComponent。標(biāo)簽顯示單行只讀文本、影像或者兩者兼有,根據(jù)提供給構(gòu)造函數(shù)的參數(shù),其內(nèi)容可以是左、右或中間對(duì)齊的。默認(rèn)情況是左對(duì)齊。JLabel的主要構(gòu)造方法如下:nJlabel():創(chuàng)建一個(gè)無(wú)文本也無(wú)影像的標(biāo)簽;nJLabel(String text);創(chuàng)建一個(gè)帶有指定文本的標(biāo)簽實(shí)例;nJLabel(Icon image):創(chuàng)建一個(gè)帶有指定影像的標(biāo)簽實(shí)例。28JLabel組件與鼠標(biāo)事件處理【例7.7】設(shè)計(jì)一個(gè)GUI程序,要求該程序可進(jìn)行鼠標(biāo)事件處理,當(dāng)發(fā)生鼠標(biāo)按下、拖動(dòng)、移動(dòng)、進(jìn)入窗口、離開(kāi)窗口等操作時(shí),用標(biāo)簽指明鼠標(biāo)所處的
29、坐標(biāo)值。297.3.4 按鈕、文本字段與動(dòng)作事件1.動(dòng)作事件n動(dòng)作事件ActionEvent只包含一個(gè)事件:ACTION_PERFORMED,需完成重寫(xiě)actionPerformed()方法,能夠觸發(fā)該事件的動(dòng)作包含:n(1)點(diǎn)擊按鈕(JButton);n(2)在文本框(JTextField)中輸入回車(chē);n(3)雙擊列表(JList)中的選項(xiàng);n(4)選擇菜單項(xiàng)(JMenuItem)等。n動(dòng)作事件屬于AWT事件,接口為ActionListener,對(duì)應(yīng)的動(dòng)作事件處理方法是:npublic void actionPerformed(ActionEvent e)n在這個(gè)事件處理方法中,使用e.ge
30、tActionCommand可以獲得事件源的命令名。2.JButton與ActionEventnJButton類(lèi)用于創(chuàng)建命令按鈕,按鈕表面所顯示的文本稱(chēng)為按鈕標(biāo)簽,在GUI中使用多個(gè)JButton時(shí),應(yīng)確保為每個(gè)按鈕提供唯一的標(biāo)簽。n單擊按鈕會(huì)引發(fā)事件:ActionEvent,開(kāi)發(fā)人員提供的事件處理程序應(yīng)能夠在單擊按鈕時(shí)采取適當(dāng)?shù)奶幚韯?dòng)作。nJButoon常用構(gòu)造方法有:nJButton():創(chuàng)建一個(gè)無(wú)標(biāo)簽的按鈕;nJButton(String text):創(chuàng)建一個(gè)標(biāo)簽為text的按鈕;nJButton(Icon icon):創(chuàng)建一個(gè)圖標(biāo)為icon的按鈕。30按鈕、文本字段與動(dòng)作事件【例7.8
31、】設(shè)計(jì)一個(gè)簡(jiǎn)易加法器的GUI程序,通過(guò)點(diǎn)擊數(shù)字按鈕得到兩個(gè)加數(shù),進(jìn)行求和運(yùn)算。313.文本框JTextField與ActionEventJTextField是屏幕上的一個(gè)區(qū)域,可用于輸入文本行信息。JTextField包括兩個(gè)子類(lèi):nJTextArea(可以輸入若干文本行)nJPasswordField(不回顯輸入的內(nèi)容)(擴(kuò)展JTextField類(lèi))。JTextField和JPasswordField都是單行區(qū)域,用戶(hù)可以通過(guò)鍵盤(pán)在該區(qū)域中輸入文本,或者程序在區(qū)域中顯示文本。JTextField的主要構(gòu)造方法有:nJTextField():創(chuàng)建一個(gè)空文本的文本框;nJTextField(St
32、ring text):創(chuàng)建一個(gè)初始文本為text的文本框;nJTextField(String text,int columns):創(chuàng)建一個(gè)初始文本為text的文本框,并指定初始字段長(zhǎng)度為columns。32文本框JTextField與ActionEventJTextField的主要方法有:nvoid setFont(Font f):設(shè)置字體;nString getText():獲取文本框中的文本;nvoid setText():設(shè)置文本;nvoid setEditable(boolean b):設(shè)置文本框是否可編輯;nvoid setHorizontalAlignment(int align
33、ment):設(shè)置文本對(duì)齊方式??捎玫膶?duì)齊方式有左對(duì)齊JTextField.LEFT,中間對(duì)齊JTextField.CENTER和右對(duì)齊JTextField.RIGHT。JPasswordField的構(gòu)造方法基本與JTextField一致,它的主要方法有:nchar getPassword():獲取密碼框的密碼;nvoid getEchoChar():獲得回顯示字符;nvoid setEchoChar(char c):設(shè)置回顯字符為c。33文本框JTextField與ActionEvent【例7.9】程序JTextFieldDemo.java使用JTextField和JPasswordField
34、類(lèi)來(lái)創(chuàng)建和操作2個(gè)文本字段。接收用戶(hù)輸入時(shí),當(dāng)按下回車(chē)鍵時(shí)將會(huì)產(chǎn)生一個(gè)ActionEvent。在事件處理程序中判斷用戶(hù)輸入的用戶(hù)名與密碼名是否正確,會(huì)彈出相應(yīng)消息對(duì)話(huà)框進(jìn)行回應(yīng)。347.3.5單、復(fù)選按鈕,組合框與項(xiàng)目事件1項(xiàng)目事件(ItemEvent)ItemEvent類(lèi)包含一個(gè)事件:ITEM_STATE_CHANGED引發(fā)項(xiàng)目事件的動(dòng)作包括:(1)改變單選按鈕JRadioButton對(duì)象的選中或不選中狀態(tài);(2)改變復(fù)選按鈕JCheckBox對(duì)象的選中或不選中狀態(tài);(3)改變組合框(也稱(chēng)下拉列表框)JComboBox對(duì)象中某選項(xiàng)的選中或不選中狀態(tài)。項(xiàng)目事件屬于AWT事件,接口為ItemLi
35、stener,接口中只有一個(gè)事件處理方法:public void itemStateChanged(ItemEvent e)ItemEvent類(lèi)有以下主要方法:nObject getItem():返回事件發(fā)生處的項(xiàng)目;nItemSelectable getItemSelectable():返回產(chǎn)生該事件的 ItemSelectable 對(duì)象;nint getStateChange():返回生成事件的狀態(tài)改變類(lèi)型,如果選中,返回的值為ItemEvent.SELECTED,否則,返回值為ItemEvent.DESELECTED。352單選按鈕(JRadioButton)與復(fù)選框(JCheckBox
36、)Swing GUI組件包含3種類(lèi)型的狀態(tài)按鈕:nJToggleButton(父類(lèi))nJcheckBox(復(fù)選)nJRadioButton(單選)每次對(duì)單選按鈕或復(fù)選框進(jìn)行選擇時(shí)都會(huì)產(chǎn)生ActionEvent和ItemEvent兩個(gè)事件。JRadioButton的主要構(gòu)造方法如下:nJRadioButton():建立一個(gè)新的JRadioButton;nJRadioButton(String text,boolean selected):建立一個(gè)有文字的JRadioButton,且設(shè)置初始狀態(tài)(是否選中);nJRadioButton(String text,Icon icon):建立一個(gè)有文字且
37、有圖像的JRadioButton。362單選按鈕(JRadioButton)與復(fù)選框(JCheckBox)單選按鈕通常是成組出現(xiàn)的,一次只能選中該組中的一個(gè)單選按鈕,必須使用ButtonGroup類(lèi)(位于javax.swing包)的一個(gè)對(duì)象維護(hù)單選按鈕間的邏輯關(guān)系,該對(duì)象本身并不是GUI組件,它只負(fù)責(zé)組織一組按鈕,并不顯示在用戶(hù)界面中。建立組的方法如下:ButtonGroup group=new ButtonGroup;/建立組Group.add(radiobutton);/將單選鈕添加到組中【例7.10】設(shè)計(jì)一個(gè)GUI程序,進(jìn)行字體設(shè)置,要求使用一組單選按鈕,允許一次只能選擇一種字體風(fēng)格。3
38、7單選按鈕(JRadioButton)與復(fù)選框(JCheckBox)JCheckBox是一種復(fù)選框屏幕對(duì)象,可以選擇多項(xiàng)。JCheckBox采用布爾值表示用戶(hù)所做的選擇:按鍵或未按鍵、開(kāi)或關(guān)等。JCheckBox的常用構(gòu)造方法如下:nJCheckBox():建立一個(gè)新的JCheckBox;nJCheckBox(String text):建立一個(gè)有文字的JCheckBox;nJCheckBox(String text,boolean selected):建立一個(gè)有文字的JCheckBox,且設(shè)置其初始狀態(tài)(是否選中)?!纠?.11】利用JCheckBox對(duì)象來(lái)改寫(xiě)例7.10。383組合框(JCo
39、mboBox)組合框(或稱(chēng)下拉列表)提供一列選項(xiàng),用戶(hù)可以在這列選項(xiàng)中進(jìn)行單項(xiàng)選擇。組合框由JComboBox來(lái)實(shí)現(xiàn),可產(chǎn)生ItemEvent事件。在使用JcomboBox組件編程時(shí),如果列表項(xiàng)的數(shù)目大于可顯示的行數(shù)時(shí),組合框會(huì)自動(dòng)提供一個(gè)滾動(dòng)條。組合框的常用構(gòu)造方法:nJComboBox():創(chuàng)建一個(gè)無(wú)選項(xiàng)的組合框組件;nJComboBox(Object items):利用數(shù)組對(duì)象建立一個(gè)JComboBox組件;nJComboBox(Vector items):利用向量對(duì)象建立一個(gè)JComboBox組件。組合框的常用方法有:nvoid addItem(Object object):通過(guò)字符串
40、類(lèi)或其他類(lèi)加入選項(xiàng);nint getItemCount():獲取條目的總數(shù);nint getSelectedIndex():獲得所選項(xiàng)的索引值(索引值從0開(kāi)始)39組合框(JComboBox)【例7.12】應(yīng)用程序JComboBoxDemo.java用一個(gè)JComboBox來(lái)提供4個(gè)圖像文件名。在選中一個(gè)圖像文件名時(shí),則相應(yīng)的圖像將顯示在JLabel的Icon中。屏幕效果如圖7.12所示。407.3.6 列表(JList)與ListSelectionEvent事件1.列表(JList)可以讓用戶(hù)選擇一到多個(gè)選項(xiàng).JList所提供的構(gòu)造函數(shù)如下所示:nJList():建立一個(gè)新的JList組件。
41、nJList(ListModel dataModel):利用ListModel建立一個(gè)新的JList組件.nJList(Object listData):利用數(shù)組對(duì)象建立一個(gè)新的JList組件。nJList(Vector listData):利用向量對(duì)象建立一個(gè)新的JList組件。常用方法如下:nvoid setSelectionMode(int selectionMode):設(shè)置選擇模式。n單一選擇ListSelectionModel.SINGLE_SELECTIONn連續(xù)區(qū)間選擇ListSelectionModel.SINGLE_INTERVAL_SELECTIONn與多重選擇ListSe
42、lectionModel.MULTIPLE_INTERVAL_SELECTION(默認(rèn))nvoid setSelectedIndex(int index):通過(guò)索引值選擇某選項(xiàng)。nvoid setVisibleRowCount(int n):設(shè)置可見(jiàn)行數(shù)。nint getSelectedIndex():?jiǎn)芜x時(shí),獲得被選項(xiàng)索引。41列表(JList)與ListSelectionEvent事件JList的事件一般可分為兩種:n一種是在JList的項(xiàng)目上雙擊鼠標(biāo),產(chǎn)生ActionEvent事件。n另一種是取得用戶(hù)選取的項(xiàng)目,產(chǎn)生列表選擇事件(ListSelectionEvent)處理,該事件可以檢測(cè)
43、用戶(hù)是否對(duì)JList的選取有任何的改變,該事件的接口是ListSelectionListener。這個(gè)接口中只有一個(gè)方法:public void valueChanged(ListSelectionEvent e)42列表(JList)與ListSelectionEvent事件2.JList與ListSelectionEvent事件【例7.13】應(yīng)用程序JListDemo.java創(chuàng)建一個(gè)JList列表,該列表包含13種顏色的名稱(chēng)。在單擊列表中的顏色名稱(chēng)時(shí),將產(chǎn)生一個(gè)ListSelectionEvent(此類(lèi)在javax.swing.event包中)事件,并且該程序?qū)?yīng)用程序窗口的背景色改為所
44、選中的顏色。437.3.7 進(jìn)度條與時(shí)間組件1.進(jìn)度條進(jìn)度條提供直觀(guān)的圖形化的進(jìn)度描述,由JProgressBar生成。JProgressBar的主要構(gòu)造方法有:nJProgressBar():創(chuàng)建一個(gè)水平進(jìn)度條,顯示邊界,但沒(méi)有進(jìn)度字符串。nJProgressBar(int orient):創(chuàng)建一個(gè)指定方向的進(jìn)度條,方向包括垂直JProgressBar.VERTICAL和水平JProgressBar.HORIZONTAL。nJProgressBar(int min,int max):創(chuàng)建一個(gè)指定最小值和最大值的水平進(jìn)度條。nJProgressBar(int orient,int min,in
45、t max):創(chuàng)建一個(gè)具有指定的方向、最小值和最大值的進(jìn)度條。44進(jìn)度條與時(shí)間組件2.時(shí)間組件時(shí)間組件可以使用程序在一段時(shí)間內(nèi)依次執(zhí)行指定的操作,由Timer類(lèi)生成時(shí)間組件可以周期地觸發(fā)ActionEvent事件。Timer的構(gòu)造方法有:nTimer(int delay,ActionListener listener):建立一個(gè)Timer組件,并在每一次delay的時(shí)間點(diǎn)上觸發(fā)ActionEvent事件。Timer的主要方法有:nvoid addActionListener(ActionListener listener):注冊(cè)動(dòng)作事件。nvoid start():激活Timer組件。nvoi
46、d stop():停止Timer組件。nvoid restart():重新激活Timer組件。nvoid setDelay(int delay):設(shè)置間隔時(shí)間。nvoid setRepeats(boolean flag):設(shè)置是否只觸發(fā)一次ActionEvent事件。453.進(jìn)度條與時(shí)間組件的應(yīng)用【例7.14】啟動(dòng)界面程序設(shè)計(jì)。屏幕效果如圖7.14所示。467.3.8 菜單與工具欄1.菜單構(gòu)造菜單步驟:n通過(guò)JMenuBar建立一個(gè)菜單欄,它是菜單容器,n使用JMenu菜單組件建立菜單,n每個(gè)菜單再通過(guò)JMenuItem建立菜單項(xiàng)。(1)菜單欄菜單欄位于容器的層次面板上,它本身是可選的,創(chuàng)建菜
47、單欄使用JmenuBar類(lèi).JMenuBar的構(gòu)造方法有JMenuBar():建立一個(gè)新的JMenuBar。使用容器的setJMenuBar()方法將新生成的菜單欄添加到容器中47菜單與工具欄(2)菜單菜單組件用來(lái)存放和整合菜單項(xiàng)組件。菜單組件可以是單一層次的結(jié)構(gòu),也可以是一個(gè)層次式的結(jié)構(gòu)。生成菜單組件使用JMenu類(lèi),JMenu的構(gòu)造方法有:nJMenu():建立一個(gè)新的菜單組件。nJMenu(Action a):建立一個(gè)支持Action的菜單組件。nJMenu(String s):以指定的字符串建立一個(gè)名為s的菜單組件。nJMenu(String s,boolean b):以指定的字符串名
48、稱(chēng)建立一個(gè)菜單組件,并指定這個(gè)菜單是否具有下拉的屬性。48菜單與工具欄(3)菜單項(xiàng)生成菜單項(xiàng)使用JMenuItem類(lèi),JMenuItem繼承AbstractButton類(lèi),因此可以說(shuō)JMenuItem是一種特殊的Button,當(dāng)在菜單中選擇某一項(xiàng)JMenuItem時(shí)就如同按下按鈕的操作一樣觸發(fā)ActionEvent事件。JMenuItem的主要構(gòu)造方法有:nJMenuItem():建立一個(gè)菜單項(xiàng)。nJMenuItem(Icon icon):建立一個(gè)有圖標(biāo)的菜單項(xiàng)。nJMenuItem(String text):建立一個(gè)有文字的菜單項(xiàng)。nJMenuItem(String text,int mne
49、monic):建立一個(gè)有文字和熱鍵的菜單項(xiàng)。JMenuItem的主要方法:nsetMNemonic(char mnemonic):設(shè)置熱鍵。nsetAccelerator(KeyStroke keyStroke):設(shè)置快捷鍵。49菜單與工具欄(4)單、復(fù)選菜單項(xiàng)菜單項(xiàng)的建立還可使用JRadioButtonMenuItem或JCheckBoxMenuItem類(lèi)生成單、復(fù)選菜單項(xiàng),單、復(fù)選菜單項(xiàng)可認(rèn)為是單、復(fù)選按鈕和菜單項(xiàng)的綜合。JCheckBoxMenuItem的構(gòu)造方法主要有:nJCheckBoxMenuItem():建立一個(gè)復(fù)選菜單項(xiàng)。nJCheckBoxMenuItem(String te
50、xt):建立一個(gè)有文字的復(fù)選菜單項(xiàng)。nJCheckBoxMenuItem(String text,boolean b):建立一個(gè)有文字和設(shè)置選擇狀態(tài)的復(fù)選菜單項(xiàng)。nJRadioButtonMenuItem的構(gòu)造方法主要有:nJRadioButtonMenuItem():建立一個(gè)單選菜單項(xiàng)。nJRadioButtonMenuItem(String text):建立一個(gè)有文字的單選菜單項(xiàng)。nJRadioButtonMenuItem(String text,boolean b):建立一個(gè)有文字和設(shè)置選擇狀態(tài)的單選菜單項(xiàng)。50菜單與工具欄2.工具欄構(gòu)造菜單步驟:n首先利用JToolBar創(chuàng)建一個(gè)工具欄
51、對(duì)象n使用該對(duì)象的add方法將帶圖標(biāo)的按鈕加到工具欄中。JToolBar的構(gòu)造方法有:nJToolBar():建立一個(gè)工具欄對(duì)象,位置為默認(rèn)的水平方向。nJToolBar(int orientation):建立一個(gè)指定位置的工具欄。nJToolBar(String name):建立一個(gè)指定名稱(chēng)的工具欄。nJToolBar(String name,int orientation):建立一個(gè)指定名稱(chēng)和位置的工具欄。JToolBar的主要方法有:nvoid setFloatable(boolean b):設(shè)置工具欄是否可以浮動(dòng)。nvoid setRollover(boolean b):設(shè)置工具欄是否
52、可以轉(zhuǎn)滾。nvoid setOrientation(int orientation):設(shè)置工具欄方向。nvoid addSeparator():添加分隔條。nvoid setToolTipText():為按鈕設(shè)置提示文字。51菜單與工具欄【例7.15】菜單與工具欄的使用示例。程序執(zhí)行后,屏幕效果如圖7.15所示。527.3.9 表格組件JTable與樹(shù)JTree1.表格表格是一種常用的數(shù)據(jù)輸入和顯示的組件,常和數(shù)據(jù)庫(kù)相關(guān)聯(lián)。用JTable類(lèi)來(lái)建立表格,JTable主要控制數(shù)據(jù)的顯示方式。JTable的部分構(gòu)造方法:nJTable():建立一個(gè)新的JTable,并使用系統(tǒng)默認(rèn)的模型。nJTabl
53、e(Object rowData,String columnNames):建立一個(gè)顯示二維數(shù)組數(shù)據(jù)的表格,并且可以顯示列的名稱(chēng)。nJTable(TableModel dm):建立一個(gè)表格,有默認(rèn)的字段模型和選擇模型,并設(shè)置數(shù)據(jù)模型。53表格組件JTable與樹(shù)JTree2.樹(shù)(JTree)樹(shù)提供了用樹(shù)型結(jié)構(gòu)分層顯示數(shù)據(jù)的視圖。數(shù)據(jù)中最基本的對(duì)象叫結(jié)點(diǎn),它表示在給定層次結(jié)構(gòu)中的數(shù)據(jù)項(xiàng)。樹(shù)中只有一個(gè)根結(jié)點(diǎn),所有的結(jié)點(diǎn)從這里引出。樹(shù)的建立使用JTree類(lèi)。JTree的構(gòu)造方法:nJTree():建立一棵系統(tǒng)默認(rèn)的樹(shù)。nJTree(Hashtable value):利用哈希表建立樹(shù),不顯示根結(jié)點(diǎn)。nJ
54、Tree(Object value):利用對(duì)象數(shù)組建立樹(shù),不顯示根結(jié)點(diǎn)。nJTree(TreeModel newModel):利用數(shù)據(jù)模型建立樹(shù)。nJTree(TreeNode root):利用樹(shù)結(jié)點(diǎn)建立樹(shù)。nJTree(TreeNode root,boolean asksAllowsChildren):利用樹(shù)結(jié)點(diǎn)建立樹(shù),并決定是否允許子結(jié)點(diǎn)的存在。nJTree(Vector value):利用向量建立樹(shù),不顯示根結(jié)點(diǎn)。54表格組件JTable與樹(shù)JTree【例7.16】樹(shù)和表格的使用示例。此例中利用分割面板,使用了水平分割的方法,將窗口分割為左右兩部分,左窗格添加樹(shù),右空格添加表格。當(dāng)點(diǎn)擊左
55、側(cè)窗格中的某班級(jí)節(jié)點(diǎn)時(shí),在右側(cè)將顯示此班級(jí)的學(xué)生信息表格。屏幕效果如圖所示。557.3.10 桌面面板JDesktopPane與內(nèi)部窗口JInternalFrame1.桌面面板JDesktopPaneJDesktopPane是一種特殊的層面板。分層面板(JLayeredPane)的子類(lèi),用來(lái)建立虛擬桌面??娠@示并管理眾多內(nèi)容窗口。JDesktopPane的構(gòu)造方法有:nJDesktopPane():建立JDesktopPane組件。JDesktopPane的常用方法有:nJInternalFrame getAllFrames():返回桌面上顯示的所有子窗體。nJInternalFrame ge
56、tAllFramesInLayer(int layer):返回顯示在桌面指定層內(nèi)的所有子窗體。nDesktopManager getDesktopManager():返回桌面管理器。nInt getDragMode():返回拖曳模式。nJInternalFrame getselectedFrame():返回當(dāng)前激活子窗體。nvoid setDragMode(int dragMode):設(shè)置拖曳模式。nvoid setSelectedFrame(JInternalFrame f):設(shè)置激活子窗體。567.3.10 桌面面板JDesktopPane與內(nèi)部窗口JInternalFrame2.內(nèi)部窗口
57、JInternalFrame內(nèi)部窗口JInternalFrame也稱(chēng)子窗口,它的使用跟JFrame幾乎一樣,可以最大化、最小化、關(guān)閉窗口、加入菜單等功能;唯一不同的是JInternalFrame是輕量級(jí)組件,也就是說(shuō)JInternalFrame不能單獨(dú)出現(xiàn),必須依附在最上層組件上。由于這個(gè)特色,JInternalFrame能夠利用Java提供的Look&Feel功能作出完全不同于原有操作系統(tǒng)所提供的窗口外型,也比JFrame更具有彈性。JInternalFrame的構(gòu)造方法有:nJInternalFrame():創(chuàng)建一個(gè)子窗口,但不能更改大小、不可關(guān)閉、不可最大最小化、也沒(méi)有標(biāo)題。nJInte
58、rnalFrame(String tilte):創(chuàng)建一個(gè)指定標(biāo)題的子窗口,但不能更改大小、不可關(guān)閉、不可最大最小化。577.3.10 桌面面板JDesktopPane與內(nèi)部窗口JInternalFrame3.父子窗體設(shè)計(jì)【例7.17】多文檔界面設(shè)計(jì)。本例中主要演示了多文檔窗口的建立方法。屏幕效果如圖所示。587.4 布局管理器布局管理器用于確定組件在窗口中的位置和實(shí)際的大小,組織和管理一個(gè)容器里的元素,它要執(zhí)行的任務(wù)有:(1)決定容器的全面尺寸;(2)決定容器里每個(gè)元素的大?。?3)決定元素之間的間隔;(4)決定元素的位置。每個(gè)容器同一時(shí)刻只能有一個(gè)布局管理器,同一程序的不同窗口可以有不同的布
59、局管理器。雖然自己可以管理布局,但是并不容易做好。對(duì)大多數(shù)應(yīng)用程序來(lái)說(shuō),最好是通過(guò)使用AWT或Swing內(nèi)置的布局來(lái)避免這項(xiàng)工作。表7.10給出了一些AWT與Swing的布局管理器。59關(guān)于布局管理器在程序中安排組件的位置和大小時(shí),應(yīng)注意:n如果用戶(hù)確實(shí)需要自己設(shè)置組件的大小和位置,則應(yīng)取消該容器的布局管理器 setLayout(null)n用戶(hù)必須使用setLocation(),setSize(),setBounds()等方法為組件設(shè)置大小和位置。n容器中布局管理器負(fù)責(zé)各組件的大小和位置,用戶(hù)無(wú)法設(shè)置組件的這些屬性,如試圖調(diào)用setLocation(),setSize(),setBounds
60、()等。60布局管理器在容器中所有組件的布局都由布局管理器來(lái)控制,每個(gè)容器,如JPanel、JWindows或JFrame都有各自缺省的布局管理器(表7。11),程序員也可以在程序中指定一個(gè)新的布局管理器。Java.awt包中有五種布局管理器:nFlowLayout:JPanel的缺省布局管理器nBorderLayout:JWindow、JDialog、JFrame和JApplet的缺省布局管理器nGridLayoutnCardLayoutnGridBagLayout(難度大)617.4.1 FlowLayout流式布局管理器FlowLayout是把組件從左向右、從上向下,一個(gè)接一個(gè)的放到容器
61、中。FlowLayout類(lèi)有三種構(gòu)造方法:npublic FlowLayout()使用缺省居中對(duì)齊方式,組件間的水平和豎直間距為缺省值5個(gè)象素。npublic FlowLayout(int alignment)使用指定的對(duì)齊方式(FlowLayout.LEFT,F(xiàn)lowLayout.RIGHT,F(xiàn)lowLayout.Center),水平和豎直間距為缺省值5象素。npublic FlowLayout(int alignment,int horizontalGap,int verticalGap)使用指定的對(duì)齊方式,水平和豎直間距也為指定值。使用FlowLayout,組件的位置會(huì)隨著窗口大小的變化
62、而自動(dòng)調(diào)整。62FlowLayout流式布局管理器【例7.18】應(yīng)用程序FlowLayoutDemo.java中創(chuàng)建了3個(gè)JButton對(duì)象,分別為“Left”、“Center”、“Right”按鈕,并使用一個(gè)FlowLayout布局管理器將這些按鈕添加到應(yīng)用程序中,這三個(gè)按鈕的事件處理程序完成三種對(duì)齊方式的設(shè)置。默認(rèn)組件是居中對(duì)齊的。在用戶(hù)單擊某一按鈕時(shí),該布局管理器的對(duì)齊方式改為相應(yīng)對(duì)齊方式。637.4.2 BorderLayout邊界布局管理器BorderLayout是JWindow、JFrame、JDialog、JApplet的缺省布局管理器,它是將容器分成五個(gè)區(qū)域來(lái)安排組件:Nort
63、h、South、East、West、Center。1.構(gòu)造函數(shù)BorderLayout()建立一個(gè)BorderLayout的對(duì)象,組件之間的缺省間隔(水平和垂直)為零。BorderLayout(int hgap,int vgap)建立一個(gè)BorderLayout的對(duì)象,組件之間的水平間隔為hgap,垂直間隔為vgap。2.常用方法n見(jiàn)API。64BorderLayout邊界布局管理器將組件添加到邊界布局的容器中JFrame f=new JFrame(“BorderLayout的用法”);Container content=f.getContentPane();content.setLayout
64、(new BorderLayout(5,10);JButton b1=new JButton(“North);JButton b2=new JButton(“South);JButton b3=new JButton(“East);JButton b4=new JButton(“West);JButton b5=new JButton(“Center);content.add(b1,“North”);content.add(b2,“South”);content.add(b3,“East”);content.add(b4,“West”,);content.add(b5,“Center”);65
65、BorderLayout邊界布局管理器【例7.19】BorderLayout布局管理器示例。667.4.3 GridLayout網(wǎng)格布局管理器GridLayout布局方式可以使容器中的各組件呈網(wǎng)格狀分布。容器中各組件的高度和寬度相同,當(dāng)容器的尺寸發(fā)生變化時(shí),各組件的相對(duì)位置不變,但各自的尺寸會(huì)發(fā)生變化。各組件的排列方式為:從上到下,從左到右。與BorderLayout類(lèi)相類(lèi)似,如果想在一個(gè)網(wǎng)格單元中添加多個(gè)組件,則必須先在該網(wǎng)格單元放一個(gè)容器,再將多個(gè)組件放在該容器中。67GridLayout網(wǎng)格布局管理器1.構(gòu)造函數(shù)nGridLayout():建立一個(gè)GridLayout的對(duì)象,在一行中排列
66、組件,組件之間的缺省間隔為零。nGridLayout(int rows,int cols):建立一個(gè)GridLayout的對(duì)象,將容器分成rows行,cols列,組件之間的水平間隔和垂直間隔均為零。nGridLayout(int rows,int cols,int hgap,int vgap):建立一個(gè)GridLayout的對(duì)象,將容器分成rows行,cols列,組件之間的水平間隔為hgap,垂直間隔為vgap。【例7.20】GridLayout布局管理器示例。687.4.4 CardLayout卡片布局管理器CardLayout是將容器中的所有組件如同撲克牌般的堆疊在一起。CardLayout可以象換牌一樣處理這些共享空間的組件:為每張牌定義一個(gè)名字,可按名字選牌;可以按順序向前或向后翻牌;也可以直接選第一張或最后一張牌。69CardLayout卡片布局管理器1.構(gòu)造函數(shù)nCardLayout():建立一個(gè)CardLayout的對(duì)象,組件之間的缺省間隔為零。1.CardLayout(int hgap,int vgap):建立一個(gè)CardLayout的對(duì)象,組件之間的水平間隔為hgap
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《比的意義》教學(xué)課件
- (精品)我們?cè)谛袆?dòng) (2)
- 孤立奇點(diǎn)留數(shù)習(xí)題課
- 七年級(jí)語(yǔ)文下冊(cè)(人教版)13-葉圣陶先生二三事(作業(yè))課件
- 《童年》教學(xué)課件
- 61源遠(yuǎn)流長(zhǎng)的中華文化
- 浙江中醫(yī)雜志投稿須知
- 底盤(pán)與主動(dòng)安全性系統(tǒng)
- 中國(guó)臨床解剖學(xué)雜志簡(jiǎn)介及來(lái)稿須知
- 5《爺爺和小樹(shù)》
- (蘇教版)四年級(jí)語(yǔ)文上冊(cè)課件+桂花雨+1
- 氣管插管病人的醫(yī)療護(hù)理
- 小學(xué)道德講堂“六個(gè)一”模板
- 第29課《詩(shī)詞五首-長(zhǎng)相思》PPT課件
- 湘科版四年級(jí)科學(xué)上冊(cè)全冊(cè)ppt課件