Swing程序設(shè)計(jì)--精選文檔_第1頁(yè)
Swing程序設(shè)計(jì)--精選文檔_第2頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第 1 3 章圖形化用戶(hù)界面(GUI)Swing 較早期版本中的AWT更為強(qiáng)大、性能更優(yōu)良,Swing 中除了保留AWT中幾個(gè)重要的重量級(jí)組件之外,其他組件都為輕量級(jí),這樣使用Swing 開(kāi)發(fā)出的窗體風(fēng)格會(huì)與當(dāng)前運(yùn)行平臺(tái)上的窗體風(fēng)格一致,同時(shí)程序員也可以在跨平臺(tái)時(shí)指定窗體統(tǒng)一的風(fēng)格與外觀。Swing 的使用很復(fù)雜,本章主要講解Swing 中的基本要素,包括容器、組件、窗體布局、事件和監(jiān)聽(tīng)器。通過(guò)閱讀本章,您可以:l 了解Swing 組件l 掌握使用常用窗體l 掌握在標(biāo)簽上設(shè)置圖標(biāo)l 掌握應(yīng)用程序中的布局管理器l 掌握常用面板l 掌握按鈕組件l 掌握列表組件l 掌握文本組件l 學(xué)會(huì)常用事件監(jiān)聽(tīng)器

2、一、圖形化用戶(hù)界面介紹l Swing 概述原來(lái)的AWT 組件來(lái)自java.awt 包,當(dāng)含有AWT 組件的Java應(yīng)用程序在不同的平臺(tái)上執(zhí)行時(shí),每個(gè)平臺(tái)的GUI組件的顯示會(huì)有所不同,但是在不同平臺(tái)上運(yùn)行使用Swing 開(kāi)發(fā)的應(yīng)用程序時(shí),就可以統(tǒng)一GUI 組件的顯示風(fēng)格,因?yàn)镾wing 組件允許編程人員在跨平臺(tái)時(shí)指定統(tǒng)一的外觀和風(fēng)格。Swing 組件通常被稱(chēng)為“輕量級(jí)組件”,因?yàn)樗耆蒍ava語(yǔ)言編寫(xiě),而Java是不依賴(lài)于操作系統(tǒng)的語(yǔ)言,它可以在任何平臺(tái)上運(yùn)行;相反,依賴(lài)于本地平臺(tái)的組件相應(yīng)地被稱(chēng)為“重量級(jí)組件”,如AWT組件就是依賴(lài)本地平臺(tái)的窗口系統(tǒng)來(lái)決定組件的功能、外觀和風(fēng)格。Swing主

3、要具有以下特點(diǎn):輕量級(jí)組件可插入外觀組件l 組件(Component)定義:以圖形化的方式顯示在屏幕上的,和用戶(hù)進(jìn)行交互的對(duì)象,就叫組件;組件包括:菜單、標(biāo)簽、文本框、密碼框、滾動(dòng)條、單選按鈕、復(fù)選框、按鈕等等;l 容器(Container)組件不能獨(dú)立的顯示出來(lái),只能將組件放在容器里,才能正常的顯示。布局的定義:將組件合理有序的排列和分布在容器中(包括組件的位置、大小);l 布局管理器(layout manager)負(fù)責(zé)確定組件在容器中的位置和大小。調(diào)用容器的setLayout(布局管理器對(duì)象) 方法,為容器指定某種布局管理器的一個(gè)對(duì)象。當(dāng)容器需要定位組件和確定組件大小時(shí),就會(huì)給布局管理器對(duì)

4、象發(fā)消息,讓它完成該項(xiàng)工作。awt 中常見(jiàn)的布局管理器有:BorderLoyout (邊界布局管理器)簡(jiǎn)介:分為北、南、東、西、中;FlowLayout(流式布局管理器)簡(jiǎn)介:組件在一行中從左至右水平排列,排滿后折行;GridLayout(網(wǎng)格布局管理器)簡(jiǎn)介:以行和列的網(wǎng)格形式安排組件;GridBagLayout 布局管理器簡(jiǎn)介:更復(fù)雜、功能更強(qiáng)的網(wǎng)格布局;CardLayout 布局管理器簡(jiǎn)介:每一個(gè)組件作為一個(gè)卡片,容器僅顯示多個(gè)卡片中的某一個(gè);二、JFrame 容 器(常用窗體)知識(shí)點(diǎn):1、如何創(chuàng)建窗體Swing組件的窗體通常與組件和容器相關(guān),所以在JFrame對(duì)象創(chuàng)建完成后,需要調(diào)用g

5、etContentPane()方法將窗體轉(zhuǎn)換為容器,然后在容器中添加組件或設(shè)置布局管理器。通常,這個(gè)容器用來(lái)包含和顯示組件。如果需要將組件添加至容器,可以使用來(lái)自Container類(lèi)的add()方法進(jìn)行設(shè)置,也可以使用remove()方法將組件從容器中刪除。2、窗體的關(guān)閉方式創(chuàng)建窗體后,需要給予窗體一個(gè)關(guān)閉方式,可以調(diào)用setDefaultCloseOperation()方法關(guān)閉窗體。Java為窗體關(guān)閉提供了多種方式,常用的有以下4種:l EXIT_ON_CLOSE表示退出應(yīng)用程序默認(rèn)窗口關(guān)閉;l DO_NOTHING_ON_CLOSE表示什么都不做就將窗體關(guān)閉;l DISPOSE_ON_CL

6、OSE表示任何注冊(cè)監(jiān)聽(tīng)程序?qū)ο蠛髸?huì)自動(dòng)隱藏并釋放窗體;l HIDE_ON_CLOSE表示隱藏窗口的默認(rèn)窗口關(guān)閉;3、JDialog窗體JDialog窗體是Swing組件中的對(duì)話框,它繼承了AWT組件中java.awt.Dialog類(lèi)。功能:從一個(gè)窗體中彈出另一個(gè)窗體,就像是在使用IE瀏覽器時(shí)彈出的確定對(duì)話框一樣。JDialog窗體實(shí)質(zhì)上就是另一種類(lèi)型的窗體,它與JFrame窗體類(lèi)似,在使用時(shí)也需要調(diào)用getContentPane()方法將窗體轉(zhuǎn)換為容器,然后在容器中設(shè)置窗體的特性。例子:import javax.swing.*;public class Testpublic static vo

7、id main(String args)/* 創(chuàng)建窗體*/JFrame jf=new JFrame();/創(chuàng)建窗體對(duì)象jf.setTitle(用戶(hù)界面);/設(shè)置窗體標(biāo)題jf.setSize(260,180);/設(shè)置窗體大小jf.setLocation(100, 270);/設(shè)置窗體位置jf.setResizable(false);/設(shè)置窗體是否可以調(diào)整大小jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/設(shè)置窗體關(guān)閉方式j(luò)f.setVisible(true);/設(shè)置窗體可見(jiàn)性沒(méi)有設(shè)置標(biāo)題、大小的窗體: 設(shè)置標(biāo)題、大小的窗體:擴(kuò)展:1、設(shè)置組件

8、的位置和大小的方法:setBounds (int x,int y,int width,int height) 方法相當(dāng)于:setLocation(int x,inty) 和setSize(int width,int height) 2、將軟件的位置Location設(shè)置為:水平居中,垂直居中Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();setLocation(screenSize.width-getWidth()/2,(screenSize.height-getHeight()/2);三、標(biāo)簽組件與圖標(biāo)l 概述在

9、Swing中顯示文本或提示信息的方法是使用標(biāo)簽,它支持文本字符串和圖標(biāo)。在應(yīng)用程序的用戶(hù)界面中,一個(gè)簡(jiǎn)短的文本標(biāo)簽可以使用戶(hù)知道這些組件的目的,所以標(biāo)簽在Swing中是比較常用的組件。在本節(jié)中將探討Swing標(biāo)簽的用法、如何創(chuàng)建標(biāo)簽,以及如何在標(biāo)簽上放置文本與圖標(biāo)。l 標(biāo)簽組件Jlabel標(biāo)簽由JLabel類(lèi)定義,標(biāo)簽可以顯示一行只讀文本、一個(gè)圖像或帶圖像的文本,它并不能產(chǎn)生任何類(lèi)型的事件,只是簡(jiǎn)單地顯示文本與圖片,但是可以使用標(biāo)簽的特性指定標(biāo)簽上文本的對(duì)齊方式。l 圖標(biāo)組件IconSwing中的圖標(biāo)可以放置在按鈕、標(biāo)簽等組件上,用于描述組件的用途或裝飾組件。圖標(biāo)可以用Java支持的圖片文件類(lèi)

10、型進(jìn)行創(chuàng)建,也可以使用java.awt.Graphics類(lèi)提供的功能方法來(lái)創(chuàng)建。l 創(chuàng)建圖標(biāo)在Swing中通過(guò)Icon接口來(lái)創(chuàng)建圖標(biāo),可以在創(chuàng)建時(shí)給定圖標(biāo)的大小、顏色等特性。如果使用Icon接口,必須實(shí)現(xiàn)Icon接口中的3個(gè)方法。l 例子import java.awt.*;import javax.swing.*;public class DrawIcon implements Iconprivate int width;private int height;public void paintIcon(Component c, Graphics g, int x, int y) g.fillO

11、val(x, y, width, height);public int getIconWidth() / TODO 自動(dòng)生成的方法存根return this.width;public int getIconHeight() / TODO 自動(dòng)生成的方法存根return this.height;public DrawIcon(int width,int height)this.width=width;this.height=height;public static void main(String args)DrawIcon icon=new DrawIcon(15, 15);JLabel jl

12、1=new JLabel(測(cè)試, icon, SwingConstants.CENTER);JFrame jf=new JFrame();Container c=jf.getContentPane();c.add(jl1);jf.setSize(200, 200);Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();jf.setLocation(screenSize.width-jf.getWidth()/2,(screenSize.height-jf.getHeight()/2);jf.setResizable(f

13、alse);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.setVisible(true);l 創(chuàng)建圖片圖標(biāo)Swing中的圖標(biāo)除了可以繪制之外,還可以使用某個(gè)特定的圖片創(chuàng)建。Swing利用javax.swing.ImageIcon類(lèi)根據(jù)現(xiàn)有圖片創(chuàng)建圖標(biāo),ImageIcon類(lèi)實(shí)現(xiàn)了Icon接口,同時(shí)Java支持多種圖片格式。l 例子import java.awt.*;import .URL;import javax.swing.*;public class Test extends JFramepublic Test() Contain

14、er c=getContentPane();JLabel jl=new JLabel(這是一個(gè)JFrame窗體,SwingConstants.CENTER);URL url=Test.class.getResource(imageButton.jpg);Icon icon=new ImageIcon(url);jl.setIcon(icon);/設(shè)置標(biāo)簽的圖標(biāo)jl.setHorizontalAlignment(SwingConstants.CENTER);/設(shè)置標(biāo)簽水平對(duì)齊方式j(luò)l.setOpaque(true);/設(shè)置標(biāo)簽為不透明狀態(tài)c.add(jl);setTitle(圖片圖標(biāo));setS

15、ize(250,150);Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();setLocation(screenSize.width-this.getWidth()/2,(screenSize.height-this.getHeight()/2);/設(shè)置組件的位置為:水平和垂直居中setResizable(false);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setVisible(true);public static void main(String args

16、)new Test();運(yùn)行結(jié)果:注意:java.lang.Class類(lèi)中的getResource()方法可以獲取資源文件的URL路徑。例子中該方法的參數(shù)是imageButton.jpg,這個(gè)路徑是相對(duì)于Test類(lèi)文件的,所以可將圖片文件與類(lèi)文件放在同一個(gè)文件夾下。四、常用布局管理器l 概述Swing提供的常用布局管理器包括邊界布局管理器、流式布局管理器、網(wǎng)格布局管理器。l 絕對(duì)布局顧名思義,就是硬性指定組件在容器中的位置和大小,可以使用絕對(duì)坐標(biāo)的方式指定組件的位置。使用絕對(duì)布局的步驟如下:(1)使用Container.setLayout(null)方法取消布局管理器;(2)使用Compone

17、nt.setBounds()方法設(shè)置每個(gè)組件的位置和大小;l 例子import java.awt.*;import javax.swing.*;public class Test extends JFrame/*聲明組件*/private JButton an1;public Test(String title) Container c=getContentPane();c.setLayout(null);/*創(chuàng)建組件*/an1=new JButton(確定);an1.setSize(80,40);/設(shè)置按鈕的大小,如果沒(méi)有此語(yǔ)句,按鈕將無(wú)法顯示,因?yàn)樗拇笮?;/*添加組件*/c.add(

18、an1);/*設(shè)置窗體屬性*/setTitle(title);setSize(200,150);Dimension screensize=Toolkit.getDefaultToolkit().getScreenSize();setLocation(screensize.width-this.getWidth()/2,(screensize.height-this.getHeight()/2);setResizable(false);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setVisible(true);public static voi

19、d main(String args)new Test(絕對(duì)布局);運(yùn)行結(jié)果如下:l 邊界布局管理器(BorderLayout)在默認(rèn)不指定窗體布局的情況下,Swing組件的布局模式是邊界布局管理器。邊界布局管理器還可以將容器劃分為東、西、南、北、中5個(gè)區(qū)域,可以將組件加入到這5個(gè)區(qū)域中。容器調(diào)用Container類(lèi)的add()方法添加組件時(shí)可以設(shè)置此組件在邊界布局管理器中的區(qū)域,區(qū)域的控制可以由BorderLayout類(lèi)中的成員變量來(lái)決定。l 格式Container c=this.getContentPane();c.setLayout(new BorderLayout();c.add(ne

20、w JButton(“確定”), BorderLayout.EAST);/將確定按鈕添加到容器的底部并填充c.add(new JButton(“取消”);/將取消按鈕添加到容器的中部并填充至個(gè)區(qū)域的邊界注意:如果不是五個(gè)按鈕全部添加,則會(huì)以擴(kuò)充中部為主進(jìn)行填充,但中部不會(huì)被其他四個(gè)填充。 l 流式布局管理器(FlowLayout)流式布局管理器是布局管理器中最基本的布局管理器。流式布局管理器在整個(gè)容器中的布局正如其名,像“流”一樣從左到右擺放組件,直到占據(jù)了這一行的所有空間,然后再向下移動(dòng)一行。默認(rèn)情況下,組件在每一行上都是居中排列的,但是通過(guò)設(shè)置也可以更改組件在每一行上的排列位置。l 格式C

21、ontainer c=this.getContentPane();c.setLayout(new FlowLayout(2,10,10);/設(shè)置容器的布局管理器為流式布局管理器,采用右對(duì)齊方式擺放各組件; l 網(wǎng)格布局管理器(GridLayout)網(wǎng)格布局管理器將容器劃分為網(wǎng)格,所以組件可以按行和列進(jìn)行排列。在網(wǎng)格布局管理器中,每一個(gè)組件的大小都相同,并且網(wǎng)格中空格的個(gè)數(shù)由網(wǎng)格的行數(shù)和列數(shù)決定,如一個(gè)兩行兩列的網(wǎng)格能產(chǎn)生4個(gè)大小相等的網(wǎng)格。組件從網(wǎng)格的左上角開(kāi)始,按照從左到右、從上到下的順序加入到網(wǎng)格中,而且每一個(gè)組件都會(huì)填滿整個(gè)網(wǎng)格,改變窗體的大小,組件的大小也會(huì)隨之改變。l 格式Conta

22、iner c=this.getContentPane();c.setLayout(new GridLayout(3,3,5,5);/ 設(shè)置容器的管理器為7行3列寬為5像素高為5像素的網(wǎng)格布局管理器; 拓展l 創(chuàng)建基本窗體的步驟:1、導(dǎo)入swt和swing包;2、繼承Jframe類(lèi);3、在類(lèi)中定義組件;4、在構(gòu)造方法中創(chuàng)建組件;5、在構(gòu)造方法中添加組件;6、設(shè)置窗體屬性;7、顯示窗體;8、在主函數(shù)中創(chuàng)建對(duì)象;9、所有布局管理器都可以添加任意組件;五、高級(jí)布局管理器Swing還提供了一些高級(jí)布局管理器,如箱式布局管理器、卡片布局管理器、網(wǎng)格組布局管理器以及彈簧布局管理器,通過(guò)使用這些布局管理器,可

23、以設(shè)計(jì)出更好、更適用的程序界面。在講解過(guò)程中為了便于讀者理解,結(jié)合了大量的圖例,還針對(duì)每個(gè)知識(shí)點(diǎn)進(jìn)行了舉例。箱式布局管理器BoxLayout箱式布局管理器用來(lái)管理一組水平或垂直排列的組件。如果是用來(lái)管理一組水平排列的組件,則稱(chēng)為水平箱;如果是用來(lái)管理一組垂直排列的組件,則稱(chēng)為垂直箱。BoxLayout類(lèi)僅提供了一個(gè)構(gòu)造方法BoxLayout(Container target,int axis),其入口參數(shù)target為要采用該布局方式的容器對(duì)象;入口參數(shù)axis為要采用的布局方式,如果將其設(shè)置為靜態(tài)常量X_AXIS,表示創(chuàng)建一個(gè)水平箱,組件將從左到右排列,設(shè)置為靜態(tài)常量Y_AXIS則表示創(chuàng)建一

24、個(gè)垂直箱,組件將從上到下排列。無(wú)論水平箱還是垂直箱,當(dāng)將窗體調(diào)小至不能顯示所有組件時(shí),組件仍會(huì)排列在一行或一列,組件按照添加到容器中的先后順序進(jìn)行排列。默認(rèn)情況下,由箱式布局管理器實(shí)現(xiàn)的組件之間沒(méi)有間距,如果要在組件之間設(shè)置間距,可以通過(guò)使用Box類(lèi)提供的6個(gè)不可見(jiàn)組件實(shí)現(xiàn),這些組件就是專(zhuān)門(mén)用來(lái)設(shè)置箱式布局管理器的。六、常用面板面板也是一個(gè)Swing容器,它可以作為容器容納其他組件,但它也必須被添加到其他容器中。Swing中常用的面板包括JPanel面板以及JScrollPane面板。JPanel面板默認(rèn)使用流式布局管理器,窗體默認(rèn)使用邊界布局管理器。l 例子import java.awt.*

25、;import javax.swing.*;public class Test extends JFrame/*定義組件*/private JPanel mb1,mb2;private JButton an1,an2,an3,an4,an5;public static void main(String args)new Test();/創(chuàng)建本類(lèi)對(duì)象public Test() Container c=this.getContentPane();/*創(chuàng)建組件*/mb1=new JPanel();mb2=new JPanel();an1=new JButton(蘋(píng)果);an2=new JButton

26、(香蕉);an3=new JButton(水果);an4=new JButton(白菜);an5=new JButton(蘿卜);/*將組件添加到窗體中*/mb1.add(an1);mb1.add(an2);mb2.add(an4);mb2.add(an5);c.add(mb1,BorderLayout.NORTH);c.add(an3);c.add(mb2,BorderLayout.SOUTH);/*設(shè)置窗體屬性*/this.setTitle(布局綜合應(yīng)用);this.setSize(300,200);Dimension screenSize=Toolkit.getDefaultToolki

27、t().getScreenSize();this.setLocation(screenSize.width-this.getWidth()/2,(screenSize.height-this.getHeight()/2);this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/*設(shè)置窗體可見(jiàn)性*/this.setVisible(true);運(yùn)行結(jié)果如下:特別注意:在窗體默認(rèn)使用BorderLayout布局管理器時(shí),請(qǐng)指明每個(gè)組件添加的位置,以免被覆蓋。l JscrollPane面板在設(shè)置界面時(shí),

28、可能會(huì)遇到在一個(gè)較小的容器窗體中顯示一個(gè)較大部分的內(nèi)容的情況,這時(shí)可以使用JscrollPane面板。JscrollPane面板是帶滾動(dòng)條的面板,它也是一種容器,但是JscrollPane只能放置一個(gè)組件,并且不可以使用布局管理器。如果需要在JscrollPane面板中放置多個(gè)組件,需要將多個(gè)組件放置在JPanel面板上,然后將JPanel面板作為一個(gè)整體組件添加在JscrollPane組件上。l 例子import java.awt.*;import javax.swing.*;public class Test extends JFrame/*定義組件*/private JTextArea

29、ta;private JScrollPane mb1;public static void main(String args)new Test();/創(chuàng)建本類(lèi)對(duì)象public Test() /*將窗體轉(zhuǎn)化成容器*/Container c=this.getContentPane();/*創(chuàng)建組件*/ta=new JTextArea(請(qǐng)輸入內(nèi)容, 20, 50);mb1=new JScrollPane(ta);/*將組件添加到窗體容器中*/c.add(mb1);/*設(shè)置窗體屬性*/this.setTitle(滾動(dòng)面板);this.setSize(200,200);Dimension screenS

30、ize=Toolkit.getDefaultToolkit().getScreenSize();this.setLocation(screenSize.width-this.getWidth()/2,(screenSize.height-this.getHeight()/2);this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/*設(shè)置窗體可見(jiàn)性*/this.setVisible(true);運(yùn)行結(jié)果如下:七、高級(jí)組件面板l 分割面板JsplitPane分割面板由java.swing.Jspl

31、itPane類(lèi)實(shí)現(xiàn),用來(lái)將其所在的區(qū)域分割成兩部分,程序員可以根據(jù)實(shí)際情況決定是在水平方向上分割還是在垂直方向上分割。在這兩部分之間存在一個(gè)分隔條,通過(guò)調(diào)整分隔條的位置,可以改變這兩部分的相對(duì)大小,用戶(hù)可以根據(jù)實(shí)際情況自行調(diào)整。該功能可以有效地增加界面的可用空間,這也是分割面板的主要特點(diǎn)。l 例子import java.awt.*;import javax.swing.*;public class Test extends JFrame/*定義組件*/private JSplitPane hsp,vsp;private JButton an1,an2,an3;public static voi

32、d main(String args)new Test().setVisible(true);/創(chuàng)建本類(lèi)對(duì)象public Test() /*將窗體轉(zhuǎn)化成容器*/Container c=this.getContentPane();/*創(chuàng)建組件*/hsp=new JSplitPane();vsp=new JSplitPane(JSplitPane.VERTICAL_SPLIT);an1=new JButton(按鈕1);an2=new JButton(按鈕2);an3=new JButton(按鈕3);/*設(shè)置分割面板屬性*/hsp.setDividerLocation(100);vsp.setD

33、ividerLocation(30);vsp.setDividerSize(25);vsp.setOneTouchExpandable(true);vsp.setContinuousLayout(true);/*將組件添加到窗體容器中*/hsp.setLeftComponent(an1);hsp.setRightComponent(vsp);vsp.setLeftComponent(an2);vsp.setRightComponent(an3);c.add(hsp);/*設(shè)置窗體屬性*/this.setTitle(分割面板);this.setBounds(100, 100, 300, 300)

34、;this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);運(yùn)行結(jié)果如下:說(shuō)明:有些外觀可能不支持在分隔條上方提供UI小部件的功能。l 選項(xiàng)卡面板JTabbedPane選項(xiàng)卡面板由javax.swing.JtabbedPane類(lèi)實(shí)現(xiàn),它實(shí)現(xiàn)了一個(gè)多卡片的用戶(hù)界面,通過(guò)它可以將一個(gè)復(fù)雜的對(duì)話框分割成若干個(gè)選項(xiàng)卡,實(shí)現(xiàn)對(duì)信息的分類(lèi)顯示和管理,使界面更簡(jiǎn)潔大方,還可以有效地減少窗體的個(gè)數(shù)。l 例子import java.awt.*;import javax.swing.*;public class Tes

35、t extends JFrame/*定義組件*/private JTabbedPane mb1;private JButton an1,an2,an3,an4;private JPanel mb2;public static void main(String args)Test t=new Test();/創(chuàng)建本類(lèi)對(duì)象t.setVisible(true);/設(shè)置窗體可見(jiàn)public Test() Container c=this.getContentPane();/*創(chuàng)建組件*/mb1=new JTabbedPane();mb1.setTabLayoutPolicy(JTabbedPane.S

36、CROLL_TAB_LAYOUT);an1=new JButton(按鈕1);an2=new JButton(按鈕2);an3=new JButton(按鈕3);an4=new JButton(按鈕4);mb2=new JPanel();/*添加組件*/mb2.add(an3);mb2.add(an4);mb1.addTab(選項(xiàng)卡1, an1);mb1.addTab(選項(xiàng)卡2, an2);mb1.addTab(選項(xiàng)卡3, mb2);c.add(mb1);/*設(shè)置面板屬性*/mb1.setSelectedIndex(2);mb1.setEnabledAt(0,false);/*設(shè)置窗體屬性*/

37、this.setTitle(選項(xiàng)卡面板);this.setSize(300, 200);this.setLocation(500, 300);this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);運(yùn)行結(jié)果如下:八、按鈕組件按鈕在Swing中是較為常見(jiàn)的組件,用于觸發(fā)特定動(dòng)作。Swing中提供多種按鈕,包括提交按鈕、復(fù)選框、單選按鈕等,這些按鈕都是從AbstractButton類(lèi)中繼承而來(lái)的。l 提交按鈕JButton例子import java.awt.*;import java.awt.even

38、t.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;public class Test extends JFrame implements ActionListener/*定義組件*/private JButton an1,an2;public static void main(String args)Test T=new Test();/創(chuàng)建本類(lèi)對(duì)象T.setVisible(true);/設(shè)置顯示窗體public Test() Container c=this.getContentPane();c.s

39、etLayout(new FlowLayout();/*創(chuàng)建組件*/an1=new JButton(按鈕1);an2=new JButton();/*設(shè)置按鈕屬性*/an2.setText(按鈕2);/設(shè)置按鈕上顯示的文本an2.setToolTipText(按鈕提示);/設(shè)置按鈕組件提示信息an1.setEnabled(false);/設(shè)置按鈕是否可用/*為按鈕添加事件*/an2.addActionListener(this);an2.setActionCommand(an2);/*添加組件*/c.add(an1);c.add(an2);/*設(shè)置窗體屬性*/this.setTitle(按鈕)

40、;this.setSize(200, 120);Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();this.setLocation(screenSize.width-this.getWidth()/2,(screenSize.height-this.getHeight()/2);this.setResizable(false);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);/*創(chuàng)建觸發(fā)事件*/public void actionPerfor

41、med(ActionEvent e) if(e.getActionCommand().equals(an2)JOptionPane.showMessageDialog(null,彈出對(duì)話框);/彈出選項(xiàng)面板對(duì)話框運(yùn)行結(jié)果如下:說(shuō)明:setToolTipText()方法是為按鈕設(shè)置提示文本,setEnable()方法是設(shè)置按鈕是否可用。l 單選按鈕組件JRadioButton在默認(rèn)情況下,單選按鈕(JradioButton)顯示一個(gè)圓形圖標(biāo),并且通常在該圖標(biāo)旁放置一些說(shuō)明性文字,而在應(yīng)用程序中,一般將多個(gè)單選按鈕放置在按鈕組中,使這些單選按鈕表現(xiàn)出某種功能,當(dāng)用戶(hù)選中某個(gè)單選按鈕后,按鈕組中其他

42、按鈕將被自動(dòng)取消。單選按鈕是Swing組件中JradioButton類(lèi)的對(duì)象,該類(lèi)是JtoggleButton的子類(lèi),而JtoggleButton類(lèi)又是AbstractButton類(lèi)的子類(lèi),所以控制單選按鈕的諸多方法都是AbstractButton類(lèi)中的方法。按鈕組ButtonGroup在Swing中存在一個(gè)ButtonGroup類(lèi),用于產(chǎn)生按鈕組,如果希望將所有的單選按鈕放置在按鈕組中,需要實(shí)例化一個(gè)ButtonGroup對(duì)象,并使用該對(duì)象調(diào)用add()方法添加單選按鈕。例子import java.awt.*;import javax.swing.*;public class Test ex

43、tends JFrame/*定義組件*/private JLabel jl;private JRadioButton an1,an2,an3;private ButtonGroup anzu1;public static void main(String args)Test T=new Test();/創(chuàng)建本類(lèi)對(duì)象T.setVisible(true);/設(shè)置顯示窗體public Test() Container c=this.getContentPane();/*設(shè)置窗體布局管理器*/c.setLayout(new GridLayout(4, 1);/*創(chuàng)建組件*/jl=new JLabel(

44、請(qǐng)選擇您的月薪:,SwingConstants.LEFT);an1=new JRadioButton(1000元2000元);an2=new JRadioButton(2000元3500元);an3=new JRadioButton(3500元5000元);anzu1=new ButtonGroup();/*設(shè)置組件屬性*/an1.setSelected(true);anzu1.add(an1);anzu1.add(an2);anzu1.add(an3);/*為按鈕添加事件*/*添加組件*/c.add(jl);c.add(an1);c.add(an2);c.add(an3);/*設(shè)置窗體屬性*

45、/this.setTitle(單選按鈕);this.setSize(200, 150);Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();this.setLocation(screenSize.width-this.getWidth()/2,(screenSize.height-this.getHeight()/2);this.setResizable(false);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);/*創(chuàng)建觸發(fā)事件*/運(yùn)行結(jié)果

46、如下:注:從中可以看出,實(shí)質(zhì)上單選按鈕與提交按鈕的用法基本類(lèi)似,只是實(shí)例化單選按鈕對(duì)象后需要將其添加至按鈕組中。如果將單選按鈕添加至容器,需要一個(gè)一個(gè)的添加,而不是將按鈕組ButtonGroup添加到相應(yīng)的容器中。l 復(fù)選框組件JcheckBox復(fù)選框(JcheckBox)在Swing組件中的使用也非常廣泛,它具有一個(gè)方塊圖標(biāo),外加一段描述性文字。與單選按鈕唯一不同的是復(fù)選框可以進(jìn)行多選設(shè)置,每一個(gè)復(fù)選框都提供“選中”與“不選中”兩種狀態(tài)。復(fù)選框由JcheckBox類(lèi)的對(duì)象表示,它同樣繼承于AbstractButton類(lèi),所以復(fù)選框組件的屬性設(shè)置也來(lái)源于AbstractButton類(lèi)。例子im

47、port java.awt.*;import java.awt.event.*;import javax.swing.*;public class Test extends JFrame/*定義組件*/private JPanel mb1,mb2;private JTextArea jt;private JScrollPane mb3;private JCheckBox jc1,jc2,jc3;public static void main(String args)Test T=new Test();/創(chuàng)建本類(lèi)對(duì)象T.setVisible(true);/設(shè)置顯示窗體public Test()

48、Container c=this.getContentPane();/*設(shè)置窗體布局管理器*/c.setLayout(new BorderLayout();/*創(chuàng)建組件*/jt=new JTextArea(3,10);mb3=new JScrollPane(jt);jc1=new JCheckBox(房子);jc2=new JCheckBox(汽車(chē));jc3=new JCheckBox(其他);mb1=new JPanel();mb2=new JPanel();/*設(shè)置組件屬性*/*為按鈕添加事件*/jc1.addActionListener(new ActionListener() publ

49、ic void actionPerformed(ActionEvent e) jt.setText(null);jt.append(您選擇了房子););jc2.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) jt.setText(null);jt.append(您選擇了汽車(chē)););jc3.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) jt.setText(null

50、);jt.append(您選擇了其他););/*添加組件*/mb1.add(mb3);mb2.add(jc1);mb2.add(jc2);mb2.add(jc3);c.add(mb1,BorderLayout.NORTH);c.add(mb2,BorderLayout.SOUTH);/*設(shè)置窗體屬性*/this.setTitle(復(fù)選框);this.setSize(200, 150);Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();this.setLocation(screenSize.width-this.ge

51、tWidth()/2,(screenSize.height-this.getHeight()/2);this.setResizable(false);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);運(yùn)行結(jié)果如下:注:JtextArea類(lèi)中的setText()方法可以刪除舊文本,其中的append()方法可以追加文本。九、列表組件Swing中提供了兩種列表組件,分別為下拉列表框與列表框。下拉列表框與列表框都是帶有一系列項(xiàng)目的組件,用戶(hù)可以從中選擇需要的項(xiàng)目。列表框較下拉列表框更直觀一些,它將所有的項(xiàng)目羅列在列表框中;但下拉

52、列表框較列表框更為便捷和美觀,它將所有的項(xiàng)目隱藏起來(lái),當(dāng)用戶(hù)選用其中的項(xiàng)目時(shí)才會(huì)顯現(xiàn)出來(lái)。l 下拉列表框組件JcomboBox1、JcomboBox類(lèi)初次使用Swing中的下拉列表框時(shí),會(huì)感覺(jué)到該類(lèi)下拉列表框與Windows操作系統(tǒng)中的下拉列表框有一些相似,實(shí)質(zhì)上兩者并不完全相同,因?yàn)镾wing中的下拉列表框不僅可以供用戶(hù)從中選擇項(xiàng)目,同時(shí)也提供編輯項(xiàng)目中內(nèi)容的功能。下拉列表框是一個(gè)帶條狀的顯示區(qū),它具有下拉功能,在下拉列表框的右方存在一個(gè)倒三角形的按鈕,當(dāng)用戶(hù)單擊該按鈕時(shí),下拉列表框中的項(xiàng)目將會(huì)以列表形式顯示出來(lái)。Swing中的下拉列表框使用JcomboBox類(lèi)對(duì)象來(lái)表示,它是javax.swing.Jcomponent類(lèi)的子類(lèi)。它的常用構(gòu)造方法如下:public JComboBox();public JComboBox(ComboBoxModel dataModel);public JComboBox(Object arrayData);public JComboBox(Vector vector);2、JComboBox模型在開(kāi)發(fā)程序中,一般將下拉列表框中的項(xiàng)目封裝為ComboBoxModel的情況比較多。ComboBoxModel為接口,它代表一般模型,可以自定義一個(gè)類(lèi)實(shí)現(xiàn)該接口,然后在初始化JC

溫馨提示

  • 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論