版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國(guó)二手車第三方檢測(cè)行業(yè)商業(yè)模式創(chuàng)新戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國(guó)3C維修行業(yè)全國(guó)市場(chǎng)開(kāi)拓戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國(guó)智能手表行業(yè)商業(yè)模式創(chuàng)新戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國(guó)汽車運(yùn)動(dòng)服務(wù)行業(yè)開(kāi)拓第二增長(zhǎng)曲線戰(zhàn)略制定與實(shí)施研究報(bào)告
- 養(yǎng)殖金蟬知識(shí)培訓(xùn)課件
- 二零二五年度房產(chǎn)局備案的房屋租賃合同規(guī)范版6篇
- 二零二五年度房東房屋租賃合同(含電梯使用費(fèi))2篇
- 二零二五年度健康體檢中心運(yùn)營(yíng)管理合同標(biāo)準(zhǔn)范本3篇
- 電氣試驗(yàn)知識(shí)培訓(xùn)課件
- 精密機(jī)械制造中心項(xiàng)目可行性研究報(bào)告模板-立項(xiàng)拿地
- 湖北省2024年中考數(shù)學(xué)試卷【附真題答案】
- 德國(guó)高等工程教育認(rèn)證制度研究
- 零缺陷質(zhì)量意識(shí)
- 2024河北中考化學(xué)仿真卷52
- 借款債務(wù)股東共同承擔(dān)協(xié)議
- 門診導(dǎo)診課件
- 大學(xué)生職業(yè)生涯規(guī)劃小學(xué)英語(yǔ)教育
- 阿甘正傳書籍
- (正式版)JTT 1497-2024 公路橋梁塔柱施工平臺(tái)及通道安全技術(shù)要求
- 中國(guó)省市地圖模板可編輯模板課件
- 《中國(guó)潰瘍性結(jié)腸炎診治指南(2023年)》解讀
評(píng)論
0/150
提交評(píng)論