版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第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:兩個空白文本框,當在第一個文本框內輸入字符時,在文本框內顯示“*”號,輸入完畢按回車
2、鍵后,在第二個文本框內顯示:The end。,import java.awt.*;import java.applet.Applet;import java.awt.event.*;public class Ex6_2 extends Applet{ TextField tf1=new TextField(20); TextField tf2=new TextField(20);,public void init
3、(){ add(tf1); tf1.setEchoChar('*'); add(tf2); tf1Listener al = new tf1Listener(); tf1.addActionListener(a1); }class tf1Listener implements ActionListener{,public void
4、 actionPerformed(ActionEvent e) { tf2.setText("The end"); } }}運行結果見圖5-2。,圖5-1,5.1.2 文本區(qū)及處理事件例5-4:在Applet中添加一個文本框和一個文本區(qū),每當在文本框中輸入一個字符時,在文本區(qū)內就附加一行文本:The text is changed。import java.aw
5、t.*;import java.applet.Applet;import java.awt.event.*;,public class Ex6_4 extends Applet{ TextField tf1=new TextField(20); TextArea ta1=new TextArea (null,6,40); public void init(){ add(tf1);
6、 add(ta1); tf1.addTextListener(new TextL()); } class TextL implements TextListener{,public void textValueChanged(TextEvent e) { ta1.append("\nThe text is changed"); }
7、 }}運行結果見圖5-4。,圖5-4,5.2 標 簽,標簽(Label)是AWT構件中最簡單的一種構件,所謂標簽實質上就是一段文字,但它與文字不同的是它是一個對象,所以在每次repaint時,不用重新添加。標簽在GUI界面中通常作為提示信息使用。,標簽構件的構造方法如下。(1)Label() 構造一個空的標簽。(2)Label(String str) 構造一個以String str為內容的標簽。(3)Label
8、(String str,int align) 定義一個以String str為內容的標簽。,5.3 按 鈕,5.3.1 按鈕按鈕(Button)是GUI用戶界面中常用的元素,它是用戶輸入命令的一個重要工具。當用鼠標單擊某個按鈕該按鈕獲得焦點時,在鍵盤上按回車鍵都會導致一個命令的執(zhí)行。Button類有兩種構造方法。(1)Button() 構造一個沒有標簽的按鈕。(2)Button(String str) 構造一
9、個以String str為標簽的按鈕。,5.3.2 按鈕處理事件與按鈕有關的事件有兩類。1.ActionEvent當用鼠標單擊按鈕,或當按鈕獲得焦點時在鍵盤上按回車鍵都導致該事件的發(fā)生,此時任何實現(xiàn)了被注冊為監(jiān)聽者的ActionListener接口的類,它的actionPerformed()方法將被調用。,下面的程序范例在Applet上添加兩個命令按鈕,其標簽分別為“顯示”和“清除”,當單擊“顯示”按鈕時,在文本區(qū)中顯示:“
10、你按下了顯示按鈕”,當按“清除”按鈕時則清除文本區(qū)中顯示的字符。例5-6:文本區(qū)事件處理。import java.awt.*;import java.applet.Applet;import java.awt.event.*;,public class Ex6_6 extends Applet{ Button b1=new Button("顯示"); Button b2=new Button
11、("清除"); TextArea ta1=new TextArea (null,6,40); public void init(){ add(b1); add(b2); add(ta1); b1.addActionListener(new ButtenL()); b2.addActionListener(new But
12、tenL()); },class ButtenL implements ActionListener{ public void actionPerformed(ActionEvent e) { if (e.getSource()==b1) ta1.append ("\n你按下了"顯示"按鈕");,else
13、 ta1.append ("\n你按下了"清除"按鈕"); } }}運行結果見圖5-6。,圖5-6,2.FocusEventFocusEvent稱作焦點事件,它的發(fā)生是指鍵盤光標移動到構件上并且可以接受鍵盤的輸入。如果光標移動到一個按鈕上,稱作該按鈕獲得焦點,反之稱作失去焦點。當一個按鈕獲得焦點時單擊回車鍵即相當于用鼠標單擊該按鈕。如果一個文本框
14、獲得焦點就可以在該文本框中輸入字符。,例5-7:按鈕和文本框檢測焦點事件的例子。程序如下:import java.awt.*;import java.applet.Applet;import java.awt.event.*;,public class Ex6_7 extends Applet{ TextField txt1 = new TextField("txt1",50); TextFie
15、ld txt2 = new TextField("txt2",50); Button button1=new Button("button1"); Button button2=new Button("button2"); class Keytry implements FocusListener{,public void focusGained(Foc
16、usEvent e) { txt1.setText("txt1:paramString()="+e.paramString()); if (e.getSource()==txt1) txt2.setText("txt2:focus is on txt1 "); else
17、 txt2.setText("txt2:focus is on button1"); },public void focusLost(FocusEvent e) { txt1.setText("txt1:paramString()="+e.paramString()); txt2.setText("txt2:focu
18、s lost outside button1 or txt1"); } } Keytry al = new Keytry();,public void init(){ setLayout(new FlowLayout()); txt1.addFocusListener(al); button1.addFocusListener(al);
19、 add(button1); add(button2); add(txt1); add(txt2); }},運行結果見圖5-7。,圖5-7,在上面的例子中,只有button1和txt1注冊了焦點事件的事件監(jiān)聽者,它們共享同一個事件處理程序。如果焦點在button1或txt1上面,文本框txt2顯示焦點在哪個構件上(focusGaned),反之則指出無焦點(focusLost)
20、。文本框txt1內顯示事件的參數(shù)字符串,它也能指出是否有焦點。另外,程序中的setLayout(new FlowLayout())語句是控制構件的布局用的,關于這個問題將在后面的章節(jié)中進行討論。,5.4 選 擇 框,5.4.1 選擇框1.下拉列表框(Choice)2.列表框(List)3.復選框(Checkbox)4.單選框(Checkbox group-Radio Button),5.4.2 選擇框處理事件例5
21、-12:選擇框檢測ItemEvent事件的例子。import java.awt.*;import java.applet.Applet;import java.awt.event.*;,public class Ex6_12 extends Applet implements ItemListener{ TextArea ta1=new TextArea (null,6,40); String subjec
22、t[]={"語文","數(shù)學","政治","外語","物理","化學"}; Checkbox cb[]=new Checkbox[6]; public void init(){ add(new Label("請選擇:"));,for(int I=0;I<6;I++
23、){ cb[I]= new Checkbox(subject[I]); add(cb[I]); cb[I].addItemListener(this); } add(ta1); },public void itemStateChanged(ItemEvent e) { ta1.append("\n你在
24、復選框中的選擇是:"+e.getItem()); }}運行結果見圖5-12。,圖5-12,5.5 畫 布,例5-13:創(chuàng)建一個畫布。import java.awt.*;import java.applet.Applet; import java.util.*; public class mycanvas extends Applet {,public void init() {
25、 MyCanvas1 mc = new MyCanvas1(); mc.setBackground(Color.green); mc.setSize(150,150); add(mc); }},class MyCanvas1 extends Canvas{ public void paint(Graphics g){ g.fillOval(40,20,8
26、0,80); }}運行結果見圖5-13。,圖5-13,5.6 面板與布局設計,5.6.1 布局管理器1.FlowLayout類2.BorderLayout類例5-15:邊界布局使用實例。import java.awt.*;import java.applet.Applet;,public class Ex6_15 extends Applet { public void init(){
27、 setLayout(new BorderLayout(0,0)); add(new Button("North"),BorderLayout.NORTH); add(new Button("South"),BorderLayout.SOUTH); add(new,Button("East"),BorderLayout.E
28、AST); add(new Button("West"),BorderLayout.WEST); add(new Button("Center"),BorderLayout.CENTER); }}運行結果見圖5-15。,圖5-15,3.GridLayout類4.布局設計中的絕對定位,5.6.2 面板面板(Panel)是一個容器類,它可以包含其他
29、的構件或另外的面板,并且可以使用布局管理器對其內部的構件進行管理。其實Aapplet本身就是面板的一個子類,它就是一個特殊的面板。面板缺省的布局方式是FlowLayout。,面板的構造方法如下。(1)Panel() 用缺省布局方式(FlowLayout)創(chuàng)建一個面板。(2)Panel(LayoutManager layout) 用指定布局方式創(chuàng)建一個面板。,面板的常用方法如下。(1)public void add(Compon
30、ent comp) 為容器添加一個構件。(2)public void remove(Component comp) 為容器去除一個構件。(3)public void setSize(int width,int height) 為容器設定寬和高。(4)public void setFont(Font f) 為容器設定字體。,(5)public void setLocation(int x,int y) 設定定坐標位置。(
31、6)public void paint(Graphics g) 畫出容器。(7)public void update(Graphics g) 先清除容器的內容再調用paint方法重畫容器。(8)public void repaint() 調用容器的updata方法。,使用面板可以使構件的排列具有更大的靈活性。可以將不同的構件分組,然后將同一組的構件放在一個面板上。下面是使用面板安排構件的一個例子。例5-18:面板的使用i
32、mport java.awt.*;import java.applet.Applet;,public class Ex6_18 extends Applet { public void init() { setLayout(new FlowLayout(FlowLayout.LEFT)); Panel p1 = new Panel(); add(p1); p1.a
33、dd(new Label("Your name: ")); p1.add(new TextField(30));,Panel p2 = new Panel(); add(p2); p2.add(new Label("Sex: ")); CheckboxGroup cbg = new CheckboxGroup(); p
34、2.add(new Checkbox("Male ", cbg, true)); p2.add(new Checkbox("Female ", cbg, false));,Panel p3 = new Panel(); add(p3); p3.add(new Label("What are you like: "));
35、 p3.add(new Checkbox("Apple ")); p3.add(new Checkbox("orange ")); p3.add(new Checkbox("Strawberry ")); p3.add(new Checkbox("Peach "));,Panel p4 = new Pane
36、l(); add(p4); p4.add(new Label("How much do you eat them per week: ")); Choice c = new Choice(); c.addItem("less than 1kg "); c.addItem("1kg to 3kg");
37、 c.addItem("more than 3kg"); p4.add(c);,Panel p5 = new Panel(); add(p5); p5-add(new Label("What's your opnion of eating fruit: ")); add(new TextArea("I
38、 think ",3,60));,Panel p6 = new Panel(); add(p6); p5-add(new Button(" OK ")); p5-add(new Button("Clear ")); }}運行結果見圖5-18。,圖5-18,在這個程序中,加入了若干個Panel類,在屏幕上顯示在同一行中的構件
39、都屬于同一個Panel。布局管理器的缺省設置是FlowLayout,排列方式缺省為居中?,F(xiàn)在版面仍是FlowLayout,排列方式改成靠左。在各個Panel中,使用相同的版面。當然也可將各個Panel設置成不同的版面,這樣效果會不同。,5.7 窗 口,窗口是一個最重要的容器類構件,在獨立的Java應用程序中,所有的用戶界面構件都是添加在窗口當中的。在Java的AWT工具包中有一個窗口(Window)類,但它生成的窗口沒有標題欄和
40、改變窗口大小的按鈕,在實際的應用中經常使用的是它的兩個子類Frame(框架)和Dialog(對話框)。框架(Frame)是帶標題和按鈕的頂層窗口。從類的層次上來看,它和Panel都屬于Container類。,5.8 菜 單,5.8.1 菜單(Menu)在GUI界面中,菜單一般位于窗口上方標題欄下面的位置,它是一個圖形用戶界面不可缺少的組成部分。在Java中這一部分是由以下幾個類實現(xiàn)的。,1.MenuBarMenuBar又
41、稱菜單條,一個菜單條構件是一個水平菜單,它只能加入到一個框架中,并成為所有菜單樹的根。MenuBar的構造方法是MenuBar(),在構造之后,還要用setMenuBar()方法將它設置成窗口的菜單條,然后按照從左到右的順序添加它所包含的下拉菜單。菜單條不支持監(jiān)聽者。作為普通菜單行為的一部分,在菜單條的區(qū)域中發(fā)生的預期事件會被自動處理。,2.MenuMenu又稱菜單或下拉菜單,它可以加入到一個菜單條或者另一個菜單中。Menu類的構造
42、方法有兩種。Menu(String str) 用給定的標識構造一個菜單。,Menu(String str,boolean b) 用給定的標識構造一個菜單。如果布爾值為false,那么當釋放鼠標按鈕后,菜單項會消失。如果布爾值為true,那么釋放鼠標按鈕后,菜單項仍將顯示。在創(chuàng)建Menu對象后,使用MenuBar類的add方法將其添加到菜單條中。Disable方法可以使菜單成為不可選的,而enable方法使它成為可選的。,在菜單中
43、可以添加不同的內容,可以是菜單項(MenuItem),可以是菜單選項(CheckboxMenuItem),可以是一個子菜單,也可以是分隔符??梢詫⒁粋€ActionListener加入到菜單對象,但這種做法不常用到。通常情況下,菜單只用來顯示和控制菜單條,而這一功能是由構件本身自動提供的。,3.MenuItem和CheckboxMenuItemMenuItem稱為菜單項,而CheckboxMenuItem稱為菜單選項。它們是一個下拉菜
44、單的具體內容,是菜單樹的文本“葉”結點。一個菜單項一般代表一條命令,而一個菜單選項有選中和不選中兩種狀態(tài)。MenuItem類和CheckboxMenuItem類的構造方法如下。,MenuItem(String str):構造一個指定標識的菜單項。特別地,當一個菜單項的指定標識為“-”時,它代表一個分隔行。CheckboxMenuItem(String str):構造一個指定標識的菜單選項。通常將一個ActionListener加入
45、到一個菜單項對象中,以提供菜單的行為。可以用ItemListener接口來監(jiān)視菜單選項。當該菜單選項狀態(tài)發(fā)生改變時,就會調用itemStateChanged()方法。,下面是一個菜單設計的綜合范例。例5-21:菜單設計。import java.awt.*;import java.awt.event.*;public class MenuBar1 extends WindowAdapter implement Action
46、Listener,ItemListener{ Frame win1 = new,Frame("MenuBar1"); MenuBar myMenu=new MenuBar(); Menu fileMenu=new Menu("File"); Menu editMenu=new Menu("Edit"); Menu helpMenu=
47、new Menu("Help"); enu opt = new Menu("Option"); Menu change = new Menu ("Change Color"); MenuItem filenew=new,MenuItem("New"); MenuItem fileopen=new MenuItem("
48、Open"); MenuItem filesave=new MenuItem("Save"); MenuItem fileexit=new MenuItem("Quit"); MenuItem optblue=new,MenuItem("Blue"); MenuItem optgreen=new MenuItem("Green
49、"); MenuItem optred=new MenuItem("Red"); CheckboxMenuItem filemark=new CheckboxMenuItem("Mark",true); Label label=new Label();,MenuBar1(){ win1.setLayout(new FlowLayout());
50、 win1.addWindowListener(this); myMenu.add(fileMenu); myMenu.add(editMenu); myMenu.add(opt); myMenu.add(helpMenu);,fileMenu.add(filenew); fileMenu.add(fileopen); fileMe
51、nu.add(filesave); fileMenu.addSeparator(); fileMenu.add(fileexit); fileexit.addActionListener(this); fileMenu.add(filemark); filemark.addItemListener(this);,opt.add(change);
52、 opt.add(new MenuItem("Change Title")); change.add(optblue); optblue.addActionListener(this); change.add(optgreen); optgreen.addActionListener(this); change.add(optred);
53、,optred.addActionListener(this); win1.add(label); win1.setMenuBar(myMenu); win1.setSize(400,200); win1.setVisible(true); } public static void main(String[] args) { new Menu
54、Bar1(); },public void windowClosing(WindowEvent e) { System.exit(0); } public void actionPerformed(ActionEvent e){ if(e.getSource()==fileexit) System.exit(0);,else if(e.getSource(
55、)==optblue) win1.setBackground(Color.blue); else if(e.getSource()==optgreen) win1.setBackground(Color.green); else if(e.getSource()==optred) win1.setBackground(Color.re
56、d); },public void itemStateChanged(ItemEvent e){ if(e.getSource()==filemark) if(filemark.getState()) label.setText("State of mark is on! ");,else label.se
57、tText("State of mark is off! "); }}運行結果見圖5-20。,圖5-20,5.8.2 彈出式菜單(PopupMenu)例5-22:彈出菜單設計。import java.awt.*;import java.awt.event.*;public class pmenu extends WindowAdapter implements,ActionLi
58、stener,MouseListener{ Frame win1 = new Frame("彈出式菜單應用"); TextArea ta1=new TextArea(); PopupMenu mymenu=new PopupMenu(); MenuItem filenew=new MenuItem("新建");,MenuItem fileopen=new Menu
59、Item("打開"); MenuItem filesave=new MenuItem("保存"); MenuItem fileexit=new MenuItem("退出");,pmenu (){ win1.setLayout(new FlowLayout()); win1.addWindowListener(this);
60、 mymenu.add(filenew); mymenu.add(fileopen); mymenu.add(filesave); mymenu.addSeparator(); mymenu.add(fileexit);,ta1.add(mymenu); win1.add(ta1); ta1.addMouseListener(this)
61、; filenew.addActionListener(this); fileopen.addActionListener(this); filesave.addActionListener(this); fileexit.addActionListener(this); win1.setSize(400,200); win1.setVisi
62、ble(true); },public static void main(String[] args) { new pmenu(); } public void windowClosing(WindowEvent e) { System.exit(0); },public void actionPerformed(ActionEvent e){ ta1.a
63、ppend("你點擊了"+e.getActionCommand()+"命令。\n"); } public void mouseReleased (MouseEvent e){ if(e.isPopupTrigger()) //判斷是否按下鼠標右鍵,mymenu.show(win1,e.getX(),e.getY());//在鼠標位置顯示彈出菜單 }
64、public void mouseClicked (MouseEvent e){} public void mouseEntered(MouseEvent e){},public void mouseExited(MouseEvent e){} public void mousePressed(MouseEvent e){}}運行結果見圖5-21。,圖5-21,5.9 對 話 框,在GUI圖形用戶界面中,對話
65、框是一個十分重要的構件,主要用于顯示提示信息和接收用戶輸入,程序與用戶的交互主要是通過對話框來實現(xiàn)的。從外觀上看,對話框與窗口十分類似,但它一般是一個臨時的窗口,所以,在對話框中一般不需要菜單條,也不需要改變窗口大小。,對話框是由Dialog類實現(xiàn)的,從類的繼承關系上看,它與Frame類都是Window類的子類,而Window類是Container類的子類,Container類又是Component類的子類,因此對話框可以繼承上述父類的
66、所有方法。特別地,作為容器類的一個子類,我們可以向對話框中添加任意的構件。,對話框與框架的區(qū)別在于它必須有一個父窗口,當父窗口關閉時,它其中的對話框也被關閉。另外,對話框可以是無模式和模式的。對于無模式對話框,用戶可以同時與框架和對話框交互,而模式對話框在被關閉前將阻塞包括框架在內的其他所有應用程序的輸入。由于對話框是窗口的子類,所以它的缺省布局管理器是Border Layout。,5.9.1 自定義對話框Dialog類的構造方
67、法有兩種。(1)Dialog(Frame win,boolean b) 構造一個非可視的對話框,用戶可通過show方法將其變?yōu)榭梢暤?。?)Dialog(Frame win,String str,boolean b):構造一個非可視的對話框。,5.9.2 文件對話框文件對話框(FileDialog)是對文件進行存取時出現(xiàn)的對話框,它是由FileDialog類實現(xiàn)的,它的構造方法有兩種。(1)FileDialog(Fr
68、ame parent,String titel) 構造一個讀文件對話框。Frame類型參數(shù)代表文件對話框的擁有者,String類型參數(shù)作為文件對話框的標題。,(2)FileDialog(Frame parent,String titel,int mode) 構造一個文件對話框。int類型參數(shù)確定是讀文件對話框還是寫文件對話框,它的值可以是FileDialog.LOAD或FileDialog.SAVE。其余參數(shù)含義與上相同。同樣在構造
69、完一個文件對話框之后,它仍是非可視的,需要使用show方法使其變?yōu)榭梢暤?。例如:FileDialog fd = new FileDialog(window, "Open File", FileDialog.SAVE);fd.show();,為創(chuàng)建一個寫文件對話框。其父窗口是window,標題是Open File 。通常并不需要處理FileDialog的事件,但需要調用一些常用的函數(shù)進行文件操作。常用的文件操作函
70、數(shù)如下:public String getDirectory() 返回文件對話框中的路徑。public void setDirectory(String dir) 設置路徑。,public string getFile() 返回文件名。public void setFile(String file) 設置默認文件名。public FilenameFilter(FilenameFilter filter) 返回當前文件過
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第5章 java圖形用戶界面
- 12。java與圖形
- java基礎教程
- java3d教程
- java語言基礎教程
- java面向對象教程筆記01
- java圖形圖象處理(論文+系統(tǒng))
- java就業(yè)培訓教程源代碼
- java教程全集-電子版
- java-jdbc學習教程-由淺入深
- java程序設計培訓教程
- java_web課程設計報告--論壇系統(tǒng)用戶注冊界面的設計
- java課程設計-時鐘圖形模擬
- 第十二講 java與圖形
- java基礎知識速成教程
- java學習教程-基礎入門及提高
- 微信公眾賬號開發(fā)教程(java)
- 第7章圖形用戶界面
- 第6章 圖形用戶界面
- java簡明教程-習題參考答案
評論
0/150
提交評論