![圖形用戶界面_第1頁](http://file4.renrendoc.com/view/25161cf6aaf930c86ad69dc271a34cc3/25161cf6aaf930c86ad69dc271a34cc31.gif)
![圖形用戶界面_第2頁](http://file4.renrendoc.com/view/25161cf6aaf930c86ad69dc271a34cc3/25161cf6aaf930c86ad69dc271a34cc32.gif)
![圖形用戶界面_第3頁](http://file4.renrendoc.com/view/25161cf6aaf930c86ad69dc271a34cc3/25161cf6aaf930c86ad69dc271a34cc33.gif)
![圖形用戶界面_第4頁](http://file4.renrendoc.com/view/25161cf6aaf930c86ad69dc271a34cc3/25161cf6aaf930c86ad69dc271a34cc34.gif)
![圖形用戶界面_第5頁](http://file4.renrendoc.com/view/25161cf6aaf930c86ad69dc271a34cc3/25161cf6aaf930c86ad69dc271a34cc35.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第5章圖形用戶界面5.1文本框和文本區(qū)5.2標(biāo)簽5.3按鈕5.4選擇框5.5畫布5.6面板與布局設(shè)計5.7窗口5.8菜單5.9對話框5.1文本框和文本區(qū)5.1.1文本框及處理事件1.文本框的創(chuàng)建2.文本框處理事件 例5-2:兩個空白文本框,當(dāng)在第一個文本框內(nèi)輸入字符時,在文本框內(nèi)顯示“*”號,輸入完畢按回車鍵后,在第二個文本框內(nèi)顯示:Theend。importjava.awt.*;importjava.applet.Applet;importjava.awt.event.*;publicclassEx6_2extendsApplet{TextFieldtf1=newTextField(20);TextFieldtf2=newTextField(20);
publicvoidinit(){add(tf1);tf1.setEchoChar('*');add(tf2);tf1Listeneral=newtf1Listener();tf1.addActionListener(a1);}classtf1ListenerimplementsActionListener{
publicvoidactionPerformed(ActionEvente){tf2.setText("Theend");}}}運(yùn)行結(jié)果見圖5-2。圖5-15.1.2文本區(qū)及處理事件 例5-4:在Applet中添加一個文本框和一個文本區(qū),每當(dāng)在文本框中輸入一個字符時,在文本區(qū)內(nèi)就附加一行文本:Thetextischanged。 importjava.awt.*; importjava.applet.Applet; importjava.awt.event.*;publicclassEx6_4extendsApplet{TextFieldtf1=newTextField(20);TextAreata1=newTextArea(null,6,40);publicvoidinit(){add(tf1);add(ta1);tf1.addTextListener(newTextL());}classTextLimplementsTextListener{
publicvoidtextValueChanged(TextEvente){ta1.append("\nThetextischanged");}}}運(yùn)行結(jié)果見圖5-4。圖5-45.2標(biāo)簽 標(biāo)簽(Label)是AWT構(gòu)件中最簡單的一種構(gòu)件,所謂標(biāo)簽實(shí)質(zhì)上就是一段文字,但它與文字不同的是它是一個對象,所以在每次repaint時,不用重新添加。標(biāo)簽在GUI界面中通常作為提示信息使用。標(biāo)簽構(gòu)件的構(gòu)造方法如下。(1)Label()構(gòu)造一個空的標(biāo)簽。(2)Label(Stringstr)構(gòu)造一個以Stringstr為內(nèi)容的標(biāo)簽。(3)Label(Stringstr,intalign)定義一個以Stringstr為內(nèi)容的標(biāo)簽。5.3按鈕5.3.1按鈕
按鈕(Button)是GUI用戶界面中常用的元素,它是用戶輸入命令的一個重要工具。當(dāng)用鼠標(biāo)單擊某個按鈕該按鈕獲得焦點(diǎn)時,在鍵盤上按回車鍵都會導(dǎo)致一個命令的執(zhí)行。Button類有兩種構(gòu)造方法。 (1)Button()構(gòu)造一個沒有標(biāo)簽的按鈕。 (2)Button(Stringstr)構(gòu)造一個以Stringstr為標(biāo)簽的按鈕。5.3.2按鈕處理事件 與按鈕有關(guān)的事件有兩類。1.ActionEvent 當(dāng)用鼠標(biāo)單擊按鈕,或當(dāng)按鈕獲得焦點(diǎn)時在鍵盤上按回車鍵都導(dǎo)致該事件的發(fā)生,此時任何實(shí)現(xiàn)了被注冊為監(jiān)聽者的ActionListener接口的類,它的actionPerformed()方法將被調(diào)用。下面的程序范例在Applet上添加兩個命令按鈕,其標(biāo)簽分別為“顯示”和“清除”,當(dāng)單擊“顯示”按鈕時,在文本區(qū)中顯示:“你按下了顯示按鈕”,當(dāng)按“清除”按鈕時則清除文本區(qū)中顯示的字符。例5-6:文本區(qū)事件處理。importjava.awt.*;importjava.applet.Applet;importjava.awt.event.*;publicclassEx6_6extendsApplet{Buttonb1=newButton("顯示");
Buttonb2=newButton("清除");
TextAreata1=newTextArea(null,6,40);publicvoidinit(){add(b1);add(b2);add(ta1);b1.addActionListener(newButtenL());b2.addActionListener(newButtenL());}
classButtenLimplementsActionListener{publicvoidactionPerformed(ActionEvente){if(e.getSource()==b1)ta1.append("\n你按下了"顯示"按鈕");
elseta1.append("\n你按下了"清除"按鈕");}}}運(yùn)行結(jié)果見圖5-6。圖5-62.FocusEvent FocusEvent稱作焦點(diǎn)事件,它的發(fā)生是指鍵盤光標(biāo)移動到構(gòu)件上并且可以接受鍵盤的輸入。如果光標(biāo)移動到一個按鈕上,稱作該按鈕獲得焦點(diǎn),反之稱作失去焦點(diǎn)。當(dāng)一個按鈕獲得焦點(diǎn)時單擊回車鍵即相當(dāng)于用鼠標(biāo)單擊該按鈕。如果一個文本框獲得焦點(diǎn)就可以在該文本框中輸入字符。例5-7:按鈕和文本框檢測焦點(diǎn)事件的例子。程序如下:importjava.awt.*;importjava.applet.Applet;importjava.awt.event.*;publicclassEx6_7extendsApplet{TextFieldtxt1=newTextField("txt1",50);TextFieldtxt2=newTextField("txt2",50);Buttonbutton1=newButton("button1");Buttonbutton2=newButton("button2");classKeytryimplementsFocusListener{
publicvoidfocusGained(FocusEvente){txt1.setText("txt1:paramString()="+e.paramString());if(e.getSource()==txt1)txt2.setText("txt2:focusisontxt1");elsetxt2.setText("txt2:focusisonbutton1");}
publicvoidfocusLost(FocusEvente){txt1.setText("txt1:paramString()="+e.paramString());txt2.setText("txt2:focuslostoutsidebutton1ortxt1");}}Keytryal=newKeytry();
publicvoidinit(){setLayout(newFlowLayout());txt1.addFocusListener(al);button1.addFocusListener(al);add(button1);add(button2);add(txt1);add(txt2);}}運(yùn)行結(jié)果見圖5-7。圖5-7在上面的例子中,只有button1和txt1注冊了焦點(diǎn)事件的事件監(jiān)聽者,它們共享同一個事件處理程序。如果焦點(diǎn)在button1或txt1上面,文本框txt2顯示焦點(diǎn)在哪個構(gòu)件上(focusGaned),反之則指出無焦點(diǎn)(focusLost)。文本框txt1內(nèi)顯示事件的參數(shù)字符串,它也能指出是否有焦點(diǎn)。另外,程序中的setLayout(newFlowLayout())語句是控制構(gòu)件的布局用的,關(guān)于這個問題將在后面的章節(jié)中進(jìn)行討論。5.4選擇框5.4.1選擇框1.下拉列表框(Choice)2.列表框(List)3.復(fù)選框(Checkbox)4.單選框(Checkboxgroup-RadioButton)5.4.2選擇框處理事件 例5-12:選擇框檢測ItemEvent事件的例子。
importjava.awt.*; importjava.applet.Applet; importjava.awt.event.*;publicclassEx6_12extendsAppletimplementsItemListener{TextAreata1=newTextArea(null,6,40);Stringsubject[]={"語文","數(shù)學(xué)","政治","外語","物理","化學(xué)"};
Checkboxcb[]=newCheckbox[6];publicvoidinit(){add(newLabel("請選擇:"));
for(intI=0;I<6;I++){cb[I]=newCheckbox(subject[I]);add(cb[I]);cb[I].addItemListener(this);}add(ta1);}
publicvoiditemStateChanged(ItemEvente){ta1.append("\n你在復(fù)選框中的選擇是:"+e.getItem());}}運(yùn)行結(jié)果見圖5-12。圖5-125.5畫布例5-13:創(chuàng)建一個畫布。importjava.awt.*;importjava.applet.Applet;importjava.util.*;publicclassmycanvasextendsApplet{
publicvoidinit(){MyCanvas1mc=newMyCanvas1();mc.setBackground(Color.green);mc.setSize(150,150);add(mc);}}classMyCanvas1extendsCanvas{publicvoidpaint(Graphicsg){g.fillOval(40,20,80,80);}}運(yùn)行結(jié)果見圖5-13。圖5-135.6面板與布局設(shè)計5.6.1布局管理器1.FlowLayout類2.BorderLayout類 例5-15:邊界布局使用實(shí)例。
importjava.awt.*; importjava.applet.Applet;publicclassEx6_15extendsApplet{publicvoidinit(){setLayout(newBorderLayout(0,0));add(newButton("North"),BorderLayout.NORTH);add(newButton("South"),BorderLayout.SOUTH);add(newButton("East"),BorderLayout.EAST);add(newButton("West"),BorderLayout.WEST);add(newButton("Center"),BorderLayout.CENTER);}}運(yùn)行結(jié)果見圖5-15。圖5-153.GridLayout類4.布局設(shè)計中的絕對定位5.6.2面板 面板(Panel)是一個容器類,它可以包含其他的構(gòu)件或另外的面板,并且可以使用布局管理器對其內(nèi)部的構(gòu)件進(jìn)行管理。其實(shí)Aapplet本身就是面板的一個子類,它就是一個特殊的面板。面板缺省的布局方式是FlowLayout。面板的構(gòu)造方法如下。(1)Panel()用缺省布局方式(FlowLayout)創(chuàng)建一個面板。(2)Panel(LayoutManagerlayout)用指定布局方式創(chuàng)建一個面板。面板的常用方法如下。(1)publicvoidadd(Componentcomp)為容器添加一個構(gòu)件。(2)publicvoidremove(Componentcomp)為容器去除一個構(gòu)件。(3)publicvoidsetSize(intwidth,intheight)為容器設(shè)定寬和高。(4)publicvoidsetFont(Fontf)為容器設(shè)定字體。(5)publicvoidsetLocation(intx,inty)設(shè)定定坐標(biāo)位置。(6)publicvoidpaint(Graphicsg)畫出容器。(7)publicvoidupdate(Graphicsg)先清除容器的內(nèi)容再調(diào)用paint方法重畫容器。(8)publicvoidrepaint()調(diào)用容器的updata方法。使用面板可以使構(gòu)件的排列具有更大的靈活性??梢詫⒉煌臉?gòu)件分組,然后將同一組的構(gòu)件放在一個面板上。下面是使用面板安排構(gòu)件的一個例子。例5-18:面板的使用importjava.awt.*;importjava.applet.Applet;publicclassEx6_18extendsApplet{publicvoidinit(){setLayout(newFlowLayout(FlowLayout.LEFT));Panelp1=newPanel();add(p1);p1.add(newLabel("Yourname:"));p1.add(newTextField(30));Panelp2=newPanel();add(p2);p2.add(newLabel("Sex:"));CheckboxGroupcbg=newCheckboxGroup();p2.add(newCheckbox("Male",cbg,true));p2.add(newCheckbox("Female",cbg,false));Panelp3=newPanel();add(p3);p3.add(newLabel("Whatareyoulike:"));p3.add(newCheckbox("Apple"));p3.add(newCheckbox("orange"));p3.add(newCheckbox("Strawberry"));p3.add(newCheckbox("Peach"));Panelp4=newPanel();add(p4);p4.add(newLabel("Howmuchdoyoueatthemperweek:"));Choicec=newChoice();c.addItem("lessthan1kg");c.addItem("1kgto3kg");c.addItem("morethan3kg");p4.add(c);Panelp5=newPanel();add(p5);p5-add(newLabel("What'syouropnionofeatingfruit:"));add(newTextArea("Ithink",3,60));
Panelp6=newPanel();add(p6);p5-add(newButton("OK"));p5-add(newButton("Clear"));}}運(yùn)行結(jié)果見圖5-18。圖5-18 在這個程序中,加入了若干個Panel類,在屏幕上顯示在同一行中的構(gòu)件都屬于同一個Panel。布局管理器的缺省設(shè)置是FlowLayout,排列方式缺省為居中?,F(xiàn)在版面仍是FlowLayout,排列方式改成靠左。在各個Panel中,使用相同的版面。當(dāng)然也可將各個Panel設(shè)置成不同的版面,這樣效果會不同。5.7窗口 窗口是一個最重要的容器類構(gòu)件,在獨(dú)立的Java應(yīng)用程序中,所有的用戶界面構(gòu)件都是添加在窗口當(dāng)中的。在Java的AWT工具包中有一個窗口(Window)類,但它生成的窗口沒有標(biāo)題欄和改變窗口大小的按鈕,在實(shí)際的應(yīng)用中經(jīng)常使用的是它的兩個子類Frame(框架)和Dialog(對話框)??蚣埽‵rame)是帶標(biāo)題和按鈕的頂層窗口。從類的層次上來看,它和Panel都屬于Container類。5.8菜單5.8.1菜單(Menu) 在GUI界面中,菜單一般位于窗口上方標(biāo)題欄下面的位置,它是一個圖形用戶界面不可缺少的組成部分。在Java中這一部分是由以下幾個類實(shí)現(xiàn)的。1.MenuBarMenuBar又稱菜單條,一個菜單條構(gòu)件是一個水平菜單,它只能加入到一個框架中,并成為所有菜單樹的根。MenuBar的構(gòu)造方法是MenuBar(),在構(gòu)造之后,還要用setMenuBar()方法將它設(shè)置成窗口的菜單條,然后按照從左到右的順序添加它所包含的下拉菜單。菜單條不支持監(jiān)聽者。作為普通菜單行為的一部分,在菜單條的區(qū)域中發(fā)生的預(yù)期事件會被自動處理。2.MenuMenu又稱菜單或下拉菜單,它可以加入到一個菜單條或者另一個菜單中。Menu類的構(gòu)造方法有兩種。Menu(Stringstr)用給定的標(biāo)識構(gòu)造一個菜單。Menu(Stringstr,booleanb)用給定的標(biāo)識構(gòu)造一個菜單。如果布爾值為false,那么當(dāng)釋放鼠標(biāo)按鈕后,菜單項(xiàng)會消失。如果布爾值為true,那么釋放鼠標(biāo)按鈕后,菜單項(xiàng)仍將顯示。在創(chuàng)建Menu對象后,使用MenuBar類的add方法將其添加到菜單條中。Disable方法可以使菜單成為不可選的,而enable方法使它成為可選的。在菜單中可以添加不同的內(nèi)容,可以是菜單項(xiàng)(MenuItem),可以是菜單選項(xiàng)(CheckboxMenuItem),可以是一個子菜單,也可以是分隔符??梢詫⒁粋€ActionListener加入到菜單對象,但這種做法不常用到。通常情況下,菜單只用來顯示和控制菜單條,而這一功能是由構(gòu)件本身自動提供的。3.MenuItem和CheckboxMenuItemMenuItem稱為菜單項(xiàng),而CheckboxMenuItem稱為菜單選項(xiàng)。它們是一個下拉菜單的具體內(nèi)容,是菜單樹的文本“葉”結(jié)點(diǎn)。一個菜單項(xiàng)一般代表一條命令,而一個菜單選項(xiàng)有選中和不選中兩種狀態(tài)。MenuItem類和CheckboxMenuItem類的構(gòu)造方法如下。MenuItem(Stringstr):構(gòu)造一個指定標(biāo)識的菜單項(xiàng)。特別地,當(dāng)一個菜單項(xiàng)的指定標(biāo)識為“-”時,它代表一個分隔行。CheckboxMenuItem(Stringstr):構(gòu)造一個指定標(biāo)識的菜單選項(xiàng)。通常將一個ActionListener加入到一個菜單項(xiàng)對象中,以提供菜單的行為??梢杂肐temListener接口來監(jiān)視菜單選項(xiàng)。當(dāng)該菜單選項(xiàng)狀態(tài)發(fā)生改變時,就會調(diào)用itemStateChanged()方法。下面是一個菜單設(shè)計的綜合范例。例5-21:菜單設(shè)計。importjava.awt.*;importjava.awt.event.*;publicclassMenuBar1extendsWindowAdapterimplementActionListener,ItemListener{Framewin1=newFrame("MenuBar1");MenuBarmyMenu=newMenuBar();MenufileMenu=newMenu("File");MenueditMenu=newMenu("Edit");MenuhelpMenu=newMenu("Help");enuopt=newMenu("Option");Menuchange=newMenu("ChangeColor");MenuItemfilenew=newMenuItem("New");MenuItemfileopen=newMenuItem("Open");MenuItemfilesave=newMenuItem("Save");MenuItemfileexit=newMenuItem("Quit");MenuItemoptblue=newMenuItem("Blue");MenuItemoptgreen=newMenuItem("Green");MenuItemoptred=newMenuItem("Red");CheckboxMenuItemfilemark=newCheckboxMenuItem("Mark",true);Labellabel=newLabel();MenuBar1(){win1.setLayout(newFlowLayout());win1.addWindowListener(this);myMenu.add(fileMenu);myMenu.add(editMenu);myMenu.add(opt);myMenu.add(helpMenu); fileMenu.add(filenew);fileMenu.add(fileopen);fileMenu.add(filesave);fileMenu.addSeparator();fileMenu.add(fileexit);fileexit.addActionListener(this);fileMenu.add(filemark);filemark.addItemListener(this);opt.add(change);opt.add(newMenuItem("ChangeTitle"));change.add(optblue);optblue.addActionListener(this);change.add(optgreen);optgreen.addActionListener(this);change.add(optred);optred.addActionListener(this);win1.add(label);win1.setMenuBar(myMenu);win1.setSize(400,200);win1.setVisible(true);}publicstaticvoidmain(String[]args){newMenuBar1();}publicvoidwindowClosing(WindowEvente){System.exit(0);}publicvoidactionPerformed(ActionEvente){if(e.getSource()==fileexit)System.exit(0);elseif(e.getSource()==optblue)win1.setBackground(Color.blue);elseif(e.getSource()==optgreen)win1.setBackground(Color.green);elseif(e.getSource()==optred)win1.setBackground(Color.red);}publicvoiditemStateChanged(ItemEvente){if(e.getSource()==filemark)if(filemark.getState())label.setText("Stateofmarkison!");elselabel.setText("Stateofmarkisoff!");}}運(yùn)行結(jié)果見圖5-20。圖5-205.8.2彈出式菜單(PopupMenu) 例5-22:彈出菜單設(shè)計。 importjava.awt.*; importjava.awt.event.*; publicclasspmenuextends WindowAdapterimplementsActionListener,MouseListener{Framewin1=newFrame("彈出式菜單應(yīng)用");
TextAreata1=newTextArea();PopupMenumymenu=newPopupMenu();MenuItemfilenew=newMenuItem("新建");
MenuItemfileopen=newMenuItem("打開");
MenuItemfilesave=newMenuItem("保存");
MenuItemfileexit=newMenuItem("退出");
pmenu(){win1.setLayout(newFlowLayout());win1.addWindowListener(this);mymenu.add(filenew);mymenu.add(fileopen);mymenu.add(filesave);mymenu.addSeparator();mymenu.add(fileexit);ta1.add(mymenu);win1.add(ta1);ta1.addMouseListener(this);filenew.addActionListener(this);fileopen.addActionListener(this);filesave.addActionListener(this);fileexit.addActionListener(this);win1.setSize(400,200);win1.setVisible(true);}publicstaticvoidmain(String[]args){newpmenu();}publicvoidwindowClosing(WindowEvente){System.exit(0);}
publicvoidactionPerformed(ActionEvente){ta1.append("你點(diǎn)擊了"+e.getActionCommand()+"命令。\n");}publicvoidmouseReleased(MouseEvente){if(e.isPopupTrigger())//判斷是否按下鼠標(biāo)右鍵mymenu.show(win1,e.getX(),e.getY());//在鼠標(biāo)位置顯示彈出菜單}
publicvoidmouseClicked(MouseEvente){}publicvoidmouseEntered(MouseEvente){}publicvoidmouseExited(MouseEvente){}publicvoidmou
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子圖書出版與運(yùn)營手冊
- 房屋租賃三方合同格式
- 焊接工藝與材料選擇作業(yè)指導(dǎo)書
- 成本合同管理大全
- 生物科技居間合同協(xié)議書
- 有關(guān)事業(yè)單位合同
- 2025年呼和浩特貨運(yùn)從業(yè)資格證模擬考試題下載
- 2025年南昌從業(yè)資格貨運(yùn)資格考試題庫答案解析
- 2025年龍巖a2駕駛證貨運(yùn)從業(yè)資格證模擬考試
- 電力市場策略合同(2篇)
- 2024年中考語文 (湖北專用)專題一 字音、字形課件
- 辦公軟件、計算機(jī)應(yīng)用知識培訓(xùn)教案
- 2023年全國高考乙卷歷史真題試卷及答案
- 數(shù)學(xué)小故事-二年級
- 腔鏡器械的清潔消毒與保養(yǎng)課件
- 奧數(shù)培訓(xùn)班課件
- 2022煤礦安全規(guī)程解讀課件
- SWITCH暗黑破壞神3超級金手指修改 版本號:2.7.7.92380
- 賞析小說語言(二)
- 【立高食品公司的償債能力現(xiàn)狀及問題分析(論文9000字)】
- 銷量返點(diǎn)合同范本
評論
0/150
提交評論