java教程課件第八章7_第1頁(yè)
java教程課件第八章7_第2頁(yè)
java教程課件第八章7_第3頁(yè)
java教程課件第八章7_第4頁(yè)
java教程課件第八章7_第5頁(yè)
已閱讀5頁(yè),還剩92頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第八章Applet與圖形用戶界面(續(xù)1)七、圖形用戶界面的標(biāo)準(zhǔn)組件抽象窗口工具包

AWT

是一個(gè)袖珍窗口庫(kù),也是

Java

環(huán)境的標(biāo)準(zhǔn)成份,它提供設(shè)計(jì)窗口系統(tǒng)所需要的一些基本組件,這些組件都是

Component

這個(gè)基本類的子類,如下圖所示。ComponentButtonCanvasCheckboxContainerLabelListPanelWindowsDialogFrameScrollbarTextFieldTextAreaTextComponent(一)基本控制組件使用基本控制組件的步驟:1、某種創(chuàng)建某種基本控制組件類的新對(duì)象,指定該對(duì)象的屬性,如外觀、大小等。2、將該組件對(duì)象加入到某個(gè)容器的合適位置。3、創(chuàng)建該組件對(duì)象的監(jiān)聽(tīng)者,即實(shí)現(xiàn)以該組件為事件源的事件對(duì)應(yīng)的監(jiān)聽(tīng)者接口,也可以使現(xiàn)有的類實(shí)現(xiàn)該接口成為監(jiān)聽(tīng)者。

Component類是所有組件類和容器類的父類,其中定義了一些每個(gè)容器和組件都可能用到的方法,較常用的有:1、publicvoidadd(PopupMenupopup)

//在組件上加入一些彈出菜單,當(dāng)用戶用鼠標(biāo)右鍵單擊組件時(shí)將彈出這個(gè)菜單。2、publicColorgetBackground()

//獲得組件的背景色3、publicFontgetFont()

//獲得組件使用的字體4、publicColorgetForeground()

//獲得組件的前景色5、publicGraphicsgetGraphics()

//獲得在組件上繪圖時(shí)需要使用的Graphics對(duì)象6、publicvoidrepaint(intx,inty,inywidth,intheigth)

//以指定的坐標(biāo)點(diǎn)(x,y)為左上角,重畫組件指定寬度、指定高度的區(qū)域7、publicvoidsetBackground(Colorc)

//設(shè)置組件的背景色8、publicvoidsetEnabled(booleanb)

//獲得組件的使能狀態(tài)。只有使能狀態(tài)的組件才能接受用戶輸入并引發(fā)事件9、publicvoidsetFont(Fontf)

//設(shè)置組件使用的字體10、publicvoidsetSize(intwidth,intweight)

//設(shè)置組件的大小11、publicvoidsetVisible(booleanb)

//設(shè)置組件是否可見(jiàn)的屬性。參數(shù)b為真時(shí),組件在包括它的容器可見(jiàn)時(shí)也可見(jiàn);否則組件不可見(jiàn)12、publicvoidsetForeground(Colorc)

//獲得組件的前景色13、publicvoidrequestFocus()

//使組件獲得注意的焦點(diǎn)標(biāo)簽、按鈕與動(dòng)作事件

1、標(biāo)簽(Label)

是用戶不能修改只能查看其內(nèi)容的文本顯示區(qū)域,它起到信息說(shuō)明的作用。

創(chuàng)建標(biāo)簽要求:創(chuàng)建標(biāo)簽對(duì)象時(shí)應(yīng)同時(shí)說(shuō)明這個(gè)標(biāo)簽中的字符串。

常用方法setText(新字符串)//用字符串修改標(biāo)簽上的文本getText()//獲得標(biāo)簽對(duì)象上的文本內(nèi)容

產(chǎn)生事件

不能接受用戶的輸入,故不能引發(fā)事件,不是事件源。

2、按鈕(Button)按鈕本身不顯示信息,它一般對(duì)應(yīng)一個(gè)事先定義好的功能操作,并對(duì)應(yīng)一段程序。

創(chuàng)建按鈕要求:創(chuàng)建按鈕對(duì)象時(shí)可說(shuō)明按鈕上的標(biāo)簽字符串。如:Buttonbtn=newButton(“求和”);

常用方法setLabel(Strings)//把按鈕的標(biāo)簽設(shè)置為字符串sgetLabel()//返回按鈕的標(biāo)簽字符串

產(chǎn)生事件

可以引發(fā)動(dòng)作事件。

3、動(dòng)作事件(ActionEvent)ActionEvent類只包含一個(gè)事件,即執(zhí)行動(dòng)作事件ACTION_PERFORMED,該事件是引發(fā)某個(gè)動(dòng)作執(zhí)行的事件。

能觸發(fā)這個(gè)事件的動(dòng)作包括:

●點(diǎn)擊按鈕;

●雙擊一個(gè)列表中的選項(xiàng);

●選擇菜單項(xiàng);

●在文本框中輸入回車。

ActionEvent類的重要方法:

publicStringgetActionCommand()

//返回引發(fā)事件的動(dòng)作的命令名,該命令名可通過(guò)調(diào)用發(fā)生事件的事件源類的setActionCommand()方法指定

publicintgetModifiers()

//如果發(fā)生動(dòng)作事件的同時(shí)用戶還按了Ctrl、Shift等功能鍵,則可以調(diào)用該方法來(lái)獲得和區(qū)別這些功能鍵。下面的語(yǔ)句將所定義的按鈕對(duì)象的動(dòng)作命令名設(shè)為“命令1”并將它注冊(cè)給當(dāng)前的監(jiān)聽(tīng)者:Buttonbtn=newButton(“按鈕標(biāo)簽”);Btn.setActionCommand(“命令1”);Btn.addActionListener(this);動(dòng)作事件的監(jiān)聽(tīng)者需要實(shí)現(xiàn)動(dòng)作,監(jiān)聽(tīng)者接口的方法為:publicvoidactionPerformed(ActionEvente){if(e.getActionCommand()==“命令1”)……}若沒(méi)有設(shè)置動(dòng)作命令名,則按鈕的缺省命令名就是按鈕的標(biāo)簽。Buttonbtn=newButton(“按鈕標(biāo)簽”);Btn.addActionListener(this);監(jiān)聽(tīng)者接口的方法為:publicvoidactionPerformed(ActionEvente){if(e.getActionCommand()==“按鈕標(biāo)簽”)……}文本框、文本區(qū)域與文本事件

1、文本事件(TextEvent)

TextEvent類只包含一個(gè)事件,即代表文本區(qū)域中文本變化的事件TEXT_VALUE_CHANGED,在文本區(qū)域中改變文本內(nèi)容。鍵入字符、刪除字符都將引發(fā)這個(gè)事件。

2、文本框與文本域(TextField與TextArea)

文本框(TextField)表示只能接收單行文本文本區(qū)域(TextArea)表示可以接收多行文本

創(chuàng)建文本框?qū)ο笈c文本區(qū)域?qū)ο笠螅涸趧?chuàng)建文本組件對(duì)象的同時(shí)可以指定文本組件中的初始文本字符串。如:TextFieldin=newTextField(“學(xué)號(hào)”,8);

//創(chuàng)建能容納8個(gè)字符,初始字符串為“學(xué)號(hào)”的單行文本框又如:TextAreaout=newTextArea(10,50);

//創(chuàng)建一個(gè)10行50列的多行文本區(qū)域

常用方法setText()//用指定的字符串對(duì)文本區(qū)域顯示的內(nèi)容賦值getText()//獲得用戶輸入的文本信息setEditable(booleanb)//設(shè)置文本區(qū)域?yàn)椴豢删庉嫷膇sEditable()//判斷當(dāng)前文本區(qū)域上否可以被編輯

常用方法(續(xù))select(intstart,intend)

//根據(jù)指定的起止位置選定一段文本selectAll()//選定文本區(qū)域中的所有文本setSelectStart()//設(shè)置選定文本的開(kāi)始位置setSelectEnd()//設(shè)置選定文本的結(jié)束位置getSelectStart()//獲得選定文本的開(kāi)始位置getSelectEnd()//獲得選定文本的結(jié)束位置getSelectText()//獲得選定的文本

以上方法為兩個(gè)類都能使用的方法。

常用方法(續(xù))

●TextField

類特有的方法有:

selEchoChar(charc)

//設(shè)置文本框中的回顯字符

echoCharIsSet()

//判斷當(dāng)前文本框是否處于不回顯狀態(tài)

getEchoChar()

//獲得當(dāng)前文本框不回顯的屏蔽字符

●TextArea類特有的方法有:

append(Strings)

//在當(dāng)前文本區(qū)域已有文本的后面添加參數(shù)

s

指定的文本內(nèi)容

insert(Strings,intindex)

//將字符串

s

插入到已有文本的指定序號(hào)處

事件響應(yīng)

這兩種類都能引發(fā)TextEvent對(duì)象代表的文本改變事件,在文本被刪除、添加、修改時(shí)引發(fā)。TextField還能引發(fā)ActionEvent事件,在用戶在文本框中回車時(shí)引發(fā)。

要響應(yīng)TextEvent對(duì)象代表的文本改變事件,需要將文本框加入實(shí)現(xiàn)了

TextListener

接口的文本改變事件監(jiān)聽(tīng)者。

out.addTextListener(this);在監(jiān)聽(tīng)者內(nèi)部要定義響應(yīng)文本改變事件的方法:

publicvoidtextValueChanged(TextEvente)

要響應(yīng)ActionEvent對(duì)象代表的動(dòng)作事件,需要將文本框加入實(shí)現(xiàn)了

ActionListener

接口的動(dòng)作事件監(jiān)聽(tīng)者。

in.addActionListener(this);在監(jiān)聽(tīng)者內(nèi)部要定義響應(yīng)動(dòng)作事件的方法:

publicvoidactionPerformed(ActionEvente);//filename:TextComponentEvent.javaimportjava.applet.Applet;importjava.awt.*;importjava.awt.event.*;public

classTextComponentEventextendsAppletimplements

TextListener,ActionListener{TextFieldtf;TextAreata;

public

voidinit(){tf=newTextField(50);ta=newTextArea(10,50);add(tf);add(ta);tf.addActionListener(this);tf.addTextListener(this);}

public

voidtextValueChanged(TextEvente){

if(e.getSource()==tf)ta.setText(((TextField)e.getSource()).getText());}

public

voidactionPerformed(ActionEvente){

if(e.getSource()==tf)ta.setText("");}}

單、復(fù)選框,列表與選擇事件

1、選擇事件(ItemEvent)

ItemEvent

類只包含一個(gè)事件,即代表選擇項(xiàng)的選中狀態(tài)發(fā)生變化的事件ITEM_STATE_CHANGED。

能觸發(fā)這個(gè)事件的動(dòng)作包括:●

改變列表類

List

對(duì)象選項(xiàng)的選中或不選中狀態(tài);●改變下拉列表類

Choice

對(duì)象選項(xiàng)的選中或不選中狀態(tài);●改變復(fù)選框類

Checkbox

對(duì)象的選中或不選中狀態(tài);●改變檢測(cè)盒菜單項(xiàng)

CheckboxMenuItem

對(duì)象的選中或不選中狀態(tài);

ItemEvent類的主要方法:

publicItemSelectablegetItemSeleceable()

//返回引發(fā)選中狀態(tài)變化的事件源

publicObjectgetItem()

//返回引發(fā)選中狀態(tài)變化事件的具體選擇項(xiàng)

publicintgetStateChange()

//返回具體的選中狀態(tài)變化類型,其返回值為ItemEvent類的幾個(gè)靜態(tài)常量之一:

①ItemEvent.SELECTED:代表選項(xiàng)被選中;②ItemEvent.DESELECTED:代表選項(xiàng)被放棄不選;

2、復(fù)選框(Checkbox)又稱為檢測(cè)盒,可以讓用戶作出多項(xiàng)選擇。是具有開(kāi)關(guān)或真假值的按鈕。

創(chuàng)建復(fù)選框要求:創(chuàng)建復(fù)選框?qū)ο髸r(shí)可同時(shí)指明其文本說(shuō)明標(biāo)簽。構(gòu)造方法:

●Checkbox()

//創(chuàng)建一個(gè)沒(méi)有標(biāo)簽的復(fù)選框

●Checkbox(Strings)

//創(chuàng)建一個(gè)指定標(biāo)簽的復(fù)選框●Checkbox(Strings,booleanb)

//創(chuàng)建一個(gè)指定標(biāo)簽的復(fù)選框,并且可指定選取狀態(tài)●Checkbox(Strings,CheckboxGroupg,booleanb)

//創(chuàng)建一個(gè)指定標(biāo)簽并且可指定選取狀態(tài)和復(fù)選框群組的復(fù)選框

常用方法StringgetLabel()

//返回確認(rèn)框的標(biāo)簽voidsetLabel(Stringlb1)//設(shè)置確認(rèn)框的標(biāo)簽

booleangetState()

//返回確認(rèn)框的狀態(tài)voidsetState(booleanst)

//設(shè)置確認(rèn)框的狀態(tài)為

st

事件響應(yīng)

當(dāng)用戶點(diǎn)擊復(fù)選框使其選中狀態(tài)發(fā)生變化時(shí),就會(huì)引發(fā)ItemEvent類代表的選擇事件。

要響應(yīng)ItemEvent對(duì)象代表的選擇事件,需要將復(fù)選框加入實(shí)現(xiàn)了ItemListener

接口的選擇事件監(jiān)聽(tīng)者。

backg.addItemListener(this);在監(jiān)聽(tīng)者內(nèi)部要定義響應(yīng)選擇事件的方法:

publicvoiditemStateChanged(ItemEvente)//filename:TextCheckbox.javaimportjava.awt.*;importjava.awt.event.*;importjava.applet.Applet;public

classTextCheckboxextendsAppletimplementsItemListener{Checkboxckb;Buttonbtn;

public

voidinit(){ckb=newCheckbox("背景色");btn=newButton("效果");add(ckb);add(btn);ckb.addItemListener(this);}public

voiditemStateChanged(ItemEvente){Checkboxtemp;

if(e.getItemSelectable()instanceofCheckbox){temp=(Checkbox)(e.getItemSelectable());

if(temp.getLabel()=="背景色")

if(temp.getState())btn.setBackground(Color.cyan);

else

btn.setBackground(Color.gray);}}}

3、單選按鈕組(CheckboxGroup)又稱為選項(xiàng)按鈕,是一組Checkbox復(fù)選框的集合,用戶只能從中選擇一個(gè)(即“多選一”)。其每一個(gè)都是具有開(kāi)關(guān)或真假值的按鈕。

創(chuàng)建單選按鈕組構(gòu)造方法:CheckboxGroup()

如:CheckboxGroupstyle=newCheckboxGroup();

p=newCheckbox(“普通”,true,style);

b=newCheckbox(“黑體”,false,style);

i=newCheckbox(“斜體”,false,style);

add(p);add(b);add(i);

常用方法CheckboxgetSelectedCheckbox()

//獲得群組中被選取的復(fù)選框voidsetSelectedCheckbox(Checkboxbox)

//設(shè)置群組中指定的復(fù)選框?yàn)楸贿x取狀態(tài)

事件響應(yīng)

該類不是java.awt.*包中的類,不能響應(yīng)事件,但按鈕組中的每個(gè)復(fù)選框可以響應(yīng)ItemEvent事件。響應(yīng)方法與復(fù)選框事件的響應(yīng)方法相同。//filename:TextCheckboxgroup.javaimportjava.awt.*;importjava.awt.event.*;importjava.applet.Applet;public

classTextCheckboxgroupextendsAppletimplementsItemListener{CheckboxGroupstyle;Checkboxp,b,i;Buttonbtn;

public

voidinit(){style=newCheckboxGroup();p=newCheckbox("普通",true,style);b=newCheckbox("黑體",false,style);i=newCheckbox("斜體",false,style);btn=newButton("效果");add(p);add(b);add(i);add(btn);p.addItemListener(this);b.addItemListener(this);i.addItemListener(this);}

public

voiditemStateChanged(ItemEvente){Checkboxtemp;FontoldF=btn.getFont();

if(e.getItemSelectable()instanceofCheckbox){temp=(Checkbox)(e.getItemSelectable());

if(temp.getLabel()=="普通")btn.setFont(newFont(oldF.getName(),Font.PLAIN,oldF.getSize()));

if(temp.getLabel()=="黑體")btn.setFont(newFont(oldF.getName(),Font.BOLD,oldF.getSize()));

if(temp.getLabel()=="斜體")btn.setFont(newFont(oldF.getName(),Font.ITALIC,oldF.getSize()));}}}

4、下拉列表(Choice)又稱為選項(xiàng)框。這種選項(xiàng)框一次只能顯示一個(gè)選項(xiàng),要改變被選中的選項(xiàng),可以單擊向下箭頭,從選項(xiàng)框中選擇一個(gè)選項(xiàng)。

創(chuàng)建選項(xiàng)框(即創(chuàng)建下拉列表)構(gòu)造方法:Choice()

//建立一個(gè)空白的選擇菜單例如:

Choicesize=newChoice();

//創(chuàng)建下攔列表

size.add(“10”);

//為下拉列表加入選項(xiàng)

size.add(“14”);

size.add(“18”);

常用方法voidadd(Stringitem)

//在下拉列表中加入選項(xiàng)voidaddItem(Stringitem)

//在下拉列表中加入選項(xiàng)StringgetItem(intindex)//獲得下拉列表中指定位置的選項(xiàng)名稱intgetItemCount()//獲得下拉列表中所有選項(xiàng)的個(gè)數(shù)intgetSelectedIndex()//獲得下拉列表中被選取選項(xiàng)的位置

常用方法(續(xù))StringgetSelectedItem()//獲得下拉列表中被選取選項(xiàng)的名稱voidinsert(Stringitem,intidx)

//插入新的選項(xiàng)到指定位置voidremove(intidx)

//刪除指定位置的下拉列表選項(xiàng)voidremove(Stringitem)

//刪除指定名稱的下拉列表選項(xiàng)voidremoveAll()

//刪除所有的下拉列表選項(xiàng)

常用方法(續(xù))voidselect(intidx)

//選取下拉列表中指定位置的選項(xiàng)voidselect(Stringitem)

//選取下拉列表中指定名稱的選項(xiàng)

事件響應(yīng)當(dāng)用戶單擊下拉列表框的某個(gè)選項(xiàng)做出選擇時(shí),就會(huì)引發(fā)ItemEvent類代表的選擇事件。

要響應(yīng)ItemEvent對(duì)象代表的選擇事件,需要將下拉列表框加入實(shí)現(xiàn)了ItemListener

接口的選擇事件監(jiān)聽(tīng)者。

size.addItemListener(this);在監(jiān)聽(tīng)者內(nèi)部要定義響應(yīng)選擇事件的方法:

publicvoiditemStateChanged(ItemEvente)//filename:TestChoice.javaimportjava.awt.*;importjava.awt.event.*;importjava.applet.Applet;public

classTestChoiceextendsAppletimplementsItemListener{Choicesize;Buttonbtn;public

voidinit(){size=newChoice();size.add("10");size.add("14");size.add("18");add(size);btn=newButton("效果");add(btn);size.addItemListener(this);}

public

voiditemStateChanged(ItemEvente){Choicetemp;FontoldF;Strings;

intsi;

if(e.getItemSelectable()instanceofChoice){oldF=btn.getFont();temp=(Choice)(e.getItemSelectable());s=temp.getSelectedItem();si=Integer.parseInt(s);btn.setFont(newFont(oldF.getName(),oldF.getStyle(),si));}}}

5、列表框(List)列表框可以使用戶選擇多個(gè)選項(xiàng),而且列表框的所有選項(xiàng)都是可見(jiàn)的。當(dāng)選項(xiàng)數(shù)目超過(guò)列表框的可見(jiàn)區(qū)域的時(shí)候,則在列表框的右側(cè)出現(xiàn)一個(gè)滾動(dòng)條,允許翻頁(yè)尋找。

創(chuàng)建列表框構(gòu)造方法:

List()

//創(chuàng)建一個(gè)列表框,默認(rèn)的狀態(tài)是顯示

4

個(gè)選項(xiàng)并且只允許單選List(introws)//創(chuàng)建一個(gè)列表框,默認(rèn)的狀態(tài)是顯示指定數(shù)目的選項(xiàng)并且只允許單選List(introws,booleanb)//創(chuàng)建一個(gè)列表框,默認(rèn)的狀態(tài)是顯示指定數(shù)目的選項(xiàng)并且可設(shè)置單復(fù)選

常用方法voidadd(Stringitem)

//加入選項(xiàng)到列表框中的最后一個(gè)位置voidaddItem(Stringitem,intindex)

//加入選項(xiàng)到列表框中指定的位置StringgetItem(intindex)//獲得列表框中指定位置的選項(xiàng)名稱intgetItemCount()//獲得下拉列表中所有選項(xiàng)的個(gè)數(shù)intgetSelectedIndex()//獲得下拉列表中被選取選項(xiàng)的位置

常用方法(續(xù))intgetSelectedIndexs()//獲得下拉列表中所有被選取選項(xiàng)的位置StringgetSelectedItem()//獲得列表框中被選取選項(xiàng)的名稱StringgetSelectedItems()//獲得列表框中所有被選取選項(xiàng)的名稱

voidsetMultipleMode(booleanb)

//設(shè)置列表框是否可復(fù)選

voidreplaceItem(StringnewValue,intindex)

//用新的選項(xiàng)名稱替代指定位置的選項(xiàng)名稱

常用方法(續(xù))voidselect(intidx)

//選取列表框中指定位置的選項(xiàng)voiddeselect(intidx)

//取消列表框中指定選項(xiàng)的選取狀態(tài)voidremove(intidx)

//刪除指定位置的列表框選項(xiàng)voidremove(Stringitem)

//刪除指定名稱的列表框選項(xiàng)voidremoveAll()

//刪除所有的列表框選項(xiàng)

事件響應(yīng)列表框可以產(chǎn)生兩種事件:當(dāng)用戶單擊列表框的某一個(gè)選項(xiàng)做出選擇時(shí),就會(huì)引發(fā)ItemEvent類代表的選擇事件;當(dāng)用戶雙擊列表框中的某個(gè)選項(xiàng)時(shí),將產(chǎn)生ActionEvent類代表的動(dòng)作事件。

要響應(yīng)ItemEvent對(duì)象代表的選擇事件,需要將列表框加入實(shí)現(xiàn)了

ItemListener

接口的選擇事件監(jiān)聽(tīng)者。

out.addItemListener(this);在監(jiān)聽(tīng)者內(nèi)部要定義響應(yīng)選擇事件的方法:

publicvoiditemStateChanged(ItemEvente)

要響應(yīng)ActionEvent對(duì)象代表的動(dòng)作事件,需要將列表框加入實(shí)現(xiàn)了

ActionListener

接口的動(dòng)作事件監(jiān)聽(tīng)者。

in.addActionListener(this);在監(jiān)聽(tīng)者內(nèi)部要定義響應(yīng)動(dòng)作事件的方法:

publicvoidactionPerformed(ActionEvente);//filename:TestList.javaimportjava.awt.*;importjava.awt.event.*;importjava.applet.Applet;public

classTestListextendsAppletimplementsActionListener,ItemListener{ListmyList;Labelresult;public

voidinit(){myList=newList(4,true);myList.add("北京");myList.add("上海");myList.add("南京");myList.add("西安");myList.add("重慶");myList.add(“深圳”);result=newLabel("你雙擊了選項(xiàng)");add(myList);add(result);

myList.addItemListener(this);myList.addActionListener(this);}

public

voidactionPerformed(ActionEvente){if(e.getSource()==myList)result.setText("你雙擊了選項(xiàng)"+e.getActionCommand());}

public

voiditemStateChanged(ItemEvente){Listtemp;StringsList[];Stringmgr="";

if(e.getItemSelectable()instanceofList){temp=(List)(e.getItemSelectable());sList=temp.getSelectedItems();

for(inti=0;i<sList.length;i++)mgr=mgr+sList[i]+"";showStatus(mgr);

//是Applet對(duì)象的方法,用于將參數(shù)字符串顯示在Applet的狀態(tài)條中}}}

滾動(dòng)條與調(diào)整事件

1、調(diào)整事件(AdjustmentEvent)AdjustmentEvent

類只包含一個(gè)事件——狀態(tài)變化事件

ADJUSTMENT_VALUE_CHANGED

事件,它是GUI組件狀態(tài)發(fā)生連續(xù)變化的事件。

能觸發(fā)這個(gè)事件的動(dòng)作包括:●

操縱滾動(dòng)條(Scrollbar)改變其滑塊位置;●操縱用戶自定義的Scrollbar對(duì)象的子類組件,改變其滑塊位置。

AdjustmentEvent類的主要方法:

publicAdjustablegetAdjustable()

//返回引發(fā)狀態(tài)變化事件的事件源

publicintgetVlaue()

//返回狀態(tài)變化后的滑塊對(duì)應(yīng)的當(dāng)前數(shù)值

publicintgetAdjustmentType()

//返回狀態(tài)變化事件的狀態(tài)變化類型,其返回值為

AdjustmentEvent類的幾個(gè)靜態(tài)常量之一

AdjustmentEvent類的靜態(tài)常量有:

①AdjustmentEvent.BLOCK_DECREMENT:

代表點(diǎn)擊滾動(dòng)條下方引發(fā)塊狀下移的動(dòng)作——塊減少;

②AdjustmentEvent.BLOCK_INCREMENT:

代表點(diǎn)擊滾動(dòng)條上方引發(fā)塊狀上移的動(dòng)作——塊增加;③AdjustmentEvent.TRACK:

代表拖動(dòng)滾動(dòng)條滑塊的動(dòng)作;④AdjustmentEvent.UNIT_DECREMENT:

代表點(diǎn)擊滾動(dòng)條下三角按鈕引發(fā)最小單位下移的動(dòng)作(單位減少);⑤AdjustmentEvent.UNIT_INCREMENT:

代表點(diǎn)擊滾動(dòng)條上三角按鈕引發(fā)最小單位上移的動(dòng)作(單位增加);

2、滾動(dòng)條(Scrollbar)滾動(dòng)條是一種比較特殊的GUI組件,它能夠接受并體現(xiàn)邊疆的變化,稱為“調(diào)整”。

創(chuàng)建滾動(dòng)條構(gòu)造方法:

Scrollbar()

//建立一個(gè)垂直滾動(dòng)條

Scrollbar(intorn)

//用orn指定的方式建立滾動(dòng)條,orn表示所產(chǎn)生的滾動(dòng)條是垂直狀的還是水平狀的,它可以是以下兩個(gè)值中的一個(gè):

Scrollbar.HORIZONTAL

水平狀

Scrollbar.VERTICAL

垂直狀

Scrollbar(intorn,intval,intvis,intmin,intmax)

//參數(shù)orn決定方向,val為缺省值(即滑塊最初的顯示位置),vis參數(shù)確定滑塊的大小,min和max參數(shù)分別確定最小、最大值。

單位增量最小值最大值塊增量滾動(dòng)槽滑塊滾動(dòng)條的各組成部分

常用方法

voidsetUnitIncrement(intv)

//設(shè)置按上(下)滾動(dòng)箭頭時(shí)滾動(dòng)滑塊移動(dòng)的單位數(shù)

voidsetBlockIncrement(intv)

//設(shè)置滾動(dòng)槽被點(diǎn)擊時(shí)滑塊移動(dòng)的單位數(shù)intgetUnitIncrement()

//獲得按上(下)滾動(dòng)箭頭時(shí)滾動(dòng)滑塊移動(dòng)的單位數(shù)

intgetBlockIncrement()

//獲得滾動(dòng)槽被點(diǎn)擊時(shí)滑塊移動(dòng)的單位數(shù)

intgetValue()//獲得滾動(dòng)滑塊當(dāng)前的位置

事件響應(yīng)滾動(dòng)條可以引發(fā)AdjustmentEvent類代表的調(diào)整事件,當(dāng)用戶通過(guò)各種方式改變滑塊位置從而改變其代表的數(shù)值時(shí),都會(huì)引發(fā)調(diào)整事件。

要響應(yīng)AdjustmentEvent對(duì)象代表的調(diào)整事件(即響應(yīng)滾動(dòng)條引發(fā)的調(diào)整事件),需要將滾動(dòng)條加入實(shí)現(xiàn)了

AdjustmentListener

接口的調(diào)整事件監(jiān)聽(tīng)者。

mySlider.addAdjustmentListener(this);在監(jiān)聽(tīng)者內(nèi)部要定義響應(yīng)調(diào)整事件的方法:

publicvoidadjustmentValueChanged(AdjustmentEvente)//filename:ScrollbarDemo.javaimportjava.awt.*;importjava.awt.event.*;importjava.applet.Applet;public

class

ScrollbarDemo

extends

Applet

implements

AdjustmentListener{

ScrollbarmySlider;TextFieldsliderValue;

public

voidinit(){

sliderValue=newTextField(30);

mySlider=new

Scrollbar(Scrollbar.HORIZONTAL,0,1,0,Integer.MAX_VALUE);

mySlider.setUnitIncrement(1);mySlider.setBlockIncrement(50);add(sliderValue);add(mySlider);

mySlider.addAdjustmentListener(this);}

public

voidadjustmentValueChanged(AdjustmentEvente){

intvalue;

if(e.getAdjustable()==mySlider){value=e.getValue();sliderValue.setText(newInteger((int)value).toString());sliderValue.setBackground(newColor(value));}}}響應(yīng)調(diào)整事件的方法//filename:ScrollbarDemo2.javaimportjava.awt.*;importjava.awt.event.*;importjava.applet.Applet;public

classScrollbarDemo2extendsAppletimplementsAdjustmentListener{Scrollbarr,g,b;TextFieldt1,t2,t3;Labell1,l2,l3,output;FontoldF;public

voidinit(){l1=newLabel("red(0~255)");t1=newTextField("0",20);t1.setEditable(false);r=newScrollbar(Scrollbar.HORIZONTAL,0,1,0,255);add(l1);add(t1);add(r);l2=newLabel("Green(0~255)");t2=newTextField("0",20);t2.setEditable(false);g=newScrollbar(Scrollbar.HORIZONTAL,0,1,0,255);add(l2);add(t2);add(g);l3=newLabel("blue(0~255)");t3=newTextField("0",20);t3.setEditable(false);b=newScrollbar(Scrollbar.HORIZONTAL,0,1,0,255);add(l3);add(t3);add(b);output=newLabel("祝大家新年快樂(lè)!");add(output);r.addAdjustmentListener(this);g.addAdjustmentListener(this);b.addAdjustmentListener(this);}

public

voidadjustmentValueChanged(AdjustmentEvente){intvalue,i1,i2,i3;Scrollbartemp;

if(e.getAdjustable()instanceofScrollbar){temp=(Scrollbar)(e.getAdjustable());

if(temp==r){value=temp.getValue();t1.setText(newInteger((int)value).toString());}

if(temp==g){value=temp.getValue();t2.setText(newInteger((int)value).toString());}

if(temp==b){value=temp.getValue();t3.setText(newInteger((int)value).toString());}oldF=output.getFont();output.setFont(newFont(oldF.getName(),oldF.getStyle(),36));i1=Integer.parseInt(t1.getText());i2=Integer.parseInt(t2.getText());i3=Integer.parseInt(t3.getText());output.setForeground(newColor(i1,i2,i3));}}}

布局設(shè)計(jì)組件產(chǎn)生以后,可調(diào)用

add()

方法將該組件放置到相應(yīng)的容器中。如果還要在組件上增加一些控制,則需要使用布局設(shè)計(jì)知識(shí)。在AWT中,組件的布局設(shè)計(jì)是通過(guò)為組件設(shè)置布局編輯器來(lái)實(shí)現(xiàn)的。常用的布局編輯類有:●FlowLayout●

BorderLayout●

CardLayout●

GridLayout●

GridBagLayout每一種布局編輯類對(duì)應(yīng)一種布局策略1、FlowLayout

(順序布局)FlowLayout是最基本的一種布局,是面板Panel和它的子類Applet缺省使用的布局編輯策略。它從左到右地安排組件排列順序,它提供下面的對(duì)齊方式:

構(gòu)造方法:

FlowLayout

()

//創(chuàng)建居中對(duì)齊、水平與垂直間距為5的FlowLayout對(duì)象

FlowLayout

(intalign)

//以指定的對(duì)齊方式創(chuàng)建水平與垂直間距為5的FlowLayout對(duì)象FlowLayout

(intalign,inthg,intvg)

//以指定的對(duì)齊方式、水平與垂直間距創(chuàng)建FlowLayout對(duì)象

修改布局:

setLayout(new

FlowLayout

())

//將當(dāng)前組件的布局設(shè)為FlowLayout布局(即順序布局)

2、BorderLayout(邊界布局)邊界布局

BorderLayout

把容器分為

5

個(gè)區(qū):東(East)、南(South)、西(West)、北(North)和中央(Center),這幾個(gè)區(qū)按照從“上北下南,左西右東”的分布規(guī)律進(jìn)行布局??芍付ㄒ尤氲慕M件放入哪一個(gè)區(qū)域中,區(qū)域的大小由放入的組件大小來(lái)決定(最多只能容納5個(gè)組件)。

構(gòu)造方法:

BorderLayout

()

//創(chuàng)建水平與垂直間距為0的BorderLayout對(duì)象

BorderLayout

(inthg,intvg)

//以指定的水平與垂直間距來(lái)創(chuàng)建BorderLayout對(duì)象例如,在applet的init()中定義了:

setLayout(newBorderLayout());可用方法add把組件放入applet中:

add(“East”,newButton(“東邊”));add(“South”,newButton(“南邊”));add(“West”,newButton(“西邊”));add(“North”,newButton(“北邊”));add(“Center”,newButton(“中央”));

//filename:BLayout.javaimportjava.awt.*;importjava.applet.Applet;

public

classBLayoutextendsApplet{

public

voidinit(){setLayout(newBorderLayout());add("East",newButton("東邊"));add("South",newButton("南邊"));add("West",newButton("西邊"));add("North",newButton("北邊"));add("Center",newButton("中央"));}}如果沒(méi)有在5個(gè)區(qū)域中都放置組件時(shí),窗口的布局就會(huì)發(fā)生變化。例如:只在“北”、“中”、“東”等區(qū)域放置組件時(shí),此時(shí)的結(jié)果為://filename:BLayout1.javaimportjava.awt.*;importjava.applet.Applet;

public

classBLayout1extendsApplet{

public

voidinit(){setLayout(newBorderLayout());add("North",newButton("北邊"));add(“Center”,newButton(“中央”));add("East",newButton("東邊"));}}3、CardLayout(卡片布局)卡片布局CardLayout把組件容器看成是—個(gè)卡片盒,而里面所有的組件都是盒中的卡片,但每次只能顯示最上面的一個(gè)卡片(組件)。CardLayout類提供一些方法來(lái)翻閱這些卡片(組件)。

構(gòu)造方法:

CardLayout

()

//創(chuàng)建CardLayout布局對(duì)象

CardLayout

(inthg,intvg)

//以指定的水平與垂直間距來(lái)創(chuàng)建CardLayout對(duì)象

下面的方法用來(lái)翻閱這些卡片(組件):

使用CardLayout的一般步驟:(P283)創(chuàng)建CardLayout對(duì)象作為布局編輯器;使用容器的setLayout()方法為容器設(shè)置布局編輯器;調(diào)用容器的方法add()將組件加入容器,同時(shí)為組件分配一個(gè)字符串名字,以便布局編輯器根據(jù)這個(gè)名字調(diào)用顯示這個(gè)組件;add(字符串,組件);調(diào)用CardLayout的方法show()根據(jù)字符串名顯示一個(gè)組件:show(容器名,字符串);或按組件加入容器的順序顯示組件。

//filename:CardLayout1.javaimportjava.awt.*;importjava.applet.*;public

classCardLayout1extendsApplet//邊界版面中的卡片版面{CardLayoutcardlayout=newCardLayout();//卡片版面Panelcenterpanel,southpanel;//中央及南方控制板

public

voidinit(){centerpanel=newPanel();//建立中央控制板centerpanel.setLayout(cardlayout);//卡片版面centerpanel.add("card1",newLabel("card1"));//加入card1centerpanel.add("card2",newLabel("card2"));//加入card2centerpanel.add("card3",newLabel("card3"));//加入card3centerpanel.add("card4",newLabel("card4"));//加入card4southpanel=newPanel();//建立南方控制板southpanel.add(newButton("previous"));//加入previous按鈕southpanel.add(newButton("next"));//加入next按鈕

this.setLayout(newBorderLayout());//Frame為邊界版面

this.add("Center",centerpanel);//中央控制板加入Frame

this.add("South",southpanel);//南方控制板加入Frame}

public

booleanaction(Eventevt,Objectobj)//行動(dòng)事件{

if(“previous”.equals(obj))//按previous按鈕cardlayout.previous(centerpanel);//顯示上一張卡片

else

if(“next”.equals(obj))//按next按鈕cardlayout.next(centerpanel);//顯示下一張卡片

return

true;}}//filename:CardLayout2.javaimportjava.awt.*;importjava.applet.*;importjava.awt.event.*;public

classCardLayout2extendsAppletimplementsActionListener{CardLayoutcardlayout=newCardLayout();Panelcenterpanel,southpanel;Buttonbn1,bn2;

public

voidinit(){centerpanel=newPanel();centerpanel.setLayout(cardlayout);centerpanel.add("card1",newLabel("card1"));centerpanel.add("card2",newLabel("card2"));centerpanel.add("card3",newLabel("card3"));centerpanel.add("card4",newLabel("card4"));

southpanel=newPanel();bn1=newButton("previous");bn2=newButton("next");southpanel.add(bn1);southpanel.add(bn2);bn1.addActionListener(this);bn2.addActionListener(this);

this.setLayout(newBorderLayout());

this.add("Center",centerpanel);

this.add("South",southpanel);}

public

voidactionPerformed(ActionEvente){if(e.getSource()==bn1)cardlayout.previous(centerpanel);

else

if(e.getSource()==bn2)cardlayout.next(centerpanel);}}4、GridLayout(網(wǎng)格布局)網(wǎng)格布局

GridLayout

是把容器區(qū)域分成若干個(gè)網(wǎng)格,每一個(gè)網(wǎng)格可以放置一個(gè)組件,這種布局方式非常適合數(shù)量龐大的組件。一般在使用

GridLayout

時(shí),要設(shè)置行數(shù)和列數(shù)。

構(gòu)造方法:

GridLayout

(introws,intcols)

//以指定的行列數(shù)創(chuàng)建GridLayout布局對(duì)象

CardLayout

(introws,intcols,inthg,intvg)

//以指定的行列數(shù)、水平與垂直間距來(lái)創(chuàng)建GridLayout對(duì)象

使用GridLayout的一般步驟:(P285)創(chuàng)建GridLayout對(duì)象作為布局編輯器,指定劃分網(wǎng)格的行數(shù)和列數(shù);使用容器的setLayout()方法為容器設(shè)置布局編輯器;調(diào)用容器的方法add()將組件加入容器,組件填入的順序?qū)吹谝恍械谝粋€(gè)、第二個(gè)……進(jìn)行。每個(gè)網(wǎng)格中都必須填入組件,若希望某個(gè)網(wǎng)格為空白,可為它加入一個(gè)空的標(biāo)簽:add(newLabel());

//filename:GridLayout3.javaimportjava.awt.*;importjava.awt.event.*;importjava.applet.Applet;classeastpanelextends

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論