圖形用戶界面_第1頁
圖形用戶界面_第2頁
圖形用戶界面_第3頁
圖形用戶界面_第4頁
圖形用戶界面_第5頁
已閱讀5頁,還剩120頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Java語言程序設(shè)計圖形用戶界面設(shè)計n 設(shè)計原則n 容器與布局n 自定義成分n 標(biāo)準(zhǔn)組件n 事件處理JAVA語言程序設(shè)計清華大學(xué) 劉寶林3圖形用戶界面(GUI)l字符界面 用字符串、命令行的方式與用戶交互l圖形用戶界面:Graphics User Interface 用直觀的圖形來表示數(shù)據(jù) 用直觀、方便的GUI標(biāo)準(zhǔn)組件來接收命令 GUI組成成分的標(biāo)準(zhǔn)化使用圖形的方式借助菜單、按鈕等標(biāo)準(zhǔn)界面元素和鼠標(biāo)操作,來幫助用戶方便地向計算機系統(tǒng)發(fā)出命令,啟動操作,并將系統(tǒng)運行的結(jié)果同樣以圖形的方式顯示給用戶。JAVA語言程序設(shè)計清華大學(xué) 劉寶林4用戶界面設(shè)計原則l控制權(quán)在用戶l界面與操作的風(fēng)格一致性l寬容

2、(容錯)性l簡潔與美觀并重JAVA語言程序設(shè)計清華大學(xué) 劉寶林5圖形用戶界面簡介l圖形用戶界面的構(gòu)成 容器:布局、安排 標(biāo)準(zhǔn)組件 用戶自定義成分l設(shè)計&實現(xiàn)圖形用戶界面的工作 創(chuàng)建GUI各組成成分,并安排從屬位置關(guān)系,根據(jù)具 體需要對其進行排序,構(gòu)成完整外觀。 定義GUI各成分對不同事件的響應(yīng),實現(xiàn)與用戶的交 互功能。JAVA語言程序設(shè)計清華大學(xué) 劉寶林6界面構(gòu)成容器用戶自定義成分v 容器是用來組織其他界面成分和元素的單元。一般一個圖 形用戶界面對應(yīng)一個復(fù)雜容器。如一窗口v 標(biāo)準(zhǔn)組件是圖形用戶界面的最小單位,它里面不再包含其他 的成分。如單選按鈕,文本框,菜單v 用戶自定義成分是指編程

3、人員根據(jù)用戶需要設(shè)計一些用戶 自定義的圖形界面成分。如繪制幾何圖形 標(biāo)準(zhǔn)組件JAVA語言程序設(shè)計清華大學(xué) 劉寶林7界面元素l容器是用來組織其他界面成分和元素的單元。 可以形成容器的層次,構(gòu)筑復(fù)雜結(jié)構(gòu) Window(Frame、Applet、Dialog )l組件是圖形用戶界面的基本單位,它里面不再包含其他的成分。 GUI組件是圖形用戶界面標(biāo)準(zhǔn)化的結(jié)果。常用的組件有: 選擇類的: 單選按鈕、復(fù)選按鈕、下拉列表; 文字處理類的: 文本框、文本區(qū)域 命令類的: 按鈕、菜單等 GUI組件的作用是完成與用戶的交互。包括接收用戶的 命令、文本或選擇輸入,向用戶顯示一段文本或一個圖 形等。JAVA語言程序設(shè)

4、計清華大學(xué) 劉寶林8界面元素l使用組件通常需要如下的步驟 創(chuàng)建某組件類的對象,指定其大小等屬性。 使用某種布局策略,將該組件對象加入到某個容器中的 某指定位置處。 將該組件對象注冊給它所能產(chǎn)生的事件對應(yīng)的事件監(jiān)聽 者,重載事件的處理方法,實現(xiàn)利用該組件對象與用戶 交互的功能。l用戶自定義成分 顯示文字、繪制圖形、顯示圖象 不能像標(biāo)準(zhǔn)組件一樣被系統(tǒng)識別和承認,只起裝飾作用。 不能響應(yīng)用戶的動作,不具有交互功能。JAVA語言程序設(shè)計清華大學(xué) 劉寶林9圖形用戶界面(GUI)lJava的圖形用戶界面編程: 為方便圖形用戶界面的開發(fā),設(shè)計了專門的類庫來生成各 種標(biāo)準(zhǔn)圖形界面元素和處理圖形界面的各種事件,

5、這個用 來生成圖形界面的類庫就是java.awt包。AWT是abstract window toolkit抽象窗口工具集的縮寫。 AWT類庫中的各種操作被定義在一個窗口中進行,開發(fā)人 員用AWT開發(fā)出的圖形用戶界面可以適用于所有的平臺系 統(tǒng)。JAVA語言程序設(shè)計清華大學(xué) 劉寶林10AWT包lAbstract Window Toolkit(抽象窗口工具集) 提供各種構(gòu)成GUI的標(biāo)準(zhǔn)構(gòu)件。 AWT類庫中的各種操作被定義在一個窗口中進行的。 抽取不同軟硬件平臺中所實現(xiàn)的窗口的公共特性。 依賴于具體平臺系統(tǒng)實現(xiàn):顯示效果可能不同。l提供與機器無關(guān)的基本GUI標(biāo)準(zhǔn)組件 選擇類組件:單選按鈕、復(fù)選框、下拉

6、選單、列表框 文字處理類組件:標(biāo)簽、文本框、文本域。 命令類組件:按鈕、工具欄、菜單等。JAVA語言程序設(shè)計清華大學(xué) 劉寶林11從一個簡單窗口開始l創(chuàng)建GUI應(yīng)用程序 Frame必不可少 它是帶標(biāo)題的頂層窗口,是 構(gòu)建應(yīng)用程序圖形界面的基 礎(chǔ),它為應(yīng)用程序?qū)崿F(xiàn)人機 交互提供了對話窗口l先來建一個空的窗口應(yīng)用: Empty.java 注意:一定要處理關(guān)閉窗口 的事件JAVA語言程序設(shè)計清華大學(xué) 劉寶林12import java.awt.*; /must import to use GUI /must extends Frame in an applicationpublic class Empt

7、y extends Frame / 暫時采用1.0.2的事件處理方法,關(guān)閉窗口 public boolean handleEvent(Event evt) /根據(jù)Event類的對象evt的id值來判斷發(fā)生事件的種類 if(evt.id= =Event.WINDOW_DESTROY) System.exit(0); / return的返回值表示將余下的事件處理交給父類的handleEvent( ) / 處理,從而保證對事件的正常處理 return super.handleEvent(evt); public static void main(String args)Frame f=new Emp

8、ty();f.setSize(300,200);f.setVisible(true); JAVA語言程序設(shè)計清華大學(xué) 劉寶林13繪制用戶自定義成分l用戶自定義成分屬于構(gòu)成GUI的非標(biāo)準(zhǔn)部分 無法響應(yīng)用戶事件 一般僅僅起背景裝飾、輸出效果突出的作用lJava中的用戶自定義成分 顯示文字 繪制圖形 顯示圖片JAVA語言程序設(shè)計清華大學(xué) 劉寶林14繪制用戶自定義成分l一般在容器中(窗口)或畫布上繪制。l利用Java.awt類庫中的類及其方法繪制用戶自定義的 圖形界面成分。 lGraphics類包含很多繪制圖形和文字的方法 。l首先要獲得Graphics類的實例,然后利用其方法繪制。lGraphics

9、類的實例一般作為相關(guān)方法的參數(shù)傳遞進來: paint(Graphics g)lJava程序圖形界面的 坐標(biāo)設(shè)置原點(0,0)X軸Y軸JAVA語言程序設(shè)計清華大學(xué) 劉寶林15繪制圖形及其相關(guān)方法ldrawLine(x1,y1,x2,y2) /直線ldrawRect(x,y,w,h) /矩形ldrawOval(x,y,w,h) /圓或橢圓lfillOval(x,y,w,h) /實心圓或橢圓ldrawPolygon(X坐標(biāo)數(shù)組,Y坐標(biāo)數(shù)組,頂點個數(shù)) /畫多邊形ldrawArc (x,y,w,h,開始角度,弧度角度) lsetColor(Color c) /設(shè)置顏色lsetFont(Font f)

10、/設(shè)置字體lgetColor()lgetFont()JAVA語言程序設(shè)計清華大學(xué) 劉寶林16繪制圖形及其相關(guān)方法l從(x1,y1)到(x2,y2)畫直線 drawLine(x1,y1,x2,y2) 參數(shù)均為intl畫弧線drawArc(x,y,w,h,) 參數(shù)均為int x,y為繪制弧形的左上角的坐標(biāo); w,h為弧形的寬度和高 度;為弧形的起始角,為弧形的弧度, 為正,表順 時針方向; 為負,表逆時針方向。l以(x,y)為左上角、w為寬度、h為高度畫矩形 drawRect(x,y,w,h) 參數(shù)均為intlfillRect(x,y,w,h)、clearRect(x,y,w,h)JAVA語言程序

11、設(shè)計清華大學(xué) 劉寶林17繪制圖形及其相關(guān)方法l畫圓或橢圓 drawOval(x,y,w,h) x,y為繪制圓或橢圓的左上角的坐標(biāo),w,h確定了橢圓的 寬度和高度l畫實心圓或橢圓 fillOval(x,y,w,h)l畫多邊形 drawPolygon(X坐標(biāo)數(shù)組,Y坐標(biāo)數(shù)組,頂點個數(shù))JAVA語言程序設(shè)計清華大學(xué) 劉寶林18繪制圖形及其相關(guān)方法例子: sanmao.java10 畫人像 JAVA語言程序設(shè)計清華大學(xué) 劉寶林19 /畫頭部,橢圓方法drawOvalg.setColor(Color.black); /setColor用來設(shè)置要使用的顏色 g.drawOval(40,40,120,150

12、);./畫頭發(fā),直線方法drawLine,畫弧方法drawArcg.drawLine(100,10,100,60);g.drawArc(110,20,100,80,90,90);./畫嘴巴,填充畫弧方法fillArcg.fillArc(60,130,80,40,180,180);./畫耳朵,填充橢圓方法fillOval,復(fù)制圖形方法copyAreag.fillOval(25,92,15,30);g.copyArea(25,92,15,30,136,0); /拷貝某區(qū)域的圖形至另一區(qū)域./畫身體,多邊形方法fillPolygong.fillPolygon(polygon_x,polygon_y,

13、polygon_pt_num);JAVA語言程序設(shè)計清華大學(xué) 劉寶林20顯示文字l字體顯示效果類:Font 一個Font類的對象表示了一種字體顯示效果,包括字體類型、風(fēng)格和字號。 Font mf = new Font(String 字體,int 風(fēng)格,int 字號); 字體:TimesRoman, Courier, Arial等 風(fēng)格:三個常量lFont.PLAIN, Font.BOLD, Font.ITALIC 字號:字的大?。ò鯏?shù)) 設(shè)置當(dāng)前使用的字體:setFont(Font fn) 獲取當(dāng)前使用的字體:getFont()l例:UseFonts.javaJAVA語言程序設(shè)計清華大學(xué) 劉寶

14、林21String FontName = TimesRoman,Courier,Arial;int FontStyle = Font.PLAIN, Font. BOLD, Font.ITALIC;String StyleName = PLAIN, BOLD, ITALIC ;public void paint( Graphics g) for ( int i=0; i3; i+) for ( int j=0; j1) /雙擊時清除向量中各點m_vLocs.removeAllElements(); else /單擊時在向量中增加一點m_vLocs.addElement(e.getPoint();

15、 repaint(); /重新繪制一次 class move extends MouseMotionAdapter /鼠標(biāo)移動監(jiān)聽者類public void mouseMoved(MouseEvent e) /響應(yīng)移動 m_CursorLoc = new Point(e.getX(),e.getY(); repaint(); /重新繪制一次 JAVA語言程序設(shè)計清華大學(xué) 劉寶林71事件類lActionEvent類:屬于動作事件,包括:點擊按鈕; 雙擊一個列表中的選項;選擇菜單項;在文本框中 按回車。最典型的例子是:鼠標(biāo)點擊按鈕所產(chǎn)生的 事件,經(jīng)ActionListener接口觸發(fā)一連串動作,再

16、由 actionPerformed()方法完成這些動作。 e.getSource() 返回事件發(fā)生的對象(名) e.getActionCommand() 返回按扭名(動作事件的命令字符串)lActionListener 接口 public void actionPerformed(ActionEvent e)JAVA語言程序設(shè)計清華大學(xué) 劉寶林72圖形用戶界面例import java.awt.*;import java.awt.event.*;public class a public static void main(String args) MyFrame form1 = new MyFr

17、ame(); class MyFrame extends Frame MyFrame() super(窗口標(biāo)題); setSize(200,100); setFont(new Font(TimesRoman,Font.BOLD,20);JAVA語言程序設(shè)計清華大學(xué) 劉寶林73圖形用戶界面例 setLayout(new FlowLayout(); Button b = new Button(close); add(b); b.addActionListener(new Bprocess(); setVisible(true); class Bprocess implements ActionLi

18、stener public void actionPerformed(ActionEvent e) System.exit(0); JAVA語言程序設(shè)計清華大學(xué) 劉寶林74監(jiān)聽者類l某個類可以兼職也可以專職做這件事(實現(xiàn)監(jiān)聽者 接口)。l一個類若實現(xiàn)一個接口,必須實現(xiàn)接口的全部方法。 例如:ActionListener接口只有一個方法: void actionPerformed(ActionEvent e) l實現(xiàn)接口的類可以是: 一般類 內(nèi)部類 匿名類3 4 內(nèi)部類5 匿名類JAVA語言程序設(shè)計清華大學(xué) 劉寶林75事件處理有關(guān)問題l有哪些事件類 (java.awt.event) ? l每個事

19、件類的監(jiān)聽者接口?l每個監(jiān)聽者接口規(guī)定的方法?l多方法的監(jiān)聽者接口的適配器(實現(xiàn)接口的抽象類) 是什么?l組件的事件注冊(委托)方法?JAVA語言程序設(shè)計清華大學(xué) 劉寶林76窗口事件l關(guān)閉窗口框時引發(fā) WindowEvent事件l注冊addWindowListener(new Wclose();l定義監(jiān)聽者類 class Wclose implements WindowListener public void windowClosing(WindowEvent e) System.exit(0); lWindowListener類有7 個方法,必須都實現(xiàn)lWindowAdapter 接收窗口事

20、件的抽象適配器類, 用空內(nèi)容實現(xiàn)了WindowListener接口的所有方法 class Wclose extends WindowAdapter JAVA語言程序設(shè)計清華大學(xué) 劉寶林77ActionEvent動作事件l引發(fā)原因: 單擊按扭,雙擊列表框中選項,選擇菜單項,文本框中 的回車l事件監(jiān)聽接口:ActionListenerl接口方法: actionPerformed(ActionEvent e)l組件注冊該事件方法: addActionListener(監(jiān)聽者) JAVA語言程序設(shè)計清華大學(xué) 劉寶林78TextEvent文本事件l引發(fā)原因: 文本框或文本區(qū)域內(nèi)容改變l事件監(jiān)聽接口:Te

21、xtListenerl接口方法: textValueChanged(TextEvent e)l組件注冊該事件方法: addTextListener(監(jiān)聽者) JAVA語言程序設(shè)計清華大學(xué) 劉寶林79ItemEvent選擇事件l引發(fā)原因: 改變列表框中的選中項 改變復(fù)選框選中狀態(tài) 改變下拉選單的選中項l事件監(jiān)聽接口:ItemListenerl接口方法: itemStateChanged(ItemEvent e)l組件注冊該事件方法: addItemListener(監(jiān)聽者) JAVA語言程序設(shè)計清華大學(xué) 劉寶林80AdjustmentEvent調(diào)整事件l引發(fā)原因: 操作滾動條改變滑塊位置l事件監(jiān)

22、聽接口:AdjustmentListenerl接口方法: adjustmentValueChanged(AdjustmentEvent e)l組件注冊該事件方法: addAdjustmentListener(監(jiān)聽者) JAVA語言程序設(shè)計清華大學(xué) 劉寶林81KeyEvent事件l引發(fā)原因: 敲完鍵(KEY-TYPED) 按下鍵 (KEY-PRESSED) 釋放鍵 (KEY-RELEASE)l事件監(jiān)聽接口:KeyListenerl接口方法: keyPressed(KeyEvent e) 鍵已被按下時調(diào)用 keyReleased(KeyEvent e) 鍵已被釋放時調(diào)用 keyTyped(KeyE

23、vent e) 鍵已被敲完時調(diào)用lKeyEvent方法:char ch = e.getKeyChar(); l事件監(jiān)聽適配器(抽象類)KeyAdapterl組件注冊該事件方法: addKeyListener(監(jiān)聽者) JAVA語言程序設(shè)計清華大學(xué) 劉寶林82MouseEvent事件l引發(fā)原因: (鼠標(biāo)作用在一個組件上) 鼠標(biāo)事件: 鼠標(biāo)鍵按下,鼠標(biāo)鍵抬起,單擊鼠標(biāo) , 鼠標(biāo)光標(biāo)進入一個組件,鼠標(biāo)光標(biāo)離開一個組件。 鼠標(biāo)移動事件: 鼠標(biāo)移動,鼠標(biāo)拖動 l鼠標(biāo)事件監(jiān)聽接口1: MouseListener 接受鼠標(biāo)事件l該接口方法: mouseClicked(MouseEvent e) mouseE

24、ntered(MouseEvent e) 鼠標(biāo)光標(biāo)進入一個組件 mouseExited(MouseEvent e) 鼠標(biāo)光標(biāo)離開一個組件 JAVA語言程序設(shè)計清華大學(xué) 劉寶林83MouseEvent事件l鼠標(biāo)事件監(jiān)聽適配器(抽象類)MouseAdapterl鼠標(biāo)事件監(jiān)聽接口2: MouseMotionListener 接受鼠標(biāo)移動事件l該接口方法: mouseMoved(MouseEvent e) 鼠標(biāo)光標(biāo)在組件上移動 mouseDragged(MouseEvent e) 用鼠標(biāo)拖動一個組件l鼠標(biāo)移動事件監(jiān)聽適配器 MouseMotionAdapterl組件注冊鼠標(biāo)事件方法: addMouse

25、Listener(監(jiān)聽者) l組件注冊鼠標(biāo)移動事件方法: addMouseMotionListener(監(jiān)聽者) JAVA語言程序設(shè)計清華大學(xué) 劉寶林84MouseEvent事件lMouseEvent方法 e.getClickCount() =1 單擊 =2 雙擊 Point e.getPoint() 取鼠標(biāo)光標(biāo)位置 int e.getX() int e.getY() 取鼠標(biāo)光標(biāo)位置 e.getModifiers() = e.BUTTON1_MASK 鼠標(biāo)左鍵 = e.BUTTON3_MASK 鼠標(biāo)右鍵6 - 鼠標(biāo)事件 JAVA語言程序設(shè)計清華大學(xué) 劉寶林85WindowEvent事件l引發(fā)原

26、因: 有關(guān)窗口操作引發(fā)的事件l事件監(jiān)聽接口WindowListenerl接口方法 windowActivated(WindowEvent e) 激活窗口 windowClosed(WindowEvent e) 關(guān)閉窗口 windowClosing(WindowEvent e) 窗口正在被關(guān)閉(試圖利用窗口關(guān)閉按鈕關(guān)閉窗口) windowDeactivated(WindowEvent e) 本窗口成為非活動窗口JAVA語言程序設(shè)計清華大學(xué) 劉寶林86WindowEvent事件 windowDeiconified(WindowEvent e) 窗口從最小化恢復(fù)為普通窗口 windowIconifi

27、ed(WindowEvent e) 窗口變?yōu)樽钚』瘓D標(biāo) windowOpened(WindowEvent e) 窗口被打開成為可見時l接口適配器 WindowAdapterl注冊事件方法 addWindowListenerJAVA語言程序設(shè)計清華大學(xué) 劉寶林87ComponentEvent 事件l引發(fā)原因: 當(dāng)組件移動、改變大小、改變可見性時引發(fā)l事件監(jiān)聽接口:ComponentListenerl接口方法: componentHidden(ComponentEvent e) 組件隱藏 componentMoved(ComponentEvent e) 組件移動 componentResized(

28、ComponentEvent e) 組件改變大小 componentShown(ComponentEvent e) 組件變?yōu)榭梢妉接口適配器 ComponentAdapterl組件注冊該事件方法: addComponentListenerJAVA語言程序設(shè)計清華大學(xué) 劉寶林88ContainerEvent 事件l引發(fā)原因: 當(dāng)容器內(nèi)增加或移走組件時引發(fā)l事件監(jiān)聽接口:ContainerListenerl接口方法 componentAdded(ContainerEvent e) 容器內(nèi)加入組件 componentRemoved(ContainerEvent e) 從容器中移走 組件l接口適配器

29、ContainerAdapterl容器注冊該事件方法: addContainerListenerJAVA語言程序設(shè)計清華大學(xué) 劉寶林89GUI標(biāo)準(zhǔn)組件lLabel(標(biāo)簽) 構(gòu)造方法 Label myl = new Label(“標(biāo)簽內(nèi)容”); Label a = new Label(“information”); Label a = new Label(“information”, Label.CENTER); 方法 a.setText(“新內(nèi)容”); 設(shè)置標(biāo)簽內(nèi)容 String a.getText() 讀取標(biāo)簽內(nèi)容lButton(按鈕) Button myB1 = new Button();

30、 Button myB2 = new Button(“Cancel”);JAVA語言程序設(shè)計清華大學(xué) 劉寶林90GUI標(biāo)準(zhǔn)組件lCheckbox(檢測盒) 創(chuàng)建時指定檢測盒的標(biāo)簽 Checkbox cb1 = new Checkbox (); Checkbox cb2 = new Checkbox (“registered”); Checkbox cb3 = new Checkbox (“registered”, true); Checkbox cb4 = new Checkbox (“registered”, true, group); 獲取和設(shè)置檢測盒的狀態(tài) cb.setState(tru

31、e); boolean b=cb.getState();JAVA語言程序設(shè)計清華大學(xué) 劉寶林91Checkbox組件l構(gòu)造方法 Checkbox(String label) Checkbox(String label, boolean state) Checkbox(String label, boolean state, CheckboxGroup group ) l方法: boolean getState() setState(boolean state)JAVA語言程序設(shè)計清華大學(xué) 劉寶林92GUI標(biāo)準(zhǔn)組件lCheckboxGroup(單選按鈕組) 單選按鈕組是一組Checkbox的集合

32、,是將一組 Checkbox 按扭組成單選按扭組件 首先創(chuàng)建CheckboxGroup,再加入單個按鈕l方法: Checkbox getSelectedCheckbox() 取得目前選取的復(fù)選框?qū)ο?setSelectedCheckbox(Checkboxbox) 設(shè)定目前選取的復(fù)選框?qū)ο驤AVA語言程序設(shè)計清華大學(xué) 劉寶林93CheckboxGroup組件l例: setLayout(new GridLayout(3, 1); CheckboxGroup cbg = new CheckboxGroup(); Checkbox ck1 = new Checkbox(“one”, true, cb

33、g ); Checkbox ck2 = new Checkbox(“two”, false, cbg ); Checkbox ck3 = new Checkbox(“three”, false, cbg ); add(ck1); add(ck2); add(ck3); 把CheckboxGroup加入容器時需要把其中的每個復(fù)選按鈕 逐個加入到容器中,而不能使用CheckboxGroup對象一次 性地加入。JAVA語言程序設(shè)計清華大學(xué) 劉寶林94TextField行編輯框組件l構(gòu)造方法(String, int) TextField f1 = new TextField(30); TextFiel

34、d f1 = new TextField(“abc”,30); 建30個字符寬的行編輯框l方法: String getText() 讀文本框內(nèi)容 setText(“abc”) 設(shè)置編輯框內(nèi)容 setEchoChar(char c) 設(shè)置回顯字符lTextComponent 方法: setEditable(false); selectAll() 7 計算器 JAVA語言程序設(shè)計清華大學(xué) 劉寶林95TextArea組件l構(gòu)造方法(String, int , int) TextArea t1 = new TestArea(10,45); 建10行、45列的文本區(qū)域 TextArea t1 = new

35、 TestArea(“abc”,10,45); TextArea t1 = new TestArea(“abc”,10,45,滾動條);l滾動條指定 SCROLLBARS_BOTH SCROLLBARS_HORIZONTAL_ONLY SCROLLBARS_VERTICAL_ONLY SCROLLBARS_NONEl方法 append(String str) 追加文本JAVA語言程序設(shè)計清華大學(xué) 劉寶林96List 列表框l首先創(chuàng)建List對象,再調(diào)用add ()方法加入List列表 的各選項。列表可以實現(xiàn)多選多l(xiāng)構(gòu)造方法 List(int rows, boolean multipleMode

36、) rows 顯示行數(shù) ; multipleMode 是否允許多選l方法: list1.add (“class A”); list1.add (“class B”); list1.add (“class C” , 0); 指定加入選項位置JAVA語言程序設(shè)計清華大學(xué) 劉寶林97List 列表框l方法 int getSelectedIndex() 取被選項索引 int getSelectedIndexes() 取被選項索引(多選) String getSelectedItem() 取被選項 String getSelectedItems() 取被選項(多選) void select(int in

37、dex) 選中指定的項 String getItem(int index) 按索引號取出該項 int getItemCount() 取出項數(shù) String getItems( ) 取出所有的項 JAVA語言程序設(shè)計清華大學(xué) 劉寶林98Choice下拉選單l下拉選單提供了多選一機制。l創(chuàng)建下拉選單包括創(chuàng)建下拉選單對象和添加選項兩 個步驟 例: Choice ColorChooser = new Choice(); ColorChooser.add(Green); ColorChooser.add(Red); ColorChooser.add(Blue); String getSelectedIt

38、em() GreenJAVA語言程序設(shè)計清華大學(xué) 劉寶林99Scrollbar 滾動條l構(gòu)造方法 mySlider = new Scrollbar(Scrollbar.HORIZONTAL , 0 , 1 , 0 , Integer.MAX_VALUE); 滾動條方向 滑塊初始位置 滑塊尺寸 滾動槽最小值 滾動槽最大值l方法 int getValue() 返回滑塊當(dāng)前位置 setUnitIncrement(1); 設(shè)置單位增量(點按兩端箭頭) setBlockIncrement(50); 設(shè)置塊增量(點按滾動槽)8 滾動條 JAVA語言程序設(shè)計清華大學(xué) 劉寶林100菜單l菜單須依附于一個實現(xiàn)了

39、MenuContainer接口 的對象:Frame 構(gòu)建菜單結(jié)構(gòu):創(chuàng)建菜單的步驟 創(chuàng)建菜單條(MenuBar) 創(chuàng)建菜單(Menu),加入相應(yīng)菜單條 創(chuàng)建菜單項(MenuItem),加入相應(yīng)菜單 使菜單條依附于擁有它的對象:setMenuBar()l編寫響應(yīng)菜單操作的代碼(ActionEvent)JAVA語言程序設(shè)計清華大學(xué) 劉寶林101菜單l創(chuàng)建菜單條(MenuBar) MenuBar m_MenuBar = new MenuBar(); l創(chuàng)建菜單(Menu),加入菜單條 Menu menuFile = new Menu(“File”); /創(chuàng)建菜單 m_MenuBar.add(menuF

40、ile); /將菜單加入菜單條l創(chuàng)建菜單項(MenuItem) , 并加入相應(yīng)菜單 MenuItem f1= new MenuItem(“Open”), /創(chuàng)建各菜單項 MenuItem f2 = new MenuItem(Close), menuFile.add(f1); /加入菜單 menuFile.add(f2);l將菜單條放入frame: myFrame.setMenuBar(m_MenuBar); l編寫響應(yīng)菜單操作的代碼(ActionEvent) 9 菜單 JAVA語言程序設(shè)計清華大學(xué) 劉寶林102例:MenuFrame.javaclass MenuFrame extends Fr

41、ame Label lb=new Label(“here comes command”); /模擬菜單命令 MenuBar m_MenuBar=new MenuBar(); /創(chuàng)建菜單條 Menu menuFile = new Menu(“File”); /創(chuàng)建菜單 MenuItem file=new MenuItem(“Open”), /創(chuàng)建各菜單項new MenuItem(Close),new MenuItem(Exit) ; MenuFrame() m_MenuBar.add(menuFile); /把菜單加入菜單條menuFile.add(file0); /把各菜單項加入菜單menuF

42、ile.add(file1);menuFile.add(file2);setMenuBar(m_MenuBar); /把菜單條加入FrameJAVA語言程序設(shè)計清華大學(xué) 劉寶林103setLayout(new FlowLayout();add(lb); /加入Label, 用于輸出菜單項命令A(yù)ctionListener ml=new ML();for(int i=0;i3;i+) /為每個菜單項注冊監(jiān)聽者 filei.addActionListener(ml); /此例多個菜單項 /對應(yīng)一個監(jiān)聽者, 但實際編程時建議使用一對一結(jié)構(gòu)addWindowListener(new WL(); clas

43、s ML implements ActionListener /Action事件監(jiān)聽者類public void actionPerformed(ActionEvent e) lb.setText(e.getActionCommand(); /輸出菜單命令 JAVA語言程序設(shè)計清華大學(xué) 劉寶林104文件對話框FileDialog(Frame parent, String title, int mode)l parent 對話框所屬窗體l title 對話框標(biāo)題l mode 對話框模式 FileDialog.LOAD 打開文件 FileDialog.SAVE 保存文件JAVA語言程序設(shè)計清華大學(xué)

44、劉寶林105文件對話框 class MyFrame extends Frame MyFrame getMyFrameIns() return this; 子類方法代碼片段: FileDialog f = new FileDialog( getMyFrameIns(),open,FileDialog.SAVE); f.setVisible(true); String fname = f.getDirectory() + f.getFile() ; ig = getToolkit().getImage(fname);JAVA語言程序設(shè)計清華大學(xué) 劉寶林106JAVA語言程序設(shè)計清華大學(xué) 劉寶林10

45、7Swing組件lSwing Swing 是AWT 的擴展, 它提供了更強大和更靈活的組件集合。除了我們已經(jīng)熟悉的組件如按鈕、復(fù)選框和標(biāo)簽外,Swing 還包括許多新的組件,如選項板、滾動窗口、樹、表格。許多一些開發(fā)人員已經(jīng)熟悉的組件, 如按鈕, 在Swing 都增加了新功能。而且,按鈕的狀態(tài)改變時按鈕的圖標(biāo)也可以隨之改變。 與AWT 組件不同,Swing 組件實現(xiàn)不包括任何與平臺相關(guān)的代碼。Swing 組件是純Java 代碼,因此與平臺無關(guān)。一般用輕量級(lightweight )這個術(shù)語描述這類組件。JAVA語言程序設(shè)計清華大學(xué) 劉寶林108Swing組件類描述AbstractButton

46、 按鈕的抽象類ButtonGroup 封裝一組互斥的按鈕ImageIcon 封裝圖標(biāo)JApplet Swing 版的Applet JButton Swing 的按鈕類JCheckBox Swing 的復(fù)選框類JComboBox 封裝組合框(下拉式菜單和文本框的組合). JLabel Swing 版的標(biāo)簽JRadioButton Swing 版的單選按鈕JScrollPane 封裝滾動窗口JTabbedPane 封裝選項窗口JTable 封裝表格控件JTextField Swing 版的文本域Jtree 封裝樹型控件JAVA語言程序設(shè)計清華大學(xué) 劉寶林109圖標(biāo)和標(biāo)簽l標(biāo)簽JLablel圖標(biāo)Ic

47、on及其實現(xiàn)類ImageIconImageIcon icon = new ImageIcon(jcase/gui/resources/reloaded.png);/ Create a label JLabel label = new JLabel(Reloaded, icon, JLabel.CENTER);JAVA語言程序設(shè)計清華大學(xué) 劉寶林110文本組件lJTextComponent JTextField JTextArea JEditorPaneJAVA語言程序設(shè)計清華大學(xué) 劉寶林111按鈕lAbstractButton JButton JCheckBox JRadioButtonJAV

48、A語言程序設(shè)計清華大學(xué) 劉寶林112組合框lJComboBox 類(組合框combo box, 一個文本域 和下拉列表的組合) JComboBox jc = new JComboBox();jc.addItem(bsd);jc.addItem(linux);jc.addItem(mac);jc.addItem(windows);jc.addItemListener(this);JAVA語言程序設(shè)計清華大學(xué) 劉寶林113選項窗格l選項窗格(tabbed pane) 組件表現(xiàn)為一組文件 夾。每個文件夾都有標(biāo)題。當(dāng)用戶使用文件夾時, 顯示它的內(nèi)容。 l選項窗格被封裝為JTabbedPane 類 l在

49、應(yīng)用程序中使用選項窗格的一般過程如下所示: 1. 創(chuàng)建JTabbedPane 對象。2. 調(diào)用addTab( ) 方法在窗格中增加一個標(biāo)簽(這個方法的 參數(shù)是標(biāo)簽的標(biāo)題和它包含的組件)。4. 重復(fù)步驟2,增加標(biāo)簽。5. 將選項窗格加入應(yīng)用程序的內(nèi)容窗格。JAVA語言程序設(shè)計清華大學(xué) 劉寶林114JTabbedPane panes = new JTabbedPane();BaseSwingDemo demo;demo = new JButtonDemo();panes.addTab(demo.getTitle(),demo);demo = new JCheckBoxDemo();panes.ad

50、dTab(demo.getTitle(),demo);demo = new JComboBoxDemo();panes.addTab(demo.getTitle(),demo);JAVA語言程序設(shè)計清華大學(xué) 劉寶林115滾動窗格l滾動窗格組件是一個可以容納其他組件的矩形區(qū) 域, 在必要的時候提供水平和/或垂直的滾動條。lSwing 中的滾動窗格由JScrollPane 類實現(xiàn)1. 創(chuàng)建JComponent 對象。2. 創(chuàng)建JScrollPane 對象( 構(gòu)造函數(shù)的參數(shù)指定組件和水 平、垂直滾動條的策略)。3. 將滾動窗格加入內(nèi)容窗格中。 JAVA語言程序設(shè)計清華大學(xué) 劉寶林116ImageIc

51、on post = new ImageIcon(jcase/gui/resources/revolutions.jpg);JLabel label = new JLabel(post);setLayout(new BorderLayout();/ Add panel to a scroll pane int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;JScrollPane scrollPane = new JScr

52、ollPane(label,v,h);scrollPane.setPreferredSize(this.getPreferredSize();/ Add scroll pane to the content paneadd(scrollPane,BorderLayout.CENTER);JAVA語言程序設(shè)計清華大學(xué) 劉寶林117樹l樹對象提供了用樹型結(jié)構(gòu)分層顯示數(shù)據(jù)的視圖。用戶可以擴展或收縮視圖中的單個子樹。l樹由Swing 中的JTree 類實現(xiàn)l使用樹組件時應(yīng)遵循的步驟: 1. 創(chuàng)建一個JTree 對象。2. 創(chuàng)建一個JScrollPane 對象(構(gòu)造函數(shù)的參數(shù)指定樹和 水平和垂直滾動條的

53、策略) 。3. 將樹加入滾動窗口。4. 將滾動窗口加入小應(yīng)用程序的內(nèi)容面板。 JAVA語言程序設(shè)計清華大學(xué) 劉寶林118DefaultMutableTreeNode top = new DefaultMutableTreeNode(音樂);DefaultMutableTreeNode classical = new DefaultMutableTreeNode(古典);DefaultMutableTreeNode pop = new DefaultMutableTreeNode(流行音樂);DefaultMutableTreeNode jazz = new DefaultMutableTree

54、Node(爵士);DefaultMutableTreeNode rock = new DefaultMutableTreeNode(搖滾);top.add(classical);top.add(pop);top.add(jazz);top.add(rock);classical.add(new DefaultMutableTreeNode(Beethoven-Six String Quartets);DefaultMutableTreeNode beetle = new DefaultMutableTreeNode(The Beetles);DefaultMutableTreeNode garv = new DefaultMutableTr

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論