Java課件一第10章.ppt_第1頁
Java課件一第10章.ppt_第2頁
Java課件一第10章.ppt_第3頁
Java課件一第10章.ppt_第4頁
Java課件一第10章.ppt_第5頁
已閱讀5頁,還剩80頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第10章 常用組件GUI設(shè)計(jì),10.1 Swing概述 10.2 事件響應(yīng)原理 10.3 JLable組件 10.4 JButton組件與JToggleButton組件 10.5 JCheckBox和JRadioButton組件 10.6 JComboBox組件 10.7 JList組件 10.8 JTextField與JTextArea組件,圖10.1 圖形用戶界面中常用的組件,10.1.1 Swing中常用的包 由于Swing功能相當(dāng)強(qiáng)大且復(fù)雜,考慮到功能分解的原則,Java系統(tǒng)將Swing按不同的功能分為表10.1所示的若干個(gè)包,它們分別針對于不同的組件及事件。,10.1 Swing 概

2、 述,表10.1 Swing中常用的包,10.1.2 常用組件的繼承關(guān)系 本章所述組件的繼承關(guān)系如下: java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent javax.swing.JLabel,javax.swing.JTextField javax.swing.JTextArea javax.swing.JList javax.swing.JComboBox javax.swing.AbstractButton javax.swing.JButton javax.swing.JToggle

3、Button javax.swing.JCheckBox javax.swing. JRadioButton,10.2 事件響應(yīng)原理,10.2.1 委托事件模型 Java采用委托事件模型來處理事件。委托事件模型的特點(diǎn)是將事件的處理委托給獨(dú)立的對象,而不是組件本身,從而將使用者界面與程序邏輯分開。整個(gè)“委托事件模型”由產(chǎn)生事件的對象(事件源)、事件對象及監(jiān)聽者對象之間的關(guān)系所組成。,在事件產(chǎn)生時(shí),產(chǎn)生事件的對象將與該事件相關(guān)的信息封裝在一個(gè)稱為“事件對象”的對象中,并將該對象傳遞給監(jiān)聽者對象,監(jiān)聽者對象根據(jù)該事件對象內(nèi)的信息決定適當(dāng)?shù)奶幚矸绞?。監(jiān)聽者對象要收到事件發(fā)生的通知,必須在程序代碼中向產(chǎn)

4、生事件的對象注冊,當(dāng)事件產(chǎn)生時(shí),產(chǎn)生事件的對象就會(huì)主動(dòng)通知監(jiān)聽者對象,監(jiān)聽者對象就可以根據(jù)產(chǎn)生該事件的對象來決定處理事件的方法。 監(jiān)聽者對象(listener)就是用來處理事件的對象。監(jiān)聽者對象等候事件的發(fā)生,并在事件發(fā)生時(shí)收到通知。,10.2.2 Swing組件的事件及監(jiān)聽者 不同事件源上發(fā)生的事件種類不同,不同的事件由不同的監(jiān)聽者處理。表10.2列出了Swing中各種組件可激發(fā)的事件及事件監(jiān)聽者之間的對應(yīng)關(guān)系。表10.3列出了Swing提供的各事件監(jiān)聽者與各事件類成員方法之間的關(guān)系。請讀者務(wù)必注意:對應(yīng)不同事件需要不同的事件監(jiān)聽者,而每個(gè)事件監(jiān)聽者都有相應(yīng)的成員方法,我們處理事件的程序代碼

5、要寫在對應(yīng)的成員方法體中。,表10.2 Swing中組件、事件及事件監(jiān)聽者之間的對應(yīng)關(guān)系,表10.2 Swing中組件、事件及事件監(jiān)聽者之間的對應(yīng)關(guān)系,表10.3 Swing提供的各監(jiān)聽者與各事件類成員方法之間的關(guān)系,表10.3 Swing提供的各監(jiān)聽者與各事件類成員方法之間的關(guān)系,10.2.3 Java.awt事件類繼承關(guān)系 Java語言提供了一組事件類來處理不同對象產(chǎn)生的事件。Java.awt事件類的繼承關(guān)系如下: java.awt.Object java.util.Event Java.util.Event.Object . java.awt.AWTEvent java.awt.even

6、t.ActionEvent. java.awt.event.AdjustmentEvent java.awt.event.InvocationEvent,java.awt.event.ItemEvent java.awt.event.TextEvent java.awt.event.ComponentEvent java.awt.event.ContainerEvent java.awt.event.FocusEvent java.awt.event.PaintEvent java.awt.event.WindowEvent java.awt.event.InputEvent java.awt

7、.event.KeyEvent java.awt.event.MouseEvent,10.2.4 AWT中的事件與事件監(jiān)聽者 Swing并不是用來取代原有的AWT的,事實(shí)上當(dāng)我們使用Swing組件時(shí)常常還是需要使用AWT功能的。例如,鼠標(biāo)和鍵盤操作、窗口的變化、組件的增加或刪除等都是比較低層的事件,對于這些事件我們必須使用AWT包提供的處理方法來處理。 所有的Swing組件都是java.awt.Component的子類,它們具有如下繼承關(guān)系: java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponen

8、t javax.swing的各種swing組件,所以,可以利用java.awt.Component類與java.awt.Container類提供的事件及事件監(jiān)聽者來處理諸如鼠標(biāo)和鍵盤操作等低層事件。 表10.4列出了java.awt.Component與java.awt.Container類提供的事件與事件監(jiān)聽者之間的關(guān)系。表10.5列出了各事件監(jiān)聽者與各成員方法之間的對應(yīng)關(guān)系。同理,對于AWT中的不同事件需要不同的事件監(jiān)聽者,而每個(gè)監(jiān)聽者都有相應(yīng)的成員方法,我們處理事件的程序代碼要寫在對應(yīng)的成員方法體中。,表10.4 Component類與Container類提供的事件 與事件監(jiān)聽者之間的關(guān)

9、系,表10.5 AWT的各事件監(jiān)聽者與各成員方法之間的關(guān)系,表10.5 AWT的各事件監(jiān)聽者與各成員方法之間的關(guān)系,10.3 JLable 組 件,JLable組件被稱為標(biāo)簽,它是一個(gè)靜態(tài)組件,也是標(biāo)準(zhǔn)組件中最簡單的一個(gè)組件。每個(gè)標(biāo)簽用一個(gè)標(biāo)簽類的對象表示,可以顯示一行靜態(tài)文本。標(biāo)簽只起信息說明的作用,而不接受用戶的輸入,也無事件響應(yīng)。 創(chuàng)建標(biāo)簽JLable類對象的構(gòu)造方法如表10.6所示。,表10.6 JLable類對象的構(gòu)造方法,表10.7 JLable類常用成員方法,10.4 JButton組件與JToggleButton組件,JButton組件與JToggleButton組件通常被稱為

10、按鈕,它是一個(gè)具有按下、抬起兩種狀態(tài)的組件。用戶可以指定按下按鈕(單擊事件)時(shí)所執(zhí)行的操作(事件響應(yīng))。按鈕上通常有一行文字(標(biāo)簽)或一個(gè)圖標(biāo)以表明它的功能。此外,Swing組件中的按鈕還可以實(shí)現(xiàn)下述效果:,(1) 改變按鈕的圖標(biāo),即一個(gè)按鈕可以有多個(gè)圖標(biāo),可根據(jù)Swing按鈕所處的狀態(tài)而自動(dòng)變換不同的圖標(biāo)。 (2) 為按鈕加入提示,即當(dāng)鼠標(biāo)在按鈕上稍做停留時(shí),在按鈕邊可出現(xiàn)提示,當(dāng)鼠標(biāo)移出按鈕時(shí),提示自動(dòng)消失。 (3) 在按鈕上設(shè)置快捷鍵。 (4) 設(shè)置默認(rèn)按鈕,即通過回車鍵運(yùn)行此按鈕的功能。,10.4.1 AbstractButton類的常用成員方法,表10.8 AbstractButto

11、n類常用成員方法,表10.8 AbstractButton類常用成員方法,10.4.2 JButton類的構(gòu)造方法 按鈕可分為有、無標(biāo)簽的和有、無圖標(biāo)的等幾種情況,因此,系統(tǒng)提供了表10.10所示的JButton類的構(gòu)造方法來創(chuàng)建這幾種按鈕對象。,表10.9 JButton類構(gòu)造方法,10.4.3 JToggleButton類的構(gòu)造方法 JToggleButton按鈕與JButton按鈕的區(qū)別僅在于:當(dāng)按下JButton按鈕并釋放鼠標(biāo)后,按鈕會(huì)自動(dòng)彈起;按下JToggleButton按鈕并釋放鼠標(biāo)后,按鈕不會(huì)自動(dòng)彈起,除非再按一次。表10.10列出了JToggleButton類的構(gòu)造方法。,表

12、10.10 JToggleButton類構(gòu)造方法,10.4.4 ActionEvent事件及其響應(yīng) 按照J(rèn)ava的委托事件模型,當(dāng)我們在所設(shè)計(jì)的用戶界面上按下一個(gè)按鈕時(shí)會(huì)激發(fā)一個(gè)事件,這個(gè)事件稱為動(dòng)作事件。動(dòng)作事件由AWT的ActionEvent類的方法來處理。 1動(dòng)作事件 ActionEvent類含有ACTION_PERFORMED事件,它是引發(fā)某個(gè)動(dòng)作的執(zhí)行事件。能觸發(fā)這個(gè)事件的動(dòng)作包括:單擊按鈕;雙擊一個(gè)列表中的選項(xiàng);選擇菜單項(xiàng);在文本框中輸入回車等。,2ActionEvent類可使用的主要方法 getSource( )方法:用來獲取引發(fā)事件的對象名。 getActionCommand(

13、 )方法:用來獲取對象的標(biāo)簽或事先為這個(gè)對象設(shè)置的命令名。 getSource( )方法是EventObject類提供的,getActionCommand( )方法是ActionEvent類提供的。由于ActionEvent類繼承了EventObject類,因此,ActionEvent類可以使用這兩個(gè)方法。,3事件響應(yīng) 當(dāng)用戶點(diǎn)擊對象時(shí),就會(huì)引發(fā)ActionEvent類代表的動(dòng)作事件。例如,下面的語句: 對象名.addActionListener(this); 注冊事件源對象的監(jiān)聽者對象為this,而且要求this對象的類必須聲明該類并實(shí)現(xiàn)ActionListener接口。當(dāng)事件發(fā)生時(shí),引發(fā)的

14、事件將被此事件的監(jiān)聽者監(jiān)聽到,并引用ActionListener的actionPerformed(ActionEvent e)方法響應(yīng)動(dòng)作事件。在此方法體中可以引用ActionEvent事件的getSource( )方法來獲取引發(fā)事件的對象,也可以引用getActionCommand( )方法來獲取對象標(biāo)簽或事先為這個(gè)對象設(shè)置的命令名。用戶可在actionPerformed( )方法體中寫入處理此事件的程序代碼。,10.4.5 應(yīng)用舉例 【示例程序c10_1.java】 編寫一個(gè)單擊按鈕時(shí)改變標(biāo)簽文本與按鈕文本的內(nèi)容的程序。 import java.awt.*; import javax.sw

15、ing.*; import java.awt.event.*; /聲明該類實(shí)現(xiàn)ActionListener 接口,監(jiān)聽者對象是c10_1類的對象 public class c10_1 extends JApplet implements ActionListener /JApplet是Applet的子類, Container cp=getContentPane( ); /創(chuàng)建窗口容器對象 Icon ro=new ImageIcon(g1.gif); /創(chuàng)建圖標(biāo)對象 Icon ge=new ImageIcon(g2.gif); Icon pr=new ImageIcon(g3.gif); JBu

16、tton bt=new JButton( ); /創(chuàng)建按鈕對象 Icon icon=new ImageIcon(g4.jpg); JLabel lb=new JLabel(Java,icon,JLabel.CENTER); /創(chuàng)建標(biāo)簽對象 public void init( ) ,bt.setRolloverEnabled(true); /將按鈕圖標(biāo)變化功能打開 bt.setText(OK); /添加按鈕文本 bt.setHorizontalTextPosition(JLabel.CENTER); /將按鈕文字放在圖標(biāo)中間 bt.setVerticalTextPosition(JLabel.B

17、OTTOM); /設(shè)置按鈕文字在圖標(biāo)下方 cp.add(lb,BorderLayout.NORTH); /添加標(biāo)簽在JApplet界面的北部位置上 cp.add(bt,BorderLayout.SOUTH); bt.setIcon(ge); /設(shè)置鼠標(biāo)離開按鈕的圖標(biāo) bt.setRolloverIcon(ro); /設(shè)置鼠標(biāo)在按鈕上的圖標(biāo) bt.setPressedIcon(pr); /設(shè)置鼠標(biāo)按下按鈕的圖標(biāo) bt.addActionListener(this); /注冊bt的監(jiān)聽者對象this ,/ actionPerformed( )方法在單擊bt時(shí)被系統(tǒng)自動(dòng)調(diào)用 public void

18、actionPerformed(ActionEvent e) if(e.getSource( )=bt) /判斷動(dòng)作事件是否由bt1引發(fā)的 if(lb.getText( )=Hello) /修改標(biāo)簽文本 lb.setText(“你好!”); else lb.setText(Hello); if(bt.getText( )=OK) /修改按鈕文本 bt.setText(確定); else bt.setText(OK); ,圖10.2 程序c10_1的運(yùn)行結(jié)果,程序說明: (1) javax.swing.JApplet是java.awt.Applet的子類,當(dāng)向JApplet中添加Swing組件時(shí)

19、要使用JApplet的getContentPane( )方法獲得一個(gè)Container對象,再引用這個(gè)Container對象的add( )方法將JComponent及其子類對象添加到JApplet中。 (2) 程序中創(chuàng)建的按鈕有一個(gè)圖標(biāo),根據(jù)鼠標(biāo)的移動(dòng)來改變圖標(biāo)。,(3) 當(dāng)單擊一個(gè)按鈕時(shí),按鈕為監(jiān)聽者對象發(fā)送一個(gè)稱為“動(dòng)作事件”的事件對象。產(chǎn)生事件的按鈕是事件源,通常說這個(gè)按鈕激活一個(gè)事件。在這個(gè)程序中,bt是事件源,為了能夠讓按鈕知道為哪個(gè)監(jiān)聽對象發(fā)送動(dòng)作事件對象,必須注冊按鈕的監(jiān)聽者對象。我們通過調(diào)用按鈕對象的addActionListener( )方法來實(shí)現(xiàn),即bt.addAction

20、Listener(this),其中this為監(jiān)聽者對象,即c10_1類的對象(通常把包含事件源的對象作為監(jiān)聽對象)。為了把c10_1類指定為一個(gè)動(dòng)作監(jiān)聽對象,必須聲明該類實(shí)現(xiàn)ActionListener接口,即 public class c10_1 extends JApplet implements ActionListener,其中,ActionListener 接口僅僅包含了一個(gè)抽象方法actionPerformed( )。ActionEvent的對象e代表一個(gè)動(dòng)作事件,并且支持那些用來發(fā)現(xiàn)所產(chǎn)生事件的特征的方法。 當(dāng)按鈕激活一個(gè)動(dòng)作事件時(shí),則此按鈕引發(fā)的事件將被此事件的監(jiān)聽者監(jiān)聽到并調(diào)

21、用actionPerformed(ActionEvent e)方法對該事件進(jìn)行處理。 在方法體中調(diào)用e.getSource( )方法來獲取引發(fā)事件的按鈕對象。,(4) 把組件放到用戶希望的位置,在Java語言中是通過布局來實(shí)現(xiàn)的。JApplet界面上的默認(rèn)布局是BordLayout布局,它將界面劃分為東、南、西、北、中五個(gè)區(qū)域,我們把組件添加到JApplet界面時(shí),可以將組件放在這五個(gè)區(qū)域的任一位置上。更復(fù)雜的內(nèi)容我們將在后面的章節(jié)介紹。 (5) 程序中使用了AbstractButton類的成員方法,詳細(xì)描述見表10.8。,10.5 JCheckBox和JRadioButton組件,JChec

22、kBox組件被稱為復(fù)選框(也稱檢測框),它提供 “選中/ON”和“未選中/OFF”兩種狀態(tài)。用戶點(diǎn)擊某復(fù)選框就會(huì)改變該復(fù)選框原有的狀態(tài)。,JRadioButton組件被稱為選項(xiàng)按鈕,在Java中JRadioButton組件與JCheckBox組件功能完全一樣,只是圖形不同,復(fù)選框?yàn)榉叫螆D標(biāo),選項(xiàng)按鈕為圓形圖標(biāo)。由于目前所使用軟件的RadioButton多為單選按鈕,即在同類的一組組件中,用戶只能選擇其中之一為ON,其余為OFF。Java為了與其他系統(tǒng)一致,專門提供了javax.swing.ButtonGroup類,這個(gè)類的功能就是實(shí)現(xiàn)諸如JRadioButton、JRadioButtonMen

23、uItem與JToggleButton等組件的多選一功能。ButtonGroup類可被AbstractButton類的子類所使用。,10.5.1 JCheckBox類的構(gòu)造方法,表10.11 JCheckBox類構(gòu)造方法,10.5.2 JRadioButton的構(gòu)造方法,表10.12 JRadioButton類構(gòu)造方法,10.5.3 ItemEvent事件 1選擇事件 ItemEvent類只包含一個(gè)事件ITEM_STATE_CHANGED,引發(fā)這類事件的動(dòng)作包括: (1) 改變復(fù)選框JCheckbox對象的選中或不選中狀態(tài); (2) 改變單選按鈕JRadioButton對象的選中或不選中狀態(tài);

24、 (3) 改變下拉列表框JComboBox對象中選項(xiàng)的選中或不選中狀態(tài); (4) 改變菜單項(xiàng)JMenuItem對象中選項(xiàng)的選中或不選中狀態(tài); (5) 改變JCheckboxMenuItem對象中選項(xiàng)的選中或不選中狀態(tài)。,2ItemEvent類的主要方法 (1) ItemSelectable getItemSelectable( )。getItemSelectable( )方法返回引發(fā)選中狀態(tài)變化的事件源,例如JCheckbox對象。能引發(fā)選中狀態(tài)變化的事件都必須是實(shí)現(xiàn)了ItemSelectable接口類的對象,該方法的返回值就是這些類的對象的引用。此外,ItemEvent類的事件也可以使用其父

25、類EventObject類提供的getSource( )方法返回引發(fā)選中狀態(tài)變化的事件源。,(2) Object getItem( )。getItem( )方法返回引發(fā)選中狀態(tài)變化事件的具體選擇項(xiàng),例如JComboBox中的具體item。通過調(diào)用這個(gè)方法可以知道用戶選中了哪個(gè)選項(xiàng)。 (3) int getStateChange( )。getStateChange( )方法返回此組件到底有沒有被選中。它的返回值是一個(gè)整型值,通常用ItemEvent類的靜態(tài)常量SELECTED(代表選項(xiàng)被選中)和DESELECTED(代表選項(xiàng)被放棄或不選)來表達(dá)。,3事件響應(yīng) 當(dāng)用戶點(diǎn)擊對象使其選中狀態(tài)發(fā)生變化時(shí)

26、,就會(huì)引發(fā)ItemEvent類代表的選擇事件。例如下面的語句: 對象名.addItemListener(this); 注冊事件源對象的監(jiān)聽者對象為this,而且要求this對象的類必須聲明該類實(shí)現(xiàn)ItemListener接口。當(dāng)事件發(fā)生時(shí),引發(fā)的事件將被此事件的監(jiān)聽者監(jiān)聽到,并引用ItemListener中的itemStateChanged(ItemEvent e)方法響應(yīng)對象的狀態(tài)改變。在此方法體中,引用ItemEvent事件的e.getItemSelectable( )方法以獲得引發(fā)選擇事件的事件源對象,再引用getStateChange( )方法獲取選擇事件之后的狀態(tài)。用戶在itemSt

27、ateChanged( )方法體中編寫處理事件的程序代碼。,10.5.4 應(yīng)用舉例 【示例程序c10_2.java】 根據(jù)復(fù)選框及選擇按鈕來改變標(biāo)簽組件的文本大小及顏色。 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class c10_2 extends JApplet implements ItemListener,ActionListener int i1=0,i2=0,i3=0; int fonti=10;,Font font; Container ctp=getContentPane(

28、 ); JLabel lb=new JLabel(請選擇); JCheckBox cb1,cb2,cb3; /聲明復(fù)選框?qū)ο?JRadioButton r1,r2,r3; /聲明按鈕對象 ButtonGroup bg=new ButtonGroup( ); /創(chuàng)建按鈕組對象,實(shí)現(xiàn)JRadioButton多選一功能 public void init( ) ctp.setLayout(new FlowLayout( ); /設(shè)置布局方式為流式布局 cb1=new JCheckBox(紅色,false); /創(chuàng)建復(fù)選框 cb1.addItemListener(this); /注冊cb給監(jiān)聽者this

29、,ctp.add(cb1); /添加復(fù)選框在界面上 cb2=new JCheckBox(綠色,false); cb2.addItemListener(this); ctp.add(cb2); cb3=new JCheckBox(藍(lán)色,false); cb3.addItemListener(this); ctp.add(cb3); r1=new JRadioButton(10); r1.addActionListener(this); ctp.add(r1); /加載按鈕到界面上,r2=new JRadioButton(16); r2.addActionListener(this); ctp.a

30、dd(r2); r3=new JRadioButton(24); r3.addActionListener(this); ctp.add(r3); bg.add(r1); /加載按鈕到按鈕組 bg.add(r2); bg.add(r3); ctp.add(lb); /加載標(biāo)簽到界面上 ,public void itemStateChanged(ItemEvent e) JCheckBox cbx=(JCheckBox)e.getItem( ); if (cbx.getText( )=紅色) if(e.getStateChange( )=e.SELECTED)i1=255; /判斷組件是否被選

31、else i1=0; if (cbx.getText( )=綠色) if(e.getStateChange( )=e.SELECTED)i2=255; else i2=0; if (cbx.getText( )=藍(lán)色) if(cbx.isSelected( )i3=255; /判斷組件是否被選 else i3=0; font=new Font(宋體,Font.BOLD,fonti); lb.setFont(font); lb.setForeground(new Color(i1,i2,i3); ,public void actionPerformed(ActionEvent e) String

32、 rbt=e.getActionCommand( ); if (rbt=10) fonti=10; else if (rbt=16) fonti=16; else fonti=24; font=new Font(宋體,Font.BOLD,fonti); lb.setFont(font); lb.setForeground(new Color(i1,i2,i3); ,圖10.3 程序c10_2的運(yùn)行結(jié)果,10.6 JComboBox組件,10.6.1 JComboBox類的構(gòu)造方法及成員方法,表10.13 JComboBox類的構(gòu)造方法和常用成員方法,10.6.2 事件響應(yīng) JComboBox組

33、件能夠響應(yīng)的事件分為選擇事件與動(dòng)作事件。若用戶選取下拉列表中的選擇項(xiàng)時(shí),則激發(fā)選擇事件,使用ItemListener事件監(jiān)聽者進(jìn)行處理;若用戶在JComboBox上直接輸入選擇項(xiàng)并回車時(shí),則激發(fā)動(dòng)作事件,使用ActionListener事件監(jiān)聽者進(jìn)行處理。 下面通過一個(gè)具體的程序來說明按鈕的事件響應(yīng)。,【示例程序c10_3.java】 在JComboBox組件中添加4個(gè)學(xué)生的名字選項(xiàng),當(dāng)點(diǎn)擊下拉列表選擇項(xiàng)時(shí)得到學(xué)生的名字,將他的成績用標(biāo)簽文本顯示。 import javax.swing.*; import java.awt.*; import java.awt.event.*; public

34、class c10_3 extends JApplet implements ItemListener Container ctp=getContentPane( ); JLabel lb1=new JLabel(姓名:), lb2=new JLabel(英語:),lb3=new JLabel( ); String name =李林,趙欣,張揚(yáng),童梅, score =80,104,75,87; JComboBox cbx=new JComboBox( ); /創(chuàng)建下拉式列表框?qū)ο?public void init( ) ctp.setLayout(new FlowLayout( ); /設(shè)置流

35、式布局 for (int j=0;jname.length;j+) /添加選項(xiàng)到下拉式列表框?qū)ο笾?cbx.addItem(namej); ctp.add(lb1); ctp.add(cbx); /添加下拉式列表框?qū)ο蟮饺萜魃?cbx.addItemListener(this); /注冊cbx給監(jiān)聽對象 ctp.add(lb2); ctp.add(lb3); public void itemStateChanged(ItemEvent e) int c=0; String str=(String)e.getItem( ); /獲取所選項(xiàng)給str for(int i=0;iname.length

36、;i+) if(str=namei) /判斷str是否是name數(shù)組中某個(gè)元素的內(nèi)容 c=cbx.getSelectedIndex( ); /將該選項(xiàng)的下標(biāo)給c lb3.setText(scorec); /獲取該學(xué)生的成績 ,程序說明: 下拉式列表框產(chǎn)生ItemEvent代表的選擇事件。該程序中的語句cbx.addItemListener(this);表示注冊JComboBox類的對象cbx給監(jiān)聽者對象。當(dāng)用戶單擊下拉列表的某個(gè)選項(xiàng)時(shí),系統(tǒng)自動(dòng)產(chǎn)生一個(gè)包含這個(gè)事件有關(guān)信息的ItemEvent類的對象e,并把該對象作為實(shí)際參數(shù)傳遞給被自動(dòng)調(diào)用的監(jiān)聽者的選擇事件響應(yīng)方法:itemStateChan

37、ged(ItemEvent e)。在這個(gè)方法中通過調(diào)用ItemEvent 事件的方法e.getItem( )獲得引發(fā)當(dāng)前選擇事件的下拉列表事件源(被選中的項(xiàng)),再調(diào)用getSelectedIndex( )獲取該選項(xiàng)的下標(biāo)值,從而得到name數(shù)組的下標(biāo)值,最終將這個(gè)元素的內(nèi)容作為新的標(biāo)簽文本輸出。,圖10.4 c10_3運(yùn)行結(jié)果,10.7 JList 組 件,JList稱為列表組件,它將所有選項(xiàng)放入列表框中。如果將JList放入滾動(dòng)面板(JScrollPane)中,則會(huì)出現(xiàn)滾動(dòng)菜單效果。利用JList提供的成員方法,用戶可以指定顯示在列表框中的選項(xiàng)個(gè)數(shù),而多余的選項(xiàng)則可通過列表的上下滾動(dòng)來顯現(xiàn)。

38、 JList組件與JComboBox組件的最大區(qū)別是:JComboBox組件一次只能選擇一項(xiàng),而JList組件一次可以選擇一項(xiàng)或多項(xiàng)。選擇多項(xiàng)時(shí)可以是連續(xù)區(qū)間選擇(按住Shift鍵進(jìn)行選擇),也可以是不連續(xù)的選擇(按住Ctrl鍵進(jìn)行選擇)。,10.7.1 JList類的構(gòu)造方法及成員方法,表10.14 JList類的構(gòu)造方法和成員方法,10.7.2 ListSelectionEvent事件 JList組件的事件處理一般可分為兩種:一種是當(dāng)用戶單擊列表框中的某一個(gè)選項(xiàng)并選中它時(shí),將產(chǎn)生ListSelectionEvent類的選擇事件,此事件是Swing的事件;另一種是當(dāng)用戶雙擊列表框中的某個(gè)選項(xiàng)

39、時(shí),則產(chǎn)生MouseEvent類的動(dòng)作事件。JList類通過locatToindex( )方法來得知是單擊還是雙擊。 若希望實(shí)現(xiàn)JList的ListSelectionEvent事件,首先必須聲明實(shí)現(xiàn)監(jiān)聽者對象的類接口ListSelectionListener,并通過JList類的addListSelectionListener( )方法注冊文本框的監(jiān)聽者對象,再在ListSelectionListener接口的valueChanged (ListSelectionEvent e)方法體中寫入有關(guān)代碼,就可以響應(yīng)ListSelectionEvent事件了。下面通過示例程序來加以說明。,【示例程序

40、c10_4.java】 設(shè)置一個(gè)JLabel組件和JList組件,點(diǎn)擊列表框中的選項(xiàng),將所選項(xiàng)的值作為JLabel組件的文本輸出。 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class c10_4 extends JApplet implements ListSelectionListener JList lis=null; JLabel lb=null;,String s=小學(xué),初中,高中,大學(xué),研究生; public void in

41、it( ) Container cp=getContentPane( ); cp.setLayout(new BorderLayout( ); lb=new JLabel( ); lis=new JList(s); lis.setVisibleRowCount(3); /設(shè)置列表框的可見選項(xiàng)行數(shù),選項(xiàng)超過則出現(xiàn)滾動(dòng)條 lis.setBorder(BorderFactory.createTitledBorder(請選擇);/設(shè)置列表框的邊框文本,lis.addListSelectionListener(this); /注冊lis給監(jiān)聽者對象 cp.add(lb,BorderLayout.NORT

42、H); /將lis對象放入滾動(dòng)容器,再將此容器加載到界面上。 cp.add(new JScrollPane(lis),BorderLayout.CENTER); public void valueChanged(ListSelectionEvent e) int m=0; String str=選取的是:; /取得所有選項(xiàng)的下標(biāo)值給index數(shù)組,int index = lis.getSelectedIndices( ); for(int i=0;iindex.length;i+) /根據(jù)取得的下標(biāo)值,找到相應(yīng)的數(shù)組元素 m=indexi; str=str+sm+ ; lb.setText(s

43、tr);/輸出選中項(xiàng)的值 ,上述程序中的語句: lis.addListSelectionListener(this); 表示把lis注冊給ListSelectionEvent的監(jiān)聽者ListSelectionListener。當(dāng)用戶單擊某個(gè)選項(xiàng)時(shí),系統(tǒng)會(huì)自動(dòng)引用ListSelectionListener的valueChanged( )方法來處理選項(xiàng)的改變。 程序c10_4的運(yùn)行結(jié)果見圖10.5。,圖10.5 程序c10_4的運(yùn)行結(jié)果,10.8 JTextField與JTextArea組件,10.8.1 JTextField組件的構(gòu)造方法及成員方法 JtextField被稱為文本框。它定義了一個(gè)

44、單行條形文本區(qū),可以輸出任何基于文本的信息,也可以接受用戶的輸入。表10.15列出了JTextField類的構(gòu)造方法和成員方法。,表10.15 JTextField類構(gòu)造方法和成員方法,10.8.2 JTextArea組件的構(gòu)造方法及成員方法 JTextArea被稱為文本域。它與文本框的主要區(qū)別是:文本框只能輸入/輸出一行文本,而文本域可以輸入/輸出多行文本。表10.16列出了JTextArea類的構(gòu)造方法和成員方法。,表10.16 JTextArea類構(gòu)造方法和成員方法,10.8.3 事件處理 JTextField類只引發(fā)ActionEvent事件,當(dāng)用戶在文本框中按回車鍵時(shí)引發(fā)。JTextArea的事件響應(yīng)由JTextComponent類決定。 JTextComponent類可以引發(fā)兩種事件:DocumentEvent事件與UndoableEditEvent事件。當(dāng)用戶修改了文本區(qū)域中的文本,如做文本的增、刪、改等操作時(shí),TextComponent類將引發(fā)DocumentEvent事件;當(dāng)用戶在文本區(qū)域上撤消所做的增、刪、改時(shí),TextComponent類將引發(fā)UndoableEditEvent

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論