版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第9章 任務(wù)9設(shè)計(jì)用戶注冊(cè)界面,9.1 任務(wù)描述 9.2 技術(shù)要點(diǎn) 9.3 任務(wù)實(shí)施,9.1 任 務(wù) 描 述 本章的任務(wù)是設(shè)計(jì)用戶注冊(cè)界面,并完成相關(guān)功能。在用戶登錄的界面中,通過(guò)單擊【注冊(cè)】按鈕,進(jìn)入用戶注冊(cè)界面,如圖9-1所示。注冊(cè)界面中除了標(biāo)簽、按鈕、文本框、密碼框等熟悉的組件,還新增了作為性別選擇的單選按鈕以及提供所屬班級(jí)選擇的組合框等組件。當(dāng)用戶填寫好正確信息后,單擊【注冊(cè)】按鈕,系統(tǒng)將把當(dāng)前用戶信息保存至用戶信息文件。由于文件讀寫相關(guān)操作將在后續(xù)章節(jié)進(jìn)行講解,因此在本章為了保證程序的完整性,我們暫時(shí)顯示一個(gè)簡(jiǎn)單的窗口以提示注冊(cè)成功,如圖9-1所示。,圖9-1 用戶注冊(cè)界面,9.2
2、技 術(shù) 要 點(diǎn) 本章技術(shù)要點(diǎn)是GUI程序設(shè)計(jì)中的選擇性組件及其相關(guān)事件、常用復(fù)雜的布局方式網(wǎng)格包布局(GridBagLayout)和盒式布局(BoxLayout)。,9.2.1 選擇性組件 1組合框(JComboBox類) 組合框是一些項(xiàng)目的簡(jiǎn)單列表,用戶可以看到它的一個(gè)選項(xiàng)及其旁邊的箭頭按鈕。當(dāng)用戶單擊箭頭按鈕時(shí),選項(xiàng)列表被展開,用戶可以從中進(jìn)行選擇。其優(yōu)點(diǎn)在于節(jié)省空間,使界面更加緊湊。同時(shí),它也限制用戶的選擇范圍,并且能夠避免對(duì)輸入數(shù)據(jù)有效性的繁瑣驗(yàn)證。默認(rèn)情況下,JComboBox是不可編輯的,但可以調(diào)用setEditable(true)將其設(shè)置為可編輯狀態(tài)。 JComboBox類的常用
3、構(gòu)造函數(shù)及方法如表9-1所示。,表9-1 JComboBox類的常用構(gòu)造函數(shù)及方法,例如:創(chuàng)建一個(gè)顯示城市名字的組合框。 String city=“北京”,“上海”,“廣州”“; JComboBox jcity =new JComboBox(city); JComboBox可以觸發(fā)ActionEvent和ItemEvent事件。選中一個(gè)新的選項(xiàng)時(shí),JComboBox會(huì)觸發(fā)兩次ItemEvent事件,一次是取消前一個(gè)選項(xiàng),另一次是選擇當(dāng)前選項(xiàng)。產(chǎn)生ItemEvent事件后,JComboBox緊接著觸發(fā)ActionEvent事件,具體示例參見(jiàn)本章例9-1。,2列表框(JList類) 列表框的作用與
4、組合框基本相同,也是提供一系列的選擇項(xiàng)供用戶選擇,但是列表框允許用戶同時(shí)選擇多項(xiàng)。可以在創(chuàng)建列表時(shí),將其各選擇項(xiàng)加入到列表中。 JList類的常用構(gòu)造函數(shù)及方法如表9-2所示。,表9-2 JList類的常用構(gòu)造函數(shù)及方法,例如:創(chuàng)建一個(gè)關(guān)于顏色的列表框。 JList colorlist=new JList(3,true); /列表的構(gòu)造函數(shù) colorlist.add(red); /將字符串加到列表中 colorlist(green); colorlist(blue); JList(3,true)中的3表明該列表只顯示三個(gè)選項(xiàng);true表示可做多重選擇,若為false,則只能做單一的選擇。,3
5、單選按鈕(JRadioButton類) 單選按鈕JRadioButton是提供用戶從一組選項(xiàng)中選擇唯一的選項(xiàng)的按鈕。 JRadioButton類的常用構(gòu)造函數(shù)及方法如表9-3所示。,表9-3 JRadioButton類的常用構(gòu)造函數(shù)及方法,單選按鈕可以像按鈕一樣添加到容器中,但要實(shí)現(xiàn)多選一的功能,必須將單選按鈕分組,需要?jiǎng)?chuàng)建一個(gè)Button Group的實(shí)例,并用add方法把單選按鈕添加到該實(shí)例中。具體方法如下所示,顯示效果如圖9-2所示。 JRadioButton rad1,rad2; rad1=new JRadioButton(男); rad2=new JRadioButton (女,tr
6、ue); ButtonGroup btg= new ButtonGroup( ); btg.add(rad1); btg.add(rad1);,panel = new JPanel(); panel.add(rad1); panel.add(rad2);,圖9-2 單選按鈕,4復(fù)選框(JCheckBox類) JCheckBox組件提供一種簡(jiǎn)單的“開/關(guān)”輸入設(shè)備,它帶有一個(gè)文本標(biāo)簽。每個(gè)復(fù)選按鈕只有兩種狀態(tài):true表示選中;false表示未被選中。創(chuàng)建復(fù)選按鈕對(duì)象時(shí)可以同時(shí)指明其文本標(biāo)簽,這個(gè)文本標(biāo)簽簡(jiǎn)要地說(shuō)明了復(fù)選按鈕的含義。其功能與單選按鈕(JRadioButton)類似,所不同的是復(fù)選
7、框可以實(shí)現(xiàn)多選多。 JCheckBox類的常用構(gòu)造函數(shù)及方法如表9-4所示。,表9-4 JCheckbox類的常用構(gòu)造函數(shù)及方法,復(fù)選按鈕的構(gòu)造函數(shù)如下: JCheckBox() JCheckBox(String str, boolean tf) 其中,str指明對(duì)應(yīng)的文本標(biāo)簽;tf是一個(gè)邏輯值,或?yàn)閠rue,或?yàn)閒alse。 如果要獲得復(fù)選按鈕的狀態(tài),可以調(diào)用方法getState()獲得:若按鈕被選中,返回true,否則返回false。調(diào)用方法setState()可以在程序中設(shè)置是否選中復(fù)選按鈕。 例如:創(chuàng)建一個(gè)關(guān)于字型的復(fù)選框,顯示效果如圖9-3所示。,JCheckBox bold = n
8、ew JCheckBox( Bold ); /粗體 JCheckBox italic= new JCheckBox(Italic); /斜體,圖9-3 復(fù)選框,9.2.2 選擇事件 1ItemEvent類 選擇事件是在具有選擇某個(gè)項(xiàng)目功能的組件上發(fā)生的事件,能夠引發(fā)選擇事件的Swing組件,包括復(fù)選框、復(fù)選框菜單項(xiàng)、組合框、單選按鈕。 ItemEvent類的常用方法如表9-5所示。,表9-5 ItemEvent類的常用方法,ItemEvent類用兩個(gè)靜態(tài)常量表示選項(xiàng)狀態(tài): ItemEvent.SELECTED:代表選項(xiàng)被選中。 ItemEvent.DESELECTED:代表選項(xiàng)未被選中。 處理
9、ItemEvent事件時(shí)需要實(shí)現(xiàn)ItemListener接口,該接口中只包含一個(gè)抽象方法,當(dāng)選項(xiàng)的選擇狀態(tài)發(fā)生改變時(shí)被調(diào)用。 public void itemStateChanged(ItemEvent e) 例9-1中,當(dāng)鼠標(biāo)選中組合框中新的選項(xiàng)時(shí),JCombo Box將觸發(fā)兩次ItemEvent事件,隨后觸發(fā)ActionEvent事件。,例9-1 ItemeventDemo.java 1 import java.awt.*; 2 import java.awt.event.*; 3 import javax.swing.*; 4 public class ItemeventDemo ext
10、ends JFrame implements ItemListener,ActionListener 5 JRadioButton opt1; 6 JRadioButton opt2; 7 ButtonGroup btg; 8 JTextArea ta; 9 JComboBox comb;,10 JLabel sex,city; 11 public ItemeventDemo(String title) 12 super(title); 13 setLayout(new FlowLayout(FlowLayout.LEFT); 14 sex=new JLabel(性 別: ); 15 city
11、=new JLabel( 籍 貫:); 16 opt1=new JRadioButton( 男 ); 17 opt2=new JRadioButton( 女 ); 18 btg=new ButtonGroup(); 19 btg.add(opt1); 20 btg.add(opt2);,21 opt1.addItemListener(this); 22 opt2.addItemListener(this); 23 ta=new JTextArea (8,35); 24 comb=new JComboBox(); 25 comb.addItem(北 京); 26 comb.addItem(上 海
12、); 27 comb.addItem(南 京); 28 comb.addItem(廣 州); 29 comb.addItem(成 都); 30 comb.addItem(昆 明); 31 comb.addItemListener(this);,32 comb.addActionListener(this); 33 getContentPane().add(sex); 34 getContentPane().add(opt1); 35 getContentPane().add(opt2); 36 getContentPane().add(city); 37 getContentPane().ad
13、d(comb); 38 getContentPane().add(ta); 39 setTitle(title); 40 setSize(300,250); 41 setVisible(true); 42 ,43 public static void main(String args) 44 new ItemeventDemo(“Itemevent Demo”); 45 46 /ItemEvent事件發(fā)生時(shí)的處理操作 47 public void itemStateChanged(ItemEvent e) 48 String str; 49 if(e.getSource()=opt1) /如果
14、opt1被選擇 50 ta.append(“n性 別:”+“男”); 51 else if(e.getSource()=opt2) /如果opt2被選擇 52 ta.append(n性 別:+女); 53 if(e.getSource()=comb),54 str=comb.getSelectedItem().toString(); 55 ta.append(n籍 貫:+str+ =ItemEvent事件 ); 56 57 58 public void actionPerformed(ActionEvent e) 59 String str; 60 if(e.getSource()=comb)
15、 61 str=comb.getSelectedItem().toString(); 62 ta.append(n籍 貫:+str+ =ActionEvent事件 );,63 64 65 程序運(yùn)行效果如圖9-4所示。,圖9-4 選擇事件運(yùn)行效果,例9-2根據(jù)復(fù)選框中的選擇將文本顯示為不同的字型:Bold(粗體)和Italic(斜體)。 例9-2 ItemeventDemo.java 1 import java.awt.*; 2 import java.awt.event.*; 3 import javax.swing.*; 4 public class CheckBoxDemo extends
16、 JFrame implements ItemListener 5 private JTextField field; 6 private JCheckBox bold, italic; 7 private int valBold = Font.PLAIN;,8 private int valItalic = Font.PLAIN; 9 public CheckBoxDemo() 10 super( JCheckBox Demo ); 11 Container container = getContentPane(); 12 container.setLayout( new FlowLayou
17、t() ); 13 field = new JTextField( 2008,北京歡迎您!, 20 ); 14 field.setFont( new Font( 隸書, Font.PLAIN, 14 ) ); 15 container.add(field ); 16 bold = new JCheckBox( Bold ); 17 container.add( bold ); 18 italic = new JCheckBox( Italic );,19 container.add( italic ); 20 bold.addItemListener(this); 21 italic.addI
18、temListener( this ); 22 setSize( 280, 100 ); 23 setVisible( true ); 24 25 public void itemStateChanged(ItemEvent event) 26 if ( event.getSource() = bold ) 27 valBold = bold.isSelected() ? Font.BOLD : Font.PLAIN; 28 if ( event.getSource() = italic ),29 valItalic = italic.isSelected() ? Font.ITALIC :
19、Font.PLAIN; 30 field.setFont( new Font( 隸書, valBold + valItalic, 14 ) ); 31 32 public static void main(String args) 33 new CheckBoxDemo(); 34 35 程序運(yùn)行效果如圖9-5所示。,圖9-5 JCheckBox選擇事件的運(yùn)行效果,2ListSelectionEvent類 JList列表框的事件處理一般可分為兩種:一種是當(dāng)用戶單擊列表框中的某一個(gè)選項(xiàng)并選中它時(shí),將產(chǎn)生List SelectionEvent類的選擇事件,此事件是Swing事件;另一種是當(dāng)用戶雙擊
20、列表框中的某個(gè)選項(xiàng)時(shí),則產(chǎn)生Mouse Event類的事件。 如果希望實(shí)現(xiàn)JList的ListSelectionEvent事件,首先必須聲明實(shí)現(xiàn)監(jiān)聽者對(duì)象的類接口ListSelectionListener,并通過(guò)JList類的addListSelection Listener()方法注冊(cè)文本框的監(jiān)聽者對(duì)象,再在ListSelectionListener接口的valueChanged (List SelectionEvent e)方法中寫入有關(guān)代碼,就可以響應(yīng)List SelectionEvent事件了。,例9-3實(shí)現(xiàn)了JList列表框的ListSelectionEvent事件,其中在JList
21、列表框中可以實(shí)現(xiàn)多選。,例9-3 JListDemo.java 1 import java.awt.*; 2 import java.awt.event.*; 3 import javax.swing.*; 4 import javax.swing.event.*; 5 public class JListDemo extends JFrame implements ListSelectionListener 6 JList list = null; 7 JLabel label = null; 8 String s = 寶馬,奔馳,奧迪,本田,皇冠,福特,現(xiàn)代;,9 public JList
22、Demo() 10 JFrame f = new JFrame(JList Demo); 11 Container contentPane = f.getContentPane(); 12 contentPane.setLayout(new BorderLayout(0,15); 13 label = new JLabel( ); 14 list = new JList(s); 15 list.setVisibleRowCount(5); 16 list.setBorder(BorderFactory.createTitledBorder(汽車品牌:); 17 list.addListSele
23、ctionListener(this); 18 contentPane.add(label,BorderLayout.NORTH);,19 contentPane.add(new JScrollPane(list),BorderLayout.CENTER); 20 f.setSize(300,200); 21 f.setVisible(true); 22 23 public static void main(String args) 24 new JListDemo(); 25 26 public void valueChanged(ListSelectionEvent e) 27 int t
24、mp = 0; 28 String stmp = 您喜歡的汽車品牌有: ;,29 int index = list.getSelectedIndices(); 30 for(int i=0; i index.length ; i+) 31 tmp = indexi; 32 stmp = stmp+stmp+ ; 33 34 label.setText(stmp); 35 36 程序運(yùn)行效果如圖9-6所示。,圖9-6 JList選擇事件的運(yùn)行效果,9.2.3 復(fù)雜布局管理器 1網(wǎng)格包布局(GridBagLayout類) GridBagLayout類局方式是AWT中最靈活,同時(shí)也是最復(fù)雜的一種布局
25、方式。與GridLayout相同,它也是將容器中的組件按照行、列的方式放置,但允許各組件所在的顯示區(qū)域占據(jù)多個(gè)網(wǎng)格。,GridBagLayout類只提供一個(gè)無(wú)參的構(gòu)造函數(shù),建立一個(gè)新的GridBagLayout管理器,因此若要使用GridBagLayout布局就必須用GridBagConstraints與之關(guān)聯(lián)。GridBagLayout外觀管理器實(shí)際上是根據(jù)類GridBagConstraints所給出的條件限制以及組件本身的一些特性條件(例如每個(gè)組件程序允許的最小尺寸)來(lái)決定各個(gè)組件的外觀的。在GridBagLayout中,每個(gè)組件都有一個(gè)GridBagConstraints對(duì)象來(lái)給出它的大
26、小和擺放位置。,當(dāng)GridBagLayout與無(wú)參的GridBagConstraints關(guān)聯(lián)時(shí),此時(shí)它就相當(dāng)于一個(gè)GridLayout,區(qū)別就是用GridLayout布局的組件會(huì)隨著窗口大小的變化而變化,但GridBagLayout布局的組件不會(huì)發(fā)生變化。 類GridBagConstraints中提供了一些相應(yīng)的屬性和常量來(lái)設(shè)置對(duì)組件的空間限制: gridx, gridy gridwidth, gridheight fill ipadx, ipady insets, archor weightx, weighty 1) gridx, gridy(int) gridx(gridy)指明組件顯示區(qū)
27、域左端(上端)在容器中的位置。若為0,則組件處于最左端(最上端)的單元。它是一個(gè)非負(fù)的整數(shù),其缺省值為GridBagConstraints.RELATIVE,表明把組件放在前一個(gè)添加到容器中的組件的右端(下端)。,2) gridwidth, gridheight(int) gridwidth(gridheight)指明組件顯示區(qū)在一行(列)中所占的網(wǎng)格單元數(shù)。它是一個(gè)非負(fù)的整數(shù),其缺省值為1。若其值為GridBagConstraints.REMAINDER,則表明該組件是一行(列)中最后一個(gè)組件;若其值為GridBagConstraints. RELATIVE,則表明該組件緊挨著該行(列)中最
28、后一個(gè)組件。,3) fill(int) fill屬性指明當(dāng)組件所在的網(wǎng)格單元的區(qū)域大于組件所請(qǐng)求的區(qū)域時(shí),是否改變組件的尺寸:是按照水平方向填滿顯示區(qū),還是按垂直方向填滿顯示區(qū)。其取值可為 (1) GridBagConstraints.NONE:缺省值,保持原有尺寸,兩個(gè)方向都不填滿。 (2) GridBagConstraints.HORIZONTAL:按水平方向填滿顯示區(qū),高度不變。 (3) GridBagConstraints.VERTICAL:按垂直方向填滿顯示區(qū),寬度不變。,(4) GridBagConstraints.BOTH:兩個(gè)方向上都填滿顯示區(qū)。 4) ipadx, ipady
29、(int) ipadx指明組件的寬度與指定的最小寬度之間的關(guān)系: 組件的寬度=指定的最小寬度+ipadx*2 其缺省值為0。 ipady指明組件的高度與指定的最小高度之間的關(guān)系: 組件的高度=指定的最小高度+ipady*2 其缺省值為0。,5) insets(Insets) insets指明了組件與其顯示區(qū)邊緣之間的距離,大小由一個(gè)insets對(duì)象指定。insets類的四個(gè)屬性為 (1) top:上端間距。 (2) bottom:下端間距。 (3) left:左端間距。 (4) right:右端間距。 其缺省值為一個(gè)上述四個(gè)屬性值都為0的對(duì)象: new Insets(0, 0, 0, 0);,
30、6) archor(int) archor屬性指明了當(dāng)組件的尺寸小于其顯示區(qū)時(shí),在顯示區(qū)中如何放置該組件的位置。其值可為 (1) GridBagConstraints.CENTER(缺省值)。 (2) GridBagConstraints.NORTH。 (3) GridBagConstraints.NORTHEAST。 (4) GridBagConstraints.EAST。 (5) GridBagConstraints.SOUTHEAST。 (6) GridBagConstraints.SOUTH。 (7) GridBagConstraints.SOUTHWEST。 (8) GridBagC
31、onstraints.WEST。,(9) GridBagConstraints.NORTHWEST。 7) weightx, weighty(double) weightx(weighty)指明當(dāng)容器擴(kuò)大時(shí),如何在行(列)間為組件分配額外的空間。其值可以從0.0到1.0,缺省值為0.0。 若兩者都為0,則所有組件都團(tuán)聚在容器的中央,因?yàn)榇藭r(shí)所有額外空間都添加在網(wǎng)格單元與容器邊緣之間。 數(shù)值越大,表明組件的行或列將占有更多的額外空間。若兩者都為1.0,表明組件的行或列將占有所有的額外空間。 當(dāng)一個(gè)容器的布局方式為GridBagLayout時(shí),往其中添加一個(gè)組件,必須先用GridBagConstr
32、aints設(shè)置該組件的空間限制:,GridBagLayout g = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); setLayout(g); Button b = new Button(Test); /生成組件b /分別設(shè)置c的屬性值 c. gridx= c. gridy= c.fill = g.setConstraints(b, c); /根據(jù)c的值對(duì)組件b進(jìn)行空間限制 add(b);,例9-4中,GridBagLayout獲取GridBagConstraints實(shí)例中的值,為某個(gè)組件設(shè)置了空間限
33、制。當(dāng)往容器中添加了該組件后,該GridBagConstraints實(shí)例還可繼續(xù)用于其他組件,但其值需要做相應(yīng)的調(diào)整。 例9-4 GridBagLayoutDemo.java 1 import java.awt.*; 2 import javax.swing.*; 3 public class GridBagLayoutDemo extends JFrame 4 protected void addbutton(String name,GridBag Layout gridbag, 5 GridBagConstraints c) ,6 JButton button = new JButton(
34、name); 7 gridbag.setConstraints(button, c); 8 getContentPane().add(button); 9 10 public GridBagLayoutDemo() 11 GridBagLayout gridbag = new GridBagLayout(); 12 GridBagConstraints c = new GridBagConstraints(); 13 setFont(new Font(SansSerif, Font.PLAIN, 14); 14 setLayout(gridbag); 15 c.fill = GridBagCo
35、nstraints.BOTH; 16 c.weightx = 1.0;,17 addbutton(Button1, gridbag, c); 18 addbutton(Button2, gridbag, c); 19 addbutton(Button3, gridbag, c); 20 c.gridwidth = GridBagConstraints.REMAINDER; /最后一個(gè)組件 21 addbutton(Button4, gridbag, c); 22 c.weightx = 0.0; /恢復(fù)默認(rèn)值 23 addbutton(Button5, gridbag, c); 24 c.gr
36、idwidth = GridBagConstraints.RELATIVE; /倒數(shù)第二個(gè)組件,25 addbutton(Button6, gridbag, c); 26 c.gridwidth = GridBagConstraints.REMAINDER; /最后一個(gè)組件 27 addbutton(Button7, gridbag, c); 28 c.gridwidth = 1; /恢復(fù)默認(rèn)值 29 c.gridheight = 2; /占據(jù)兩行 30 c.weighty = 1.0; 31 addbutton(Button8, gridbag, c); 32 c.weighty = 0.0
37、;,33 c.gridwidth = GridBagConstraints.REMAINDER; /最后一個(gè)組件 34 c.gridheight = 1; /恢復(fù)默認(rèn)值 35 addbutton(Button9, gridbag, c); 36 addbutton(Button10, gridbag, c); 37 38 public static void main(String args) 39 GridBagLayoutDemo window = new GridBagLayoutDemo(); 40 window.setTitle(GridBagLayout Demo);,41 win
38、dow.pack(); 42 window.setVisible(true); 43 44 程序運(yùn)行效果如圖9-7所示。,圖9-7 GridBagLayout的布局效果,2盒式布局(BoxLayout類) 與前面幾種布局不同的是,BoxLayout是由Swing 提供的布局管理器,功能上同 GridBagLayout一樣強(qiáng)大,而且更加易用。BoxLayout將幾個(gè)組件以水平或垂直的方式組合在一起,即形成行型盒式布局或列型盒式布局。行型盒式布局管理器中添加的組件的上邊同在一條水平線上,如果組件的高度不相等,BoxLayout會(huì)試圖調(diào)整,讓所有組件和最高組件的高度一致。列型盒式布局管理器中添加的組
39、件的左邊同在一條垂直線上,如果組件的寬度不等,BoxLayout會(huì)調(diào)整各組件,使其寬度同最寬組件的寬度一致。其中,各個(gè)組件的大小隨窗口的大小變化而變化。和流布局不同的是,當(dāng)空間不夠時(shí),組件不會(huì)自動(dòng)往下移。,BoxLayout布局的主要構(gòu)造函數(shù)是: BoxLayout(Container target, int axis): 其中,axis是用來(lái)指定組件排列的方式(X_AXIS水平排列;Y_AXIS垂直排列)的。 BoxLayout通常和Box容器聯(lián)合使用。Box的常用方法如表9-6所示。,表9-6 Box的常用方法,對(duì)于表9-6中的方法,可使用三種隱藏的組件間隔: Strut(支柱):用來(lái)在組
40、件之間插入固定的空間。 Glue(膠水):用來(lái)控制一個(gè)框布局內(nèi)額外的空間。 Ridid Area(硬區(qū)域):用來(lái)生成一個(gè)固定大小的區(qū)域。 例9-5是盒式布局的舉例。 例9-5 BoxLayOutDemo.java 1 import java.awt.*; 2 import javax.swing.*; 3 public class BoxLayOutDemo 4 public static void main(String args) 5 MyFrame f=new MyFrame();,6 f.setVisible(true); 7 8 9 class MyFrame extends JFr
41、ame 10 public MyFrame() 11 super(BoxLayout DEMO ); 12 final int NUM=2; 13 setBounds(500,350,300,200); 14 Container c =getContentPane(); 15 c.setLayout(new BorderLayout(20,20); /設(shè)置邊框布局,16 Box boxes = new Box4; /設(shè)置盒式布局 17 boxes0=Box.createHorizontalBox(); 18 boxes1=Box.createVerticalBox(); 19 boxes3=B
42、ox.createHorizontalBox(); 20 boxes2=Box.createVerticalBox(); 21 boxes0.add(Box.createHorizontalGlue(); 22 boxes1.add(Box.createVerticalGlue(); 23 boxes2.add(Box.createVerticalStrut(20); 24 boxes3.add(Box.createHorizontalStrut(30); 25 for(int i=0;iNUM;i+) 26 boxes0.add(new JButton(boxes0:+i);,27 for
43、(int i=0;iNUM;i+) 28 boxes1.add(new JButton(boxes1:+i); 29 for (int i=0;iNUM;i+) 30 boxes2.add(new JButton(boxes2:+i); 31 for (int i=0;iNUM;i+) 32 boxes3.add(new JButton(boxes3:+i); 33 c.add(boxes0,BorderLayout.NORTH); 34 c.add(boxes1,BorderLayout.WEST); 35 c.add(boxes2,BorderLayout.EAST); 36 c.add(
44、boxes3,BorderLayout.SOUTH);,37 38 程序運(yùn)行效果如圖9-8所示。,圖9-8 GridBagLayout的布局效果,9.3 任 務(wù) 實(shí) 施 設(shè)計(jì)注冊(cè)界面布局的方法有多種,此處采取的方法綜合應(yīng)用了網(wǎng)格包布局和盒式布局,如圖9-9所示。,圖9-9 注冊(cè)界面中的的布局管理,例9-6 Register_GUI.java 1 import java.awt.Component; 2 import java.awt.Dimension; 3 import java.awt.Font; 4 import java.awt.GridBagConstraints; 5 import
45、 java.awt.GridBagLayout; 6 import java.awt.Toolkit; 7 import java.awt.event.ActionEvent; 8 import java.awt.event.ActionListener; 9 import javax.swing.BorderFactory; 10 import javax.swing.Box;,11 import javax.swing.ButtonGroup; 12 import javax.swing.JButton; 13 import javax.swing.JComboBox; 14 import
46、 javax.swing.JFrame; 15 import javax.swing.JLabel; 16 import javax.swing.JOptionPane; 17 import javax.swing.JPanel; 18 import javax.swing.JPasswordField; 19 import javax.swing.JRadioButton; 20 import javax.swing.JTextField; 21 import javax.swing.border.Border;,22 import java.util.Vector; 23 public c
47、lass Register_GUI 24 public Register_GUI() 25 RegisterFrame rf = new RegisterFrame(); 26 rf.setVisible(true); 27 28 public static void main(String args) 29 new Register_GUI(); 30 31 32 class RegisterFrame extends JFrame /框架類,33 private Toolkit tool; 34 public RegisterFrame() 35 setTitle(用戶注冊(cè)); 36 to
48、ol = Toolkit.getDefaultToolkit(); 37 Dimension ds = tool.getScreenSize(); 38 int w = ds.width; 39 int h = ds.height; 40 setBounds(w-300)/2,(h-300)/2, 300, 300); 41 setResizable(false); 42 RegisterPanel rp = new RegisterPanel(this); 43 add(rp);,44 45 46 class RegisterPanel extends JPanel implements A
49、ctionListener /容器類 47 private JLabel titlelabel,namelabel,pwdlabel1,pwdlabel2,sexlabel,agelabel,classlabel; 48 private JTextField namefield,agefield; 49 private JPasswordField pwdfield1,pwdfield2; 50 private JButton commitbtn,resetbtn,cancelbtn; 51 private JRadioButton rbtn1,rbtn2;,52 private JCombo
50、Box combo; 53 private Vector v; 54 private GridBagLayout gbl; 55 private GridBagConstraints gbc; 56 private JPanel panel; 57 private Box box; 58 private JFrame iframe; 59 public RegisterPanel(JFrame frame) 60 iframe = frame; 61 titlelabel = new JLabel(用戶注冊(cè)); 62 titlelabel.setFont(new Font(隸書,Font.BO
51、LD,24);,63 namelabel = new JLabel(用戶名:); 64 pwdlabel1 = new JLabel(密 碼:); 65 pwdlabel2 = new JLabel(確認(rèn)密碼:); 66 sexlabel = new JLabel(性 別:); 67 agelabel = new JLabel(年 齡: ); 68 classlabel = new JLabel(所屬班級(jí):); 69 namefield = new JTextField(16); 70 pwdfield1 = new JPasswordField(16); 71 pwdfield1.setEc
52、hoChar(*); 72 pwdfield2 = new JPasswordField(16); 73 pwdfield2.setEchoChar(*);,74 agefield = new JTextField(16); 75 rbtn1 = new JRadioButton(男); 76 rbtn2 = new JRadioButton(女); 77 rbtn1.setSelected(true); 78 ButtonGroup bg = new ButtonGroup(); 79 bg.add(rbtn1); 80 bg.add(rbtn2); 81 v = new Vector();
53、 82 v.add(軟件英語(yǔ)053); 83 v.add(軟件英語(yǔ)052); 84 v.add(軟件英語(yǔ)051);,85 v.add(計(jì)算機(jī)應(yīng)用051); 86 v.add(計(jì)算機(jī)應(yīng)用052); 87 combo = new JComboBox(v); 88 commitbtn = new JButton(注冊(cè)); 89 commitbtn.addActionListener(this); 90 resetbtn = new JButton(重置); 91 resetbtn.addActionListener(this); 92 cancelbtn = new JButton(取消); 93
54、cancelbtn.addActionListener(this); 94 panel = new JPanel(); 95 panel.add(rbtn1);,96 panel.add(rbtn2); 97 Border border = BorderFactory.createTitledBorder(“”); 98 panel.setBorder(border); 99 box = Box.createHorizontalBox(); /添加組件,采用盒式布局 100 box.add(commitbtn); 101 box.add(Box.createHorizontalStrut(30
55、); 102 box.add(resetbtn); 103 box.add(Box.createHorizontalStrut(30); 104 box.add(cancelbtn);,105 gbl = new GridBagLayout(); 106 setLayout(gbl); 107 gbc = new GridBagConstraints(); 108 addCompnent(titlelabel,0,0,4,1); 109 add(Box.createVerticalStrut(20); 110 gbc.anchor=GridBagConstraints.CENTER; 111
56、gbc.fill=GridBagConstraints.HORIZONTAL; 112 gbc.weightx=0; 113 gbc.weighty=100; 114 addCompnent(namelabel,0,1,1,1); 115 addCompnent(namefield,1,1,4,1);,116 addCompnent(pwdlabel1,0,2,1,1); 117 addCompnent(pwdfield1,1,2,4,1); 118 addCompnent(pwdlabel2,0,3,1,1); 119 addCompnent(pwdfield2,1,3,4,1); 120 addCompnent(sexlabel,0,4,1,1); 121 addCo
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 沈丘縣輔警招聘公安基礎(chǔ)知識(shí)考試題庫(kù)及答案
- 動(dòng)火監(jiān)火人安全能力測(cè)試題及答案
- 2025年甘肅省安全員B證考試題庫(kù)附答案
- 高血壓孕婦的全程護(hù)理管理
- 靜脈輸血藥物相互作用與配伍禁忌
- 初中體育教師試題及答案
- 2026魯南技師學(xué)院第一批招聘教師8人備考題庫(kù)附答案
- 上饒高鐵經(jīng)濟(jì)試驗(yàn)區(qū)社區(qū)工作者招聘【16人】參考題庫(kù)必考題
- 中國(guó)水科院巖土所科研助理招聘參考題庫(kù)必考題
- 樂(lè)清市人力資源和社會(huì)保障局關(guān)于公開選調(diào)2名下屬事業(yè)單位工作人員的參考題庫(kù)必考題
- 焊工焊接協(xié)議書(2篇)
- 蘇教版六年級(jí)數(shù)學(xué)上冊(cè)全套試卷
- 培訓(xùn)機(jī)構(gòu)轉(zhuǎn)課協(xié)議
- 河道治理、拓寬工程 投標(biāo)方案(技術(shù)方案)
- 創(chuàng)客教室建設(shè)方案
- 政治審查表(模板)
- 《最奇妙的蛋》完整版
- SEMI S1-1107原版完整文檔
- 內(nèi)蒙古衛(wèi)生健康委員會(huì)綜合保障中心公開招聘8人模擬預(yù)測(cè)(共1000題)筆試備考題庫(kù)及答案解析
- 2023年中級(jí)財(cái)務(wù)會(huì)計(jì)各章作業(yè)練習(xí)題
- 金屬罐三片罐成型方法與罐型
評(píng)論
0/150
提交評(píng)論