版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Java語言程序設(shè)計(jì)圖形用戶界面設(shè)計(jì)n 設(shè)計(jì)原則n 容器與布局n 自定義成分n 標(biāo)準(zhǔn)組件n 事件處理JAVA語言程序設(shè)計(jì)清華大學(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)操作,來幫助用戶方便地向計(jì)算機(jī)系統(tǒng)發(fā)出命令,啟動(dòng)操作,并將系統(tǒng)運(yùn)行的結(jié)果同樣以圖形的方式顯示給用戶。JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林4用戶界面設(shè)計(jì)原則l控制權(quán)在用戶l界面與操作的風(fēng)格一致性l寬容
2、(容錯(cuò))性l簡潔與美觀并重JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林5圖形用戶界面簡介l圖形用戶界面的構(gòu)成 容器:布局、安排 標(biāo)準(zhǔn)組件 用戶自定義成分l設(shè)計(jì)&實(shí)現(xiàn)圖形用戶界面的工作 創(chuàng)建GUI各組成成分,并安排從屬位置關(guān)系,根據(jù)具 體需要對(duì)其進(jìn)行排序,構(gòu)成完整外觀。 定義GUI各成分對(duì)不同事件的響應(yīng),實(shí)現(xiàn)與用戶的交 互功能。JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林6界面構(gòu)成容器用戶自定義成分v 容器是用來組織其他界面成分和元素的單元。一般一個(gè)圖 形用戶界面對(duì)應(yīng)一個(gè)復(fù)雜容器。如一窗口v 標(biāo)準(zhǔn)組件是圖形用戶界面的最小單位,它里面不再包含其他 的成分。如單選按鈕,文本框,菜單v 用戶自定義成分是指編程
3、人員根據(jù)用戶需要設(shè)計(jì)一些用戶 自定義的圖形界面成分。如繪制幾何圖形 標(biāo)準(zhǔn)組件JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林7界面元素l容器是用來組織其他界面成分和元素的單元。 可以形成容器的層次,構(gòu)筑復(fù)雜結(jié)構(gòu) Window(Frame、Applet、Dialog )l組件是圖形用戶界面的基本單位,它里面不再包含其他的成分。 GUI組件是圖形用戶界面標(biāo)準(zhǔn)化的結(jié)果。常用的組件有: 選擇類的: 單選按鈕、復(fù)選按鈕、下拉列表; 文字處理類的: 文本框、文本區(qū)域 命令類的: 按鈕、菜單等 GUI組件的作用是完成與用戶的交互。包括接收用戶的 命令、文本或選擇輸入,向用戶顯示一段文本或一個(gè)圖 形等。JAVA語言程序設(shè)
4、計(jì)清華大學(xué) 劉寶林8界面元素l使用組件通常需要如下的步驟 創(chuàng)建某組件類的對(duì)象,指定其大小等屬性。 使用某種布局策略,將該組件對(duì)象加入到某個(gè)容器中的 某指定位置處。 將該組件對(duì)象注冊(cè)給它所能產(chǎn)生的事件對(duì)應(yīng)的事件監(jiān)聽 者,重載事件的處理方法,實(shí)現(xiàn)利用該組件對(duì)象與用戶 交互的功能。l用戶自定義成分 顯示文字、繪制圖形、顯示圖象 不能像標(biāo)準(zhǔn)組件一樣被系統(tǒng)識(shí)別和承認(rèn),只起裝飾作用。 不能響應(yīng)用戶的動(dòng)作,不具有交互功能。JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林9圖形用戶界面(GUI)lJava的圖形用戶界面編程: 為方便圖形用戶界面的開發(fā),設(shè)計(jì)了專門的類庫來生成各 種標(biāo)準(zhǔn)圖形界面元素和處理圖形界面的各種事件,
5、這個(gè)用 來生成圖形界面的類庫就是java.awt包。AWT是abstract window toolkit抽象窗口工具集的縮寫。 AWT類庫中的各種操作被定義在一個(gè)窗口中進(jìn)行,開發(fā)人 員用AWT開發(fā)出的圖形用戶界面可以適用于所有的平臺(tái)系 統(tǒng)。JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林10AWT包lAbstract Window Toolkit(抽象窗口工具集) 提供各種構(gòu)成GUI的標(biāo)準(zhǔn)構(gòu)件。 AWT類庫中的各種操作被定義在一個(gè)窗口中進(jìn)行的。 抽取不同軟硬件平臺(tái)中所實(shí)現(xiàn)的窗口的公共特性。 依賴于具體平臺(tái)系統(tǒng)實(shí)現(xiàn):顯示效果可能不同。l提供與機(jī)器無關(guān)的基本GUI標(biāo)準(zhǔn)組件 選擇類組件:單選按鈕、復(fù)選框、下拉
6、選單、列表框 文字處理類組件:標(biāo)簽、文本框、文本域。 命令類組件:按鈕、工具欄、菜單等。JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林11從一個(gè)簡單窗口開始l創(chuàng)建GUI應(yīng)用程序 Frame必不可少 它是帶標(biāo)題的頂層窗口,是 構(gòu)建應(yīng)用程序圖形界面的基 礎(chǔ),它為應(yīng)用程序?qū)崿F(xiàn)人機(jī) 交互提供了對(duì)話窗口l先來建一個(gè)空的窗口應(yīng)用: Empty.java 注意:一定要處理關(guān)閉窗口 的事件JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林12import java.awt.*; /must import to use GUI /must extends Frame in an applicationpublic class Empt
7、y extends Frame / 暫時(shí)采用1.0.2的事件處理方法,關(guān)閉窗口 public boolean handleEvent(Event evt) /根據(jù)Event類的對(duì)象evt的id值來判斷發(fā)生事件的種類 if(evt.id= =Event.WINDOW_DESTROY) System.exit(0); / return的返回值表示將余下的事件處理交給父類的handleEvent( ) / 處理,從而保證對(duì)事件的正常處理 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è)計(jì)清華大學(xué) 劉寶林13繪制用戶自定義成分l用戶自定義成分屬于構(gòu)成GUI的非標(biāo)準(zhǔn)部分 無法響應(yīng)用戶事件 一般僅僅起背景裝飾、輸出效果突出的作用lJava中的用戶自定義成分 顯示文字 繪制圖形 顯示圖片JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林14繪制用戶自定義成分l一般在容器中(窗口)或畫布上繪制。l利用Java.awt類庫中的類及其方法繪制用戶自定義的 圖形界面成分。 lGraphics類包含很多繪制圖形和文字的方法 。l首先要獲得Graphics類的實(shí)例,然后利用其方法繪制。lGraphics
9、類的實(shí)例一般作為相關(guān)方法的參數(shù)傳遞進(jìn)來: paint(Graphics g)lJava程序圖形界面的 坐標(biāo)設(shè)置原點(diǎn)(0,0)X軸Y軸JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林15繪制圖形及其相關(guān)方法ldrawLine(x1,y1,x2,y2) /直線ldrawRect(x,y,w,h) /矩形ldrawOval(x,y,w,h) /圓或橢圓lfillOval(x,y,w,h) /實(shí)心圓或橢圓ldrawPolygon(X坐標(biāo)數(shù)組,Y坐標(biāo)數(shù)組,頂點(diǎn)個(gè)數(shù)) /畫多邊形ldrawArc (x,y,w,h,開始角度,弧度角度) lsetColor(Color c) /設(shè)置顏色lsetFont(Font f)
10、/設(shè)置字體lgetColor()lgetFont()JAVA語言程序設(shè)計(jì)清華大學(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為弧形的寬度和高 度;為弧形的起始角,為弧形的弧度, 為正,表順 時(shí)針方向; 為負(fù),表逆時(shí)針方向。l以(x,y)為左上角、w為寬度、h為高度畫矩形 drawRect(x,y,w,h) 參數(shù)均為intlfillRect(x,y,w,h)、clearRect(x,y,w,h)JAVA語言程序
11、設(shè)計(jì)清華大學(xué) 劉寶林17繪制圖形及其相關(guān)方法l畫圓或橢圓 drawOval(x,y,w,h) x,y為繪制圓或橢圓的左上角的坐標(biāo),w,h確定了橢圓的 寬度和高度l畫實(shí)心圓或橢圓 fillOval(x,y,w,h)l畫多邊形 drawPolygon(X坐標(biāo)數(shù)組,Y坐標(biāo)數(shù)組,頂點(diǎn)個(gè)數(shù))JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林18繪制圖形及其相關(guān)方法例子: sanmao.java10 畫人像 JAVA語言程序設(shè)計(jì)清華大學(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è)計(jì)清華大學(xué) 劉寶林20顯示文字l字體顯示效果類:Font 一個(gè)Font類的對(duì)象表示了一種字體顯示效果,包括字體類型、風(fēng)格和字號(hào)。 Font mf = new Font(String 字體,int 風(fēng)格,int 字號(hào)); 字體:TimesRoman, Courier, Arial等 風(fēng)格:三個(gè)常量lFont.PLAIN, Font.BOLD, Font.ITALIC 字號(hào):字的大小(磅數(shù)) 設(shè)置當(dāng)前使用的字體:setFont(Font fn) 獲取當(dāng)前使用的字體:getFont()l例:UseFonts.javaJAVA語言程序設(shè)計(jì)清華大學(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) /雙擊時(shí)清除向量中各點(diǎn)m_vLocs.removeAllElements(); else /單擊時(shí)在向量中增加一點(diǎn)m_vLocs.addElement(e.getPoint();
15、 repaint(); /重新繪制一次 class move extends MouseMotionAdapter /鼠標(biāo)移動(dòng)監(jiān)聽者類public void mouseMoved(MouseEvent e) /響應(yīng)移動(dòng) m_CursorLoc = new Point(e.getX(),e.getY(); repaint(); /重新繪制一次 JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林71事件類lActionEvent類:屬于動(dòng)作事件,包括:點(diǎn)擊按鈕; 雙擊一個(gè)列表中的選項(xiàng);選擇菜單項(xiàng);在文本框中 按回車。最典型的例子是:鼠標(biāo)點(diǎn)擊按鈕所產(chǎn)生的 事件,經(jīng)ActionListener接口觸發(fā)一連串動(dòng)作,再
16、由 actionPerformed()方法完成這些動(dòng)作。 e.getSource() 返回事件發(fā)生的對(duì)象(名) e.getActionCommand() 返回按扭名(動(dòng)作事件的命令字符串)lActionListener 接口 public void actionPerformed(ActionEvent e)JAVA語言程序設(shè)計(jì)清華大學(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è)計(jì)清華大學(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è)計(jì)清華大學(xué) 劉寶林74監(jiān)聽者類l某個(gè)類可以兼職也可以專職做這件事(實(shí)現(xiàn)監(jiān)聽者 接口)。l一個(gè)類若實(shí)現(xiàn)一個(gè)接口,必須實(shí)現(xiàn)接口的全部方法。 例如:ActionListener接口只有一個(gè)方法: void actionPerformed(ActionEvent e) l實(shí)現(xiàn)接口的類可以是: 一般類 內(nèi)部類 匿名類3 4 內(nèi)部類5 匿名類JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林75事件處理有關(guān)問題l有哪些事件類 (java.awt.event) ? l每個(gè)事
19、件類的監(jiān)聽者接口?l每個(gè)監(jiān)聽者接口規(guī)定的方法?l多方法的監(jiān)聽者接口的適配器(實(shí)現(xiàn)接口的抽象類) 是什么?l組件的事件注冊(cè)(委托)方法?JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林76窗口事件l關(guān)閉窗口框時(shí)引發(fā) WindowEvent事件l注冊(cè)addWindowListener(new Wclose();l定義監(jiān)聽者類 class Wclose implements WindowListener public void windowClosing(WindowEvent e) System.exit(0); lWindowListener類有7 個(gè)方法,必須都實(shí)現(xiàn)lWindowAdapter 接收窗口事
20、件的抽象適配器類, 用空內(nèi)容實(shí)現(xiàn)了WindowListener接口的所有方法 class Wclose extends WindowAdapter JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林77ActionEvent動(dòng)作事件l引發(fā)原因: 單擊按扭,雙擊列表框中選項(xiàng),選擇菜單項(xiàng),文本框中 的回車l事件監(jiān)聽接口:ActionListenerl接口方法: actionPerformed(ActionEvent e)l組件注冊(cè)該事件方法: addActionListener(監(jiān)聽者) JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林78TextEvent文本事件l引發(fā)原因: 文本框或文本區(qū)域內(nèi)容改變l事件監(jiān)聽接口:Te
21、xtListenerl接口方法: textValueChanged(TextEvent e)l組件注冊(cè)該事件方法: addTextListener(監(jiān)聽者) JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林79ItemEvent選擇事件l引發(fā)原因: 改變列表框中的選中項(xiàng) 改變復(fù)選框選中狀態(tài) 改變下拉選單的選中項(xiàng)l事件監(jiān)聽接口:ItemListenerl接口方法: itemStateChanged(ItemEvent e)l組件注冊(cè)該事件方法: addItemListener(監(jiān)聽者) JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林80AdjustmentEvent調(diào)整事件l引發(fā)原因: 操作滾動(dòng)條改變滑塊位置l事件監(jiān)
22、聽接口:AdjustmentListenerl接口方法: adjustmentValueChanged(AdjustmentEvent e)l組件注冊(cè)該事件方法: addAdjustmentListener(監(jiān)聽者) JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林81KeyEvent事件l引發(fā)原因: 敲完鍵(KEY-TYPED) 按下鍵 (KEY-PRESSED) 釋放鍵 (KEY-RELEASE)l事件監(jiān)聽接口:KeyListenerl接口方法: keyPressed(KeyEvent e) 鍵已被按下時(shí)調(diào)用 keyReleased(KeyEvent e) 鍵已被釋放時(shí)調(diào)用 keyTyped(KeyE
23、vent e) 鍵已被敲完時(shí)調(diào)用lKeyEvent方法:char ch = e.getKeyChar(); l事件監(jiān)聽適配器(抽象類)KeyAdapterl組件注冊(cè)該事件方法: addKeyListener(監(jiān)聽者) JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林82MouseEvent事件l引發(fā)原因: (鼠標(biāo)作用在一個(gè)組件上) 鼠標(biāo)事件: 鼠標(biāo)鍵按下,鼠標(biāo)鍵抬起,單擊鼠標(biāo) , 鼠標(biāo)光標(biāo)進(jìn)入一個(gè)組件,鼠標(biāo)光標(biāo)離開一個(gè)組件。 鼠標(biāo)移動(dòng)事件: 鼠標(biāo)移動(dòng),鼠標(biāo)拖動(dòng) l鼠標(biāo)事件監(jiān)聽接口1: MouseListener 接受鼠標(biāo)事件l該接口方法: mouseClicked(MouseEvent e) mouseE
24、ntered(MouseEvent e) 鼠標(biāo)光標(biāo)進(jìn)入一個(gè)組件 mouseExited(MouseEvent e) 鼠標(biāo)光標(biāo)離開一個(gè)組件 JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林83MouseEvent事件l鼠標(biāo)事件監(jiān)聽適配器(抽象類)MouseAdapterl鼠標(biāo)事件監(jiān)聽接口2: MouseMotionListener 接受鼠標(biāo)移動(dòng)事件l該接口方法: mouseMoved(MouseEvent e) 鼠標(biāo)光標(biāo)在組件上移動(dòng) mouseDragged(MouseEvent e) 用鼠標(biāo)拖動(dòng)一個(gè)組件l鼠標(biāo)移動(dòng)事件監(jiān)聽適配器 MouseMotionAdapterl組件注冊(cè)鼠標(biāo)事件方法: addMouse
25、Listener(監(jiān)聽者) l組件注冊(cè)鼠標(biāo)移動(dòng)事件方法: addMouseMotionListener(監(jiān)聽者) JAVA語言程序設(shè)計(jì)清華大學(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è)計(jì)清華大學(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) 本窗口成為非活動(dòng)窗口JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林86WindowEvent事件 windowDeiconified(WindowEvent e) 窗口從最小化恢復(fù)為普通窗口 windowIconifi
27、ed(WindowEvent e) 窗口變?yōu)樽钚』瘓D標(biāo) windowOpened(WindowEvent e) 窗口被打開成為可見時(shí)l接口適配器 WindowAdapterl注冊(cè)事件方法 addWindowListenerJAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林87ComponentEvent 事件l引發(fā)原因: 當(dāng)組件移動(dòng)、改變大小、改變可見性時(shí)引發(fā)l事件監(jiān)聽接口:ComponentListenerl接口方法: componentHidden(ComponentEvent e) 組件隱藏 componentMoved(ComponentEvent e) 組件移動(dòng) componentResized(
28、ComponentEvent e) 組件改變大小 componentShown(ComponentEvent e) 組件變?yōu)榭梢妉接口適配器 ComponentAdapterl組件注冊(cè)該事件方法: addComponentListenerJAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林88ContainerEvent 事件l引發(fā)原因: 當(dāng)容器內(nèi)增加或移走組件時(shí)引發(fā)l事件監(jiān)聽接口:ContainerListenerl接口方法 componentAdded(ContainerEvent e) 容器內(nèi)加入組件 componentRemoved(ContainerEvent e) 從容器中移走 組件l接口適配器
29、ContainerAdapterl容器注冊(cè)該事件方法: addContainerListenerJAVA語言程序設(shè)計(jì)清華大學(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è)計(jì)清華大學(xué) 劉寶林90GUI標(biāo)準(zhǔn)組件lCheckbox(檢測盒) 創(chuàng)建時(shí)指定檢測盒的標(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è)計(jì)清華大學(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è)計(jì)清華大學(xué) 劉寶林92GUI標(biāo)準(zhǔn)組件lCheckboxGroup(單選按鈕組) 單選按鈕組是一組Checkbox的集合
32、,是將一組 Checkbox 按扭組成單選按扭組件 首先創(chuàng)建CheckboxGroup,再加入單個(gè)按鈕l方法: Checkbox getSelectedCheckbox() 取得目前選取的復(fù)選框?qū)ο?setSelectedCheckbox(Checkboxbox) 設(shè)定目前選取的復(fù)選框?qū)ο驤AVA語言程序設(shè)計(jì)清華大學(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加入容器時(shí)需要把其中的每個(gè)復(fù)選按鈕 逐個(gè)加入到容器中,而不能使用CheckboxGroup對(duì)象一次 性地加入。JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林94TextField行編輯框組件l構(gòu)造方法(String, int) TextField f1 = new TextField(30); TextFiel
34、d f1 = new TextField(“abc”,30); 建30個(gè)字符寬的行編輯框l方法: String getText() 讀文本框內(nèi)容 setText(“abc”) 設(shè)置編輯框內(nèi)容 setEchoChar(char c) 設(shè)置回顯字符lTextComponent 方法: setEditable(false); selectAll() 7 計(jì)算器 JAVA語言程序設(shè)計(jì)清華大學(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,滾動(dòng)條);l滾動(dòng)條指定 SCROLLBARS_BOTH SCROLLBARS_HORIZONTAL_ONLY SCROLLBARS_VERTICAL_ONLY SCROLLBARS_NONEl方法 append(String str) 追加文本JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林96List 列表框l首先創(chuàng)建List對(duì)象,再調(diào)用add ()方法加入List列表 的各選項(xiàng)。列表可以實(shí)現(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); 指定加入選項(xiàng)位置JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林97List 列表框l方法 int getSelectedIndex() 取被選項(xiàng)索引 int getSelectedIndexes() 取被選項(xiàng)索引(多選) String getSelectedItem() 取被選項(xiàng) String getSelectedItems() 取被選項(xiàng)(多選) void select(int in
37、dex) 選中指定的項(xiàng) String getItem(int index) 按索引號(hào)取出該項(xiàng) int getItemCount() 取出項(xiàng)數(shù) String getItems( ) 取出所有的項(xiàng) JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林98Choice下拉選單l下拉選單提供了多選一機(jī)制。l創(chuàng)建下拉選單包括創(chuàng)建下拉選單對(duì)象和添加選項(xiàng)兩 個(gè)步驟 例: Choice ColorChooser = new Choice(); ColorChooser.add(Green); ColorChooser.add(Red); ColorChooser.add(Blue); String getSelectedIt
38、em() GreenJAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林99Scrollbar 滾動(dòng)條l構(gòu)造方法 mySlider = new Scrollbar(Scrollbar.HORIZONTAL , 0 , 1 , 0 , Integer.MAX_VALUE); 滾動(dòng)條方向 滑塊初始位置 滑塊尺寸 滾動(dòng)槽最小值 滾動(dòng)槽最大值l方法 int getValue() 返回滑塊當(dāng)前位置 setUnitIncrement(1); 設(shè)置單位增量(點(diǎn)按兩端箭頭) setBlockIncrement(50); 設(shè)置塊增量(點(diǎn)按滾動(dòng)槽)8 滾動(dòng)條 JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林100菜單l菜單須依附于一個(gè)實(shí)現(xiàn)了
39、MenuContainer接口 的對(duì)象:Frame 構(gòu)建菜單結(jié)構(gòu):創(chuàng)建菜單的步驟 創(chuàng)建菜單條(MenuBar) 創(chuàng)建菜單(Menu),加入相應(yīng)菜單條 創(chuàng)建菜單項(xiàng)(MenuItem),加入相應(yīng)菜單 使菜單條依附于擁有它的對(duì)象:setMenuBar()l編寫響應(yīng)菜單操作的代碼(ActionEvent)JAVA語言程序設(shè)計(jì)清華大學(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)建菜單項(xiàng)(MenuItem) , 并加入相應(yīng)菜單 MenuItem f1= new MenuItem(“Open”), /創(chuàng)建各菜單項(xià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è)計(jì)清華大學(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)建各菜單項(xiàng)new MenuItem(Close),new MenuItem(Exit) ; MenuFrame() m_MenuBar.add(menuFile); /把菜單加入菜單條menuFile.add(file0); /把各菜單項(xiàng)加入菜單menuF
42、ile.add(file1);menuFile.add(file2);setMenuBar(m_MenuBar); /把菜單條加入FrameJAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林103setLayout(new FlowLayout();add(lb); /加入Label, 用于輸出菜單項(xiàng)命令A(yù)ctionListener ml=new ML();for(int i=0;i3;i+) /為每個(gè)菜單項(xiàng)注冊(cè)監(jiān)聽者 filei.addActionListener(ml); /此例多個(gè)菜單項(xiàng) /對(duì)應(yīng)一個(gè)監(jiān)聽者, 但實(shí)際編程時(shí)建議使用一對(duì)一結(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è)計(jì)清華大學(xué) 劉寶林104文件對(duì)話框FileDialog(Frame parent, String title, int mode)l parent 對(duì)話框所屬窗體l title 對(duì)話框標(biāo)題l mode 對(duì)話框模式 FileDialog.LOAD 打開文件 FileDialog.SAVE 保存文件JAVA語言程序設(shè)計(jì)清華大學(xué)
44、劉寶林105文件對(duì)話框 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è)計(jì)清華大學(xué) 劉寶林106JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林10
45、7Swing組件lSwing Swing 是AWT 的擴(kuò)展, 它提供了更強(qiáng)大和更靈活的組件集合。除了我們已經(jīng)熟悉的組件如按鈕、復(fù)選框和標(biāo)簽外,Swing 還包括許多新的組件,如選項(xiàng)板、滾動(dòng)窗口、樹、表格。許多一些開發(fā)人員已經(jīng)熟悉的組件, 如按鈕, 在Swing 都增加了新功能。而且,按鈕的狀態(tài)改變時(shí)按鈕的圖標(biāo)也可以隨之改變。 與AWT 組件不同,Swing 組件實(shí)現(xiàn)不包括任何與平臺(tái)相關(guān)的代碼。Swing 組件是純Java 代碼,因此與平臺(tái)無關(guān)。一般用輕量級(jí)(lightweight )這個(gè)術(shù)語描述這類組件。JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林108Swing組件類描述AbstractButton
46、 按鈕的抽象類ButtonGroup 封裝一組互斥的按鈕ImageIcon 封裝圖標(biāo)JApplet Swing 版的Applet JButton Swing 的按鈕類JCheckBox Swing 的復(fù)選框類JComboBox 封裝組合框(下拉式菜單和文本框的組合). JLabel Swing 版的標(biāo)簽JRadioButton Swing 版的單選按鈕JScrollPane 封裝滾動(dòng)窗口JTabbedPane 封裝選項(xiàng)窗口JTable 封裝表格控件JTextField Swing 版的文本域Jtree 封裝樹型控件JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林109圖標(biāo)和標(biāo)簽l標(biāo)簽JLablel圖標(biāo)Ic
47、on及其實(shí)現(xiàn)類ImageIconImageIcon icon = new ImageIcon(jcase/gui/resources/reloaded.png);/ Create a label JLabel label = new JLabel(Reloaded, icon, JLabel.CENTER);JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林110文本組件lJTextComponent JTextField JTextArea JEditorPaneJAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林111按鈕lAbstractButton JButton JCheckBox JRadioButtonJAV
48、A語言程序設(shè)計(jì)清華大學(xué) 劉寶林112組合框lJComboBox 類(組合框combo box, 一個(gè)文本域 和下拉列表的組合) JComboBox jc = new JComboBox();jc.addItem(bsd);jc.addItem(linux);jc.addItem(mac);jc.addItem(windows);jc.addItemListener(this);JAVA語言程序設(shè)計(jì)清華大學(xué) 劉寶林113選項(xiàng)窗格l選項(xiàng)窗格(tabbed pane) 組件表現(xiàn)為一組文件 夾。每個(gè)文件夾都有標(biāo)題。當(dāng)用戶使用文件夾時(shí), 顯示它的內(nèi)容。 l選項(xiàng)窗格被封裝為JTabbedPane 類 l在
49、應(yīng)用程序中使用選項(xiàng)窗格的一般過程如下所示: 1. 創(chuàng)建JTabbedPane 對(duì)象。2. 調(diào)用addTab( ) 方法在窗格中增加一個(gè)標(biāo)簽(這個(gè)方法的 參數(shù)是標(biāo)簽的標(biāo)題和它包含的組件)。4. 重復(fù)步驟2,增加標(biāo)簽。5. 將選項(xiàng)窗格加入應(yīng)用程序的內(nèi)容窗格。JAVA語言程序設(shè)計(jì)清華大學(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è)計(jì)清華大學(xué) 劉寶林115滾動(dòng)窗格l滾動(dòng)窗格組件是一個(gè)可以容納其他組件的矩形區(qū) 域, 在必要的時(shí)候提供水平和/或垂直的滾動(dòng)條。lSwing 中的滾動(dòng)窗格由JScrollPane 類實(shí)現(xiàn)1. 創(chuàng)建JComponent 對(duì)象。2. 創(chuàng)建JScrollPane 對(duì)象( 構(gòu)造函數(shù)的參數(shù)指定組件和水 平、垂直滾動(dòng)條的策略)。3. 將滾動(dòng)窗格加入內(nèi)容窗格中。 JAVA語言程序設(shè)計(jì)清華大學(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è)計(jì)清華大學(xué) 劉寶林117樹l樹對(duì)象提供了用樹型結(jié)構(gòu)分層顯示數(shù)據(jù)的視圖。用戶可以擴(kuò)展或收縮視圖中的單個(gè)子樹。l樹由Swing 中的JTree 類實(shí)現(xiàn)l使用樹組件時(shí)應(yīng)遵循的步驟: 1. 創(chuàng)建一個(gè)JTree 對(duì)象。2. 創(chuàng)建一個(gè)JScrollPane 對(duì)象(構(gòu)造函數(shù)的參數(shù)指定樹和 水平和垂直滾動(dòng)條的
53、策略) 。3. 將樹加入滾動(dòng)窗口。4. 將滾動(dòng)窗口加入小應(yīng)用程序的內(nèi)容面板。 JAVA語言程序設(shè)計(jì)清華大學(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 團(tuán)隊(duì)管理企業(yè)培訓(xùn)
- 二零二五年度企業(yè)兼職市場營銷人員合同2篇
- 在線健康信息替代搜尋對(duì)老年人健康素養(yǎng)的影響研究-基于社會(huì)認(rèn)知理論
- 醫(yī)生年終工作總結(jié)
- 2025年度綠色建筑合作框架協(xié)議范本3篇
- 基于前景理論的大規(guī)模傳染疫情應(yīng)急管理決策研究
- 二零二五年P(guān)OS機(jī)租賃與移動(dòng)支付安全監(jiān)控合同3篇
- 臨床胃腸鏡術(shù)前術(shù)后護(hù)理要點(diǎn)
- Unit 4 Lesson 1My family photo(說課稿)-2024-2025學(xué)年冀教版(2024)初中英語七年級(jí)上冊(cè)
- 全國冀教版信息技術(shù)三年級(jí)上冊(cè)新授課 二 畫大熊貓 說課稿
- DB44∕T 2149-2018 森林資源規(guī)劃設(shè)計(jì)調(diào)查技術(shù)規(guī)程
- 肝移植的歷史、現(xiàn)狀與展望
- 商業(yè)定價(jià)表(含各商鋪價(jià)格測算銷售回款)
- 【化學(xué)】重慶市2021-2022學(xué)年高一上學(xué)期期末聯(lián)合檢測試題
- 供應(yīng)商物料質(zhì)量問題賠償協(xié)議(終端)
- 單位工程質(zhì)量控制程序流程圖
- 部編版小學(xué)語文三年級(jí)(下冊(cè))學(xué)期課程綱要
- 化學(xué)工業(yè)有毒有害作業(yè)工種范圍表
- 洼田飲水試驗(yàn)
- 定置定位管理一
- 商票保貼協(xié)議
評(píng)論
0/150
提交評(píng)論