

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第 1 3 章圖形化用戶界面(GUI)Swing 較早期版本中的AWT更為強大、性能更優(yōu)良,Swing 中除了保留AWT中幾個重要的重量級組件之外,其他組件都為輕量級,這樣使用Swing 開發(fā)出的窗體風格會與當前運行平臺上的窗體風格一致,同時程序員也可以在跨平臺時指定窗體統(tǒng)一的風格與外觀。Swing 的使用很復雜,本章主要講解Swing 中的基本要素,包括容器、組件、窗體布局、事件和監(jiān)聽器。通過閱讀本章,您可以:l 了解Swing 組件l 掌握使用常用窗體l 掌握在標簽上設置圖標l 掌握應用程序中的布局管理器l 掌握常用面板l 掌握按鈕組件l 掌握列表組件l 掌握文本組件l 學會常用事件監(jiān)聽器
2、一、圖形化用戶界面介紹l Swing 概述原來的AWT 組件來自java.awt 包,當含有AWT 組件的Java應用程序在不同的平臺上執(zhí)行時,每個平臺的GUI組件的顯示會有所不同,但是在不同平臺上運行使用Swing 開發(fā)的應用程序時,就可以統(tǒng)一GUI 組件的顯示風格,因為Swing 組件允許編程人員在跨平臺時指定統(tǒng)一的外觀和風格。Swing 組件通常被稱為“輕量級組件”,因為它完全由Java語言編寫,而Java是不依賴于操作系統(tǒng)的語言,它可以在任何平臺上運行;相反,依賴于本地平臺的組件相應地被稱為“重量級組件”,如AWT組件就是依賴本地平臺的窗口系統(tǒng)來決定組件的功能、外觀和風格。Swing主
3、要具有以下特點:輕量級組件可插入外觀組件l 組件(Component)定義:以圖形化的方式顯示在屏幕上的,和用戶進行交互的對象,就叫組件;組件包括:菜單、標簽、文本框、密碼框、滾動條、單選按鈕、復選框、按鈕等等;l 容器(Container)組件不能獨立的顯示出來,只能將組件放在容器里,才能正常的顯示。布局的定義:將組件合理有序的排列和分布在容器中(包括組件的位置、大?。?;l 布局管理器(layout manager)負責確定組件在容器中的位置和大小。調用容器的setLayout(布局管理器對象) 方法,為容器指定某種布局管理器的一個對象。當容器需要定位組件和確定組件大小時,就會給布局管理器對
4、象發(fā)消息,讓它完成該項工作。awt 中常見的布局管理器有:BorderLoyout (邊界布局管理器)簡介:分為北、南、東、西、中;FlowLayout(流式布局管理器)簡介:組件在一行中從左至右水平排列,排滿后折行;GridLayout(網格布局管理器)簡介:以行和列的網格形式安排組件;GridBagLayout 布局管理器簡介:更復雜、功能更強的網格布局;CardLayout 布局管理器簡介:每一個組件作為一個卡片,容器僅顯示多個卡片中的某一個;二、JFrame 容 器(常用窗體)知識點:1、如何創(chuàng)建窗體Swing組件的窗體通常與組件和容器相關,所以在JFrame對象創(chuàng)建完成后,需要調用g
5、etContentPane()方法將窗體轉換為容器,然后在容器中添加組件或設置布局管理器。通常,這個容器用來包含和顯示組件。如果需要將組件添加至容器,可以使用來自Container類的add()方法進行設置,也可以使用remove()方法將組件從容器中刪除。2、窗體的關閉方式創(chuàng)建窗體后,需要給予窗體一個關閉方式,可以調用setDefaultCloseOperation()方法關閉窗體。Java為窗體關閉提供了多種方式,常用的有以下4種:l EXIT_ON_CLOSE表示退出應用程序默認窗口關閉;l DO_NOTHING_ON_CLOSE表示什么都不做就將窗體關閉;l DISPOSE_ON_CL
6、OSE表示任何注冊監(jiān)聽程序對象后會自動隱藏并釋放窗體;l HIDE_ON_CLOSE表示隱藏窗口的默認窗口關閉;3、JDialog窗體JDialog窗體是Swing組件中的對話框,它繼承了AWT組件中java.awt.Dialog類。功能:從一個窗體中彈出另一個窗體,就像是在使用IE瀏覽器時彈出的確定對話框一樣。JDialog窗體實質上就是另一種類型的窗體,它與JFrame窗體類似,在使用時也需要調用getContentPane()方法將窗體轉換為容器,然后在容器中設置窗體的特性。例子:import javax.swing.*;public class Testpublic static vo
7、id main(String args)/* 創(chuàng)建窗體*/JFrame jf=new JFrame();/創(chuàng)建窗體對象jf.setTitle(用戶界面);/設置窗體標題jf.setSize(260,180);/設置窗體大小jf.setLocation(100, 270);/設置窗體位置jf.setResizable(false);/設置窗體是否可以調整大小jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/設置窗體關閉方式jf.setVisible(true);/設置窗體可見性沒有設置標題、大小的窗體: 設置標題、大小的窗體:擴展:1、設置組件
8、的位置和大小的方法:setBounds (int x,int y,int width,int height) 方法相當于:setLocation(int x,inty) 和setSize(int width,int height) 2、將軟件的位置Location設置為:水平居中,垂直居中Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();setLocation(screenSize.width-getWidth()/2,(screenSize.height-getHeight()/2);三、標簽組件與圖標l 概述在
9、Swing中顯示文本或提示信息的方法是使用標簽,它支持文本字符串和圖標。在應用程序的用戶界面中,一個簡短的文本標簽可以使用戶知道這些組件的目的,所以標簽在Swing中是比較常用的組件。在本節(jié)中將探討Swing標簽的用法、如何創(chuàng)建標簽,以及如何在標簽上放置文本與圖標。l 標簽組件Jlabel標簽由JLabel類定義,標簽可以顯示一行只讀文本、一個圖像或帶圖像的文本,它并不能產生任何類型的事件,只是簡單地顯示文本與圖片,但是可以使用標簽的特性指定標簽上文本的對齊方式。l 圖標組件IconSwing中的圖標可以放置在按鈕、標簽等組件上,用于描述組件的用途或裝飾組件。圖標可以用Java支持的圖片文件類
10、型進行創(chuàng)建,也可以使用java.awt.Graphics類提供的功能方法來創(chuàng)建。l 創(chuàng)建圖標在Swing中通過Icon接口來創(chuàng)建圖標,可以在創(chuàng)建時給定圖標的大小、顏色等特性。如果使用Icon接口,必須實現(xiàn)Icon接口中的3個方法。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 自動生成的方法存根return this.width;public int getIconHeight() / TODO 自動生成的方法存根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(測試, 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)建圖片圖標Swing中的圖標除了可以繪制之外,還可以使用某個特定的圖片創(chuàng)建。Swing利用javax.swing.ImageIcon類根據現(xiàn)有圖片創(chuàng)建圖標,ImageIcon類實現(xiàn)了Icon接口,同時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(這是一個JFrame窗體,SwingConstants.CENTER);URL url=Test.class.getResource(imageButton.jpg);Icon icon=new ImageIcon(url);jl.setIcon(icon);/設置標簽的圖標jl.setHorizontalAlignment(SwingConstants.CENTER);/設置標簽水平對齊方式jl.setOpaque(true);/設置標簽為不透明狀態(tài)c.add(jl);setTitle(圖片圖標);setS
15、ize(250,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 void main(String args
16、)new Test();運行結果:注意:java.lang.Class類中的getResource()方法可以獲取資源文件的URL路徑。例子中該方法的參數是imageButton.jpg,這個路徑是相對于Test類文件的,所以可將圖片文件與類文件放在同一個文件夾下。四、常用布局管理器l 概述Swing提供的常用布局管理器包括邊界布局管理器、流式布局管理器、網格布局管理器。l 絕對布局顧名思義,就是硬性指定組件在容器中的位置和大小,可以使用絕對坐標的方式指定組件的位置。使用絕對布局的步驟如下:(1)使用Container.setLayout(null)方法取消布局管理器;(2)使用Compone
17、nt.setBounds()方法設置每個組件的位置和大??;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);/設置按鈕的大小,如果沒有此語句,按鈕將無法顯示,因為它的大小為0;/*添加組件*/c.add(
18、an1);/*設置窗體屬性*/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(絕對布局);運行結果如下:l 邊界布局管理器(BorderLayout)在默認不指定窗體布局的情況下,Swing組件的布局模式是邊界布局管理器。邊界布局管理器還可以將容器劃分為東、西、南、北、中5個區(qū)域,可以將組件加入到這5個區(qū)域中。容器調用Container類的add()方法添加組件時可以設置此組件在邊界布局管理器中的區(qū)域,區(qū)域的控制可以由BorderLayout類中的成員變量來決定。l 格式Container c=this.getContentPane();c.setLayout(new BorderLayout();c.add(ne
20、w JButton(“確定”), BorderLayout.EAST);/將確定按鈕添加到容器的底部并填充c.add(new JButton(“取消”);/將取消按鈕添加到容器的中部并填充至個區(qū)域的邊界注意:如果不是五個按鈕全部添加,則會以擴充中部為主進行填充,但中部不會被其他四個填充。 l 流式布局管理器(FlowLayout)流式布局管理器是布局管理器中最基本的布局管理器。流式布局管理器在整個容器中的布局正如其名,像“流”一樣從左到右擺放組件,直到占據了這一行的所有空間,然后再向下移動一行。默認情況下,組件在每一行上都是居中排列的,但是通過設置也可以更改組件在每一行上的排列位置。l 格式C
21、ontainer c=this.getContentPane();c.setLayout(new FlowLayout(2,10,10);/設置容器的布局管理器為流式布局管理器,采用右對齊方式擺放各組件; l 網格布局管理器(GridLayout)網格布局管理器將容器劃分為網格,所以組件可以按行和列進行排列。在網格布局管理器中,每一個組件的大小都相同,并且網格中空格的個數由網格的行數和列數決定,如一個兩行兩列的網格能產生4個大小相等的網格。組件從網格的左上角開始,按照從左到右、從上到下的順序加入到網格中,而且每一個組件都會填滿整個網格,改變窗體的大小,組件的大小也會隨之改變。l 格式Conta
22、iner c=this.getContentPane();c.setLayout(new GridLayout(3,3,5,5);/ 設置容器的管理器為7行3列寬為5像素高為5像素的網格布局管理器; 拓展l 創(chuàng)建基本窗體的步驟:1、導入swt和swing包;2、繼承Jframe類;3、在類中定義組件;4、在構造方法中創(chuàng)建組件;5、在構造方法中添加組件;6、設置窗體屬性;7、顯示窗體;8、在主函數中創(chuàng)建對象;9、所有布局管理器都可以添加任意組件;五、高級布局管理器Swing還提供了一些高級布局管理器,如箱式布局管理器、卡片布局管理器、網格組布局管理器以及彈簧布局管理器,通過使用這些布局管理器,可
23、以設計出更好、更適用的程序界面。在講解過程中為了便于讀者理解,結合了大量的圖例,還針對每個知識點進行了舉例。箱式布局管理器BoxLayout箱式布局管理器用來管理一組水平或垂直排列的組件。如果是用來管理一組水平排列的組件,則稱為水平箱;如果是用來管理一組垂直排列的組件,則稱為垂直箱。BoxLayout類僅提供了一個構造方法BoxLayout(Container target,int axis),其入口參數target為要采用該布局方式的容器對象;入口參數axis為要采用的布局方式,如果將其設置為靜態(tài)常量X_AXIS,表示創(chuàng)建一個水平箱,組件將從左到右排列,設置為靜態(tài)常量Y_AXIS則表示創(chuàng)建一
24、個垂直箱,組件將從上到下排列。無論水平箱還是垂直箱,當將窗體調小至不能顯示所有組件時,組件仍會排列在一行或一列,組件按照添加到容器中的先后順序進行排列。默認情況下,由箱式布局管理器實現(xiàn)的組件之間沒有間距,如果要在組件之間設置間距,可以通過使用Box類提供的6個不可見組件實現(xiàn),這些組件就是專門用來設置箱式布局管理器的。六、常用面板面板也是一個Swing容器,它可以作為容器容納其他組件,但它也必須被添加到其他容器中。Swing中常用的面板包括JPanel面板以及JScrollPane面板。JPanel面板默認使用流式布局管理器,窗體默認使用邊界布局管理器。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)建本類對象public Test() Container c=this.getContentPane();/*創(chuàng)建組件*/mb1=new JPanel();mb2=new JPanel();an1=new JButton(蘋果);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);/*設置窗體屬性*/this.setTitle(布局綜合應用);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);/*設置窗體可見性*/this.setVisible(true);運行結果如下:特別注意:在窗體默認使用BorderLayout布局管理器時,請指明每個組件添加的位置,以免被覆蓋。l JscrollPane面板在設置界面時,
28、可能會遇到在一個較小的容器窗體中顯示一個較大部分的內容的情況,這時可以使用JscrollPane面板。JscrollPane面板是帶滾動條的面板,它也是一種容器,但是JscrollPane只能放置一個組件,并且不可以使用布局管理器。如果需要在JscrollPane面板中放置多個組件,需要將多個組件放置在JPanel面板上,然后將JPanel面板作為一個整體組件添加在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)建本類對象public Test() /*將窗體轉化成容器*/Container c=this.getContentPane();/*創(chuàng)建組件*/ta=new JTextArea(請輸入內容, 20, 50);mb1=new JScrollPane(ta);/*將組件添加到窗體容器中*/c.add(mb1);/*設置窗體屬性*/this.setTitle(滾動面板);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);/*設置窗體可見性*/this.setVisible(true);運行結果如下:七、高級組件面板l 分割面板JsplitPane分割面板由java.swing.Jspl
31、itPane類實現(xiàn),用來將其所在的區(qū)域分割成兩部分,程序員可以根據實際情況決定是在水平方向上分割還是在垂直方向上分割。在這兩部分之間存在一個分隔條,通過調整分隔條的位置,可以改變這兩部分的相對大小,用戶可以根據實際情況自行調整。該功能可以有效地增加界面的可用空間,這也是分割面板的主要特點。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)建本類對象public Test() /*將窗體轉化成容器*/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);/*設置分割面板屬性*/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);/*設置窗體屬性*/this.setTitle(分割面板);this.setBounds(100, 100, 300, 300)
34、;this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);運行結果如下:說明:有些外觀可能不支持在分隔條上方提供UI小部件的功能。l 選項卡面板JTabbedPane選項卡面板由javax.swing.JtabbedPane類實現(xiàn),它實現(xiàn)了一個多卡片的用戶界面,通過它可以將一個復雜的對話框分割成若干個選項卡,實現(xiàn)對信息的分類顯示和管理,使界面更簡潔大方,還可以有效地減少窗體的個數。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)建本類對象t.setVisible(true);/設置窗體可見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(選項卡1, an1);mb1.addTab(選項卡2, an2);mb1.addTab(選項卡3, mb2);c.add(mb1);/*設置面板屬性*/mb1.setSelectedIndex(2);mb1.setEnabledAt(0,false);/*設置窗體屬性*/
37、this.setTitle(選項卡面板);this.setSize(300, 200);this.setLocation(500, 300);this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);運行結果如下:八、按鈕組件按鈕在Swing中是較為常見的組件,用于觸發(fā)特定動作。Swing中提供多種按鈕,包括提交按鈕、復選框、單選按鈕等,這些按鈕都是從AbstractButton類中繼承而來的。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)建本類對象T.setVisible(true);/設置顯示窗體public Test() Container c=this.getContentPane();c.s
39、etLayout(new FlowLayout();/*創(chuàng)建組件*/an1=new JButton(按鈕1);an2=new JButton();/*設置按鈕屬性*/an2.setText(按鈕2);/設置按鈕上顯示的文本an2.setToolTipText(按鈕提示);/設置按鈕組件提示信息an1.setEnabled(false);/設置按鈕是否可用/*為按鈕添加事件*/an2.addActionListener(this);an2.setActionCommand(an2);/*添加組件*/c.add(an1);c.add(an2);/*設置窗體屬性*/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,彈出對話框);/彈出選項面板對話框運行結果如下:說明:setToolTipText()方法是為按鈕設置提示文本,setEnable()方法是設置按鈕是否可用。l 單選按鈕組件JRadioButton在默認情況下,單選按鈕(JradioButton)顯示一個圓形圖標,并且通常在該圖標旁放置一些說明性文字,而在應用程序中,一般將多個單選按鈕放置在按鈕組中,使這些單選按鈕表現(xiàn)出某種功能,當用戶選中某個單選按鈕后,按鈕組中其他
42、按鈕將被自動取消。單選按鈕是Swing組件中JradioButton類的對象,該類是JtoggleButton的子類,而JtoggleButton類又是AbstractButton類的子類,所以控制單選按鈕的諸多方法都是AbstractButton類中的方法。按鈕組ButtonGroup在Swing中存在一個ButtonGroup類,用于產生按鈕組,如果希望將所有的單選按鈕放置在按鈕組中,需要實例化一個ButtonGroup對象,并使用該對象調用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)建本類對象T.setVisible(true);/設置顯示窗體public Test() Container c=this.getContentPane();/*設置窗體布局管理器*/c.setLayout(new GridLayout(4, 1);/*創(chuàng)建組件*/jl=new JLabel(
44、請選擇您的月薪:,SwingConstants.LEFT);an1=new JRadioButton(1000元2000元);an2=new JRadioButton(2000元3500元);an3=new JRadioButton(3500元5000元);anzu1=new ButtonGroup();/*設置組件屬性*/an1.setSelected(true);anzu1.add(an1);anzu1.add(an2);anzu1.add(an3);/*為按鈕添加事件*/*添加組件*/c.add(jl);c.add(an1);c.add(an2);c.add(an3);/*設置窗體屬性*
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ā)事件*/運行結果
46、如下:注:從中可以看出,實質上單選按鈕與提交按鈕的用法基本類似,只是實例化單選按鈕對象后需要將其添加至按鈕組中。如果將單選按鈕添加至容器,需要一個一個的添加,而不是將按鈕組ButtonGroup添加到相應的容器中。l 復選框組件JcheckBox復選框(JcheckBox)在Swing組件中的使用也非常廣泛,它具有一個方塊圖標,外加一段描述性文字。與單選按鈕唯一不同的是復選框可以進行多選設置,每一個復選框都提供“選中”與“不選中”兩種狀態(tài)。復選框由JcheckBox類的對象表示,它同樣繼承于AbstractButton類,所以復選框組件的屬性設置也來源于AbstractButton類。例子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)建本類對象T.setVisible(true);/設置顯示窗體public Test()
48、Container c=this.getContentPane();/*設置窗體布局管理器*/c.setLayout(new BorderLayout();/*創(chuàng)建組件*/jt=new JTextArea(3,10);mb3=new JScrollPane(jt);jc1=new JCheckBox(房子);jc2=new JCheckBox(汽車);jc3=new JCheckBox(其他);mb1=new JPanel();mb2=new JPanel();/*設置組件屬性*/*為按鈕添加事件*/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(您選擇了汽車););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);/*設置窗體屬性*/this.setTitle(復選框);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);運行結果如下:注:JtextArea類中的setText()方法可以刪除舊文本,其中的append()方法可以追加文本。九、列表組件Swing中提供了兩種列表組件,分別為下拉列表框與列表框。下拉列表框與列表框都是帶有一系列項目的組件,用戶可以從中選擇需要的項目。列表框較下拉列表框更直觀一些,它將所有的項目羅列在列表框中;但下拉
52、列表框較列表框更為便捷和美觀,它將所有的項目隱藏起來,當用戶選用其中的項目時才會顯現(xiàn)出來。l 下拉列表框組件JcomboBox1、JcomboBox類初次使用Swing中的下拉列表框時,會感覺到該類下拉列表框與Windows操作系統(tǒng)中的下拉列表框有一些相似,實質上兩者并不完全相同,因為Swing中的下拉列表框不僅可以供用戶從中選擇項目,同時也提供編輯項目中內容的功能。下拉列表框是一個帶條狀的顯示區(qū),它具有下拉功能,在下拉列表框的右方存在一個倒三角形的按鈕,當用戶單擊該按鈕時,下拉列表框中的項目將會以列表形式顯示出來。Swing中的下拉列表框使用JcomboBox類對象來表示,它是javax.swing.Jcomponent類的子類。它的常用構造方法如下:public JComboBox();public JComboBox(ComboBoxModel dataModel);public JComboBox(Object arrayData);public JComboBox(Vector vector);2、JComboBox模型在開發(fā)程序中,一般將下拉列表框中的項目封裝為ComboBoxModel的情況比較多。ComboBoxModel為接口,它代表一般模型,可以自定義一個類實現(xiàn)該接口,然后在初始化JC
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 科技與文化太原文化產業(yè)的雙輪驅動策略
- 電子商務平臺的營銷策略及效果比較
- 棗莊房屋租賃合同范本
- 領帶訂做合同范本
- 2025至2030年中國煙塵過濾檢測器數據監(jiān)測研究報告
- 知識產教育推廣助力科技發(fā)展與創(chuàng)新
- 2025年中儲糧集團紀檢監(jiān)察組招聘(4人)筆試參考題庫附帶答案詳解
- 上海購房合同范本
- 科技引領下的食品安全管理-以肉類產品為例的實踐研究
- 2025至2030年中國水移畫裝飾門數據監(jiān)測研究報告
- 城市更新暨老舊小區(qū)改造二期項目-初步設計說明書
- 礦石買賣協(xié)議書
- 2024年岳陽職業(yè)技術學院單招職業(yè)技能測試題庫附答案
- 2023新蘇教版六年級下冊科學學生活動手冊答案
- 【老齡化背景下商業(yè)銀行養(yǎng)老金融發(fā)展探究文獻綜述3400字】
- 精神科護士進修
- 《用戶側電化學儲能系統(tǒng)接入配電網技術規(guī)定》
- 2024年洛陽市九年級語文中考第一次模擬考試卷附答案解析
- 安徽省醫(yī)療保障基金使用違法違規(guī)問題檢查指引2023版
- 脾淋巴瘤護理查房
- (幻燈片)湘教版七年級下冊地理復習課件
評論
0/150
提交評論