版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第5章圖形用戶界面5.1文本框和文本區(qū)5.2標簽5.3按鈕5.4選擇框5.5畫布5.6面板與布局設計5.7窗口5.8菜單5.9對話框5.1文本框和文本區(qū)5.1.1文本框及處理事件1.文本框的創(chuàng)建2.文本框處理事件 例5-2:兩個空白文本框,當在第一個文本框內輸入字符時,在文本框內顯示“*”號,輸入完畢按回車鍵后,在第二個文本框內顯示: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");}}}運行結果見圖5-2。圖5-15.1.2文本區(qū)及處理事件 例5-4:在Applet中添加一個文本框和一個文本區(qū),每當在文本框中輸入一個字符時,在文本區(qū)內就附加一行文本: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");}}}運行結果見圖5-4。圖5-45.2標簽 標簽(Label)是AWT構件中最簡單的一種構件,所謂標簽實質上就是一段文字,但它與文字不同的是它是一個對象,所以在每次repaint時,不用重新添加。標簽在GUI界面中通常作為提示信息使用。標簽構件的構造方法如下。(1)Label()構造一個空的標簽。(2)Label(Stringstr)構造一個以Stringstr為內容的標簽。(3)Label(Stringstr,intalign)定義一個以Stringstr為內容的標簽。5.3按鈕5.3.1按鈕
按鈕(Button)是GUI用戶界面中常用的元素,它是用戶輸入命令的一個重要工具。當用鼠標單擊某個按鈕該按鈕獲得焦點時,在鍵盤上按回車鍵都會導致一個命令的執(zhí)行。Button類有兩種構造方法。 (1)Button()構造一個沒有標簽的按鈕。 (2)Button(Stringstr)構造一個以Stringstr為標簽的按鈕。5.3.2按鈕處理事件 與按鈕有關的事件有兩類。1.ActionEvent 當用鼠標單擊按鈕,或當按鈕獲得焦點時在鍵盤上按回車鍵都導致該事件的發(fā)生,此時任何實現(xiàn)了被注冊為監(jiān)聽者的ActionListener接口的類,它的actionPerformed()方法將被調用。下面的程序范例在Applet上添加兩個命令按鈕,其標簽分別為“顯示”和“清除”,當單擊“顯示”按鈕時,在文本區(qū)中顯示:“你按下了顯示按鈕”,當按“清除”按鈕時則清除文本區(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你按下了"清除"按鈕");}}}運行結果見圖5-6。圖5-62.FocusEvent FocusEvent稱作焦點事件,它的發(fā)生是指鍵盤光標移動到構件上并且可以接受鍵盤的輸入。如果光標移動到一個按鈕上,稱作該按鈕獲得焦點,反之稱作失去焦點。當一個按鈕獲得焦點時單擊回車鍵即相當于用鼠標單擊該按鈕。如果一個文本框獲得焦點就可以在該文本框中輸入字符。例5-7:按鈕和文本框檢測焦點事件的例子。程序如下: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);}}運行結果見圖5-7。圖5-7在上面的例子中,只有button1和txt1注冊了焦點事件的事件監(jiān)聽者,它們共享同一個事件處理程序。如果焦點在button1或txt1上面,文本框txt2顯示焦點在哪個構件上(focusGaned),反之則指出無焦點(focusLost)。文本框txt1內顯示事件的參數(shù)字符串,它也能指出是否有焦點。另外,程序中的setLayout(newFlowLayout())語句是控制構件的布局用的,關于這個問題將在后面的章節(jié)中進行討論。5.4選擇框5.4.1選擇框1.下拉列表框(Choice)2.列表框(List)3.復選框(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ù)學","政治","外語","物理","化學"};
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你在復選框中的選擇是:"+e.getItem());}}運行結果見圖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);}}運行結果見圖5-13。圖5-135.6面板與布局設計5.6.1布局管理器1.FlowLayout類2.BorderLayout類 例5-15:邊界布局使用實例。
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);}}運行結果見圖5-15。圖5-153.GridLayout類4.布局設計中的絕對定位5.6.2面板 面板(Panel)是一個容器類,它可以包含其他的構件或另外的面板,并且可以使用布局管理器對其內部的構件進行管理。其實Aapplet本身就是面板的一個子類,它就是一個特殊的面板。面板缺省的布局方式是FlowLayout。面板的構造方法如下。(1)Panel()用缺省布局方式(FlowLayout)創(chuàng)建一個面板。(2)Panel(LayoutManagerlayout)用指定布局方式創(chuàng)建一個面板。面板的常用方法如下。(1)publicvoidadd(Componentcomp)為容器添加一個構件。(2)publicvoidremove(Componentcomp)為容器去除一個構件。(3)publicvoidsetSize(intwidth,intheight)為容器設定寬和高。(4)publicvoidsetFont(Fontf)為容器設定字體。(5)publicvoidsetLocation(intx,inty)設定定坐標位置。(6)publicvoidpaint(Graphicsg)畫出容器。(7)publicvoidupdate(Graphicsg)先清除容器的內容再調用paint方法重畫容器。(8)publicvoidrepaint()調用容器的updata方法。使用面板可以使構件的排列具有更大的靈活性??梢詫⒉煌臉嫾纸M,然后將同一組的構件放在一個面板上。下面是使用面板安排構件的一個例子。例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"));}}運行結果見圖5-18。圖5-18 在這個程序中,加入了若干個Panel類,在屏幕上顯示在同一行中的構件都屬于同一個Panel。布局管理器的缺省設置是FlowLayout,排列方式缺省為居中?,F(xiàn)在版面仍是FlowLayout,排列方式改成靠左。在各個Panel中,使用相同的版面。當然也可將各個Panel設置成不同的版面,這樣效果會不同。5.7窗口 窗口是一個最重要的容器類構件,在獨立的Java應用程序中,所有的用戶界面構件都是添加在窗口當中的。在Java的AWT工具包中有一個窗口(Window)類,但它生成的窗口沒有標題欄和改變窗口大小的按鈕,在實際的應用中經常使用的是它的兩個子類Frame(框架)和Dialog(對話框)??蚣埽‵rame)是帶標題和按鈕的頂層窗口。從類的層次上來看,它和Panel都屬于Container類。5.8菜單5.8.1菜單(Menu) 在GUI界面中,菜單一般位于窗口上方標題欄下面的位置,它是一個圖形用戶界面不可缺少的組成部分。在Java中這一部分是由以下幾個類實現(xiàn)的。1.MenuBarMenuBar又稱菜單條,一個菜單條構件是一個水平菜單,它只能加入到一個框架中,并成為所有菜單樹的根。MenuBar的構造方法是MenuBar(),在構造之后,還要用setMenuBar()方法將它設置成窗口的菜單條,然后按照從左到右的順序添加它所包含的下拉菜單。菜單條不支持監(jiān)聽者。作為普通菜單行為的一部分,在菜單條的區(qū)域中發(fā)生的預期事件會被自動處理。2.MenuMenu又稱菜單或下拉菜單,它可以加入到一個菜單條或者另一個菜單中。Menu類的構造方法有兩種。Menu(Stringstr)用給定的標識構造一個菜單。Menu(Stringstr,booleanb)用給定的標識構造一個菜單。如果布爾值為false,那么當釋放鼠標按鈕后,菜單項會消失。如果布爾值為true,那么釋放鼠標按鈕后,菜單項仍將顯示。在創(chuàng)建Menu對象后,使用MenuBar類的add方法將其添加到菜單條中。Disable方法可以使菜單成為不可選的,而enable方法使它成為可選的。在菜單中可以添加不同的內容,可以是菜單項(MenuItem),可以是菜單選項(CheckboxMenuItem),可以是一個子菜單,也可以是分隔符??梢詫⒁粋€ActionListener加入到菜單對象,但這種做法不常用到。通常情況下,菜單只用來顯示和控制菜單條,而這一功能是由構件本身自動提供的。3.MenuItem和CheckboxMenuItemMenuItem稱為菜單項,而CheckboxMenuItem稱為菜單選項。它們是一個下拉菜單的具體內容,是菜單樹的文本“葉”結點。一個菜單項一般代表一條命令,而一個菜單選項有選中和不選中兩種狀態(tài)。MenuItem類和CheckboxMenuItem類的構造方法如下。MenuItem(Stringstr):構造一個指定標識的菜單項。特別地,當一個菜單項的指定標識為“-”時,它代表一個分隔行。CheckboxMenuItem(Stringstr):構造一個指定標識的菜單選項。通常將一個ActionListener加入到一個菜單項對象中,以提供菜單的行為。可以用ItemListener接口來監(jiān)視菜單選項。當該菜單選項狀態(tài)發(fā)生改變時,就會調用itemStateChanged()方法。下面是一個菜單設計的綜合范例。例5-21:菜單設計。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!");}}運行結果見圖5-20。圖5-205.8.2彈出式菜單(PopupMenu) 例5-22:彈出菜單設計。 importjava.awt.*; importjava.awt.event.*; publicclasspmenuextends WindowAdapterimplementsActionListener,MouseListener{Framewin1=newFrame("彈出式菜單應用");
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("你點擊了"+e.getActionCommand()+"命令。\n");}publicvoidmouseReleased(MouseEvente){if(e.isPopupTrigger())//判斷是否按下鼠標右鍵mymenu.show(win1,e.getX(),e.getY());//在鼠標位置顯示彈出菜單}
publicvoidmouseClicked(MouseEvente){}publicvoidmouseEntered(MouseEvente){}publicvoidmouseExited(MouseEvente){}publicvoidmou
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐飲行業(yè)人才招聘總結
- 美容美發(fā)行業(yè)美工崗位任務
- 2024年稅務師題庫及答案【必刷】
- 2024年認識公頃教學教案
- 2024年秋季二年級數(shù)學上冊教案(17篇)
- 2024年牛頓第一定律教案
- 初中生請假安全協(xié)議書(2篇)
- 2024年計算機專業(yè)求職簡歷模版
- 核心語法知識夯基綜合測試-2025屆高三人教版英語一輪復習闖關攻略(解析版)
- 迎接信息化挑戰(zhàn) 打造“數(shù)字化校園”
- 2024地產項目國慶宋代美學古韻游園會(夢回大宋-國慶游園主題)活動策劃方案-55P
- 2024延遲退休政策詳解
- 2024年國家特種設備安全管理人員A證考試題庫(附答案)
- 2024-2030年中國疫苗佐劑行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- TCSIA 008-2021 建筑施工扣件式鋼管腳手架 安全檢查與驗收標準
- 人教版四年級上冊數(shù)學期末試卷(八套)
- 托育機構年度計劃
- DL∕T 516-2017 電力調度自動化運行管理規(guī)程
- 2024-2025學年廣西南寧市小學五年級數(shù)學上冊期末檢查試題及答案
- 語文版六年級語文上冊期中考試卷(可打印)
-
評論
0/150
提交評論