Java面向?qū)ο蟪绦蛟O計-課件 第9章 Swing圖形用戶界面_第1頁
Java面向?qū)ο蟪绦蛟O計-課件 第9章 Swing圖形用戶界面_第2頁
Java面向?qū)ο蟪绦蛟O計-課件 第9章 Swing圖形用戶界面_第3頁
Java面向?qū)ο蟪绦蛟O計-課件 第9章 Swing圖形用戶界面_第4頁
Java面向?qū)ο蟪绦蛟O計-課件 第9章 Swing圖形用戶界面_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Swing圖形用戶界面1AWT組件與SWING組件概述Java早期進行用戶界面設計時,使用java.awt包中提供的類,比如:Button、TextField等組件類.“awt”就是AbstracWindowToolkit。Java2推出之后,增加了一個新的javax.swing包,該包提供了功能更為強大的用來設計GUI界面的類。awt包中的類創(chuàng)建的組件習慣上稱作重組件,當用awt包中的Button類創(chuàng)建一個按鈕組件時,都有一個相應的本地組件在為它工作(稱為它的同位體)。AWT組件的設計原理是把與顯示組件有關的許多工作和處理組件事件的工作交給相應的本地組件,因此我們把有同位體的組件稱為重量組件.缺點:程序的外觀在不同的平臺上可能有所不同,而且重量組件的類型也不能滿足GUI設計的需要.如:不可能把一副圖象添加到AWT按鈕上或AWT標簽上,因為AWT按鈕或標簽外觀繪制是由本地的對等組件,即同位體來完成的,而同位體可能是用C++編寫的,它的行為是不能被Java擴展的。使用AWT進行GUI設計可能會消耗大量的系統(tǒng)資源。swing包提供了更加豐富的、功能強大的組件,稱為swing組件,其中大部分組件是輕量組件,沒有同位體。swing組件的輕組件在設計上和AWT完全不同,輕組件把與顯示組件有關的許多工和處理組件事件的工作交給相應的UI代表來完成,這些UI代表是用Java語言編寫的類,這些類被增加到Java的運行環(huán)境中,因此組件的外觀不依賴平臺,不僅在不同平臺上的外觀是相同的,而且較重量組件而言有更高的性能。

JComponent類的部分子類以及JFrame類和JDialog類ContainerJFrameJDialogWindowFrameDialogJComponentJButtonJTextFieldJTeatAreaJTreeJPanelJTableComponent由Component子類創(chuàng)建的對象稱為一個組件。由Container子類創(chuàng)建的對象稱為一個容器。可以向容器添加組件。Container類方法:add()容器removeAll()方法可以移掉容器中的全部組件;用remove(Componentc)方法可以移掉容器中參數(shù)指定的組件。每當容器添加新的組件或移掉組件時,應該讓容器調(diào)用validate方法,以保證容器中的組件能正確顯示出來。容器本身也是一個組件,可以把一個容器添加到另一個容器中實現(xiàn)容器的嵌套。容器類(Container)和組件類(Component)swing包中有四個最重要的類:

JApplet、JFrame、JDialog和JComponent。JFrame、JApplet、JDialog都是重組件,即有同位體的組件,可以和操作系統(tǒng)交互信息.輕組件必須在這些重量容器中繪制自己,習慣上稱這些容器為Swing的底層容器。返回2JFrame窗體JFrame類常用方法如下:JFrame()——創(chuàng)建一個無標題的窗口。JFrame(Strings)——創(chuàng)建一個標題為s的窗口。setBounds(inta,intb,intwidth,intheight)——設置出現(xiàn)在屏幕上時的初始位置為(a,b),即距屏幕左面a個像素、距屏幕上方b個像素;窗口的寬是width,高是height。setSize(intwidth,intheight)——設置窗口的大小,窗口在屏幕出現(xiàn)是默認位置是(0,0)。setVisible(booleanb)——設置窗口是可見還是不可見,窗口默認是不可見的。JDK1.4或之前的版本要求如下:不可以把組件直接添加到JFame窗體中。JFame窗體含有一個稱為內(nèi)容面板的容器,應當把組件添加到內(nèi)容面板中(內(nèi)容面板也是重容器)。不能為JFame窗體設置布局,而應當為JFame窗體的內(nèi)容面板設置布局。內(nèi)容面板的默認布局是BorderLayout布局。JFame通過getContentPane()方法得到它的內(nèi)容面板。3菜單組件菜單放在菜單條里,菜單項放在菜單里。(1)JMenuBar

JComponent類的子類JMenubar是負責創(chuàng)建菜單條的,即JMenubar的一個實例就是一個菜單條。

JFrame類有一個將菜單條放置到窗口中的方法:setJMenuBar(JMenuBarmenubar);

注意:只能向窗口添加一個菜單條。(2)JMenuJMenu(Strings)建立一個指定標題菜單,標題由參數(shù)s確定。add(MenuItemitem)向菜單增加由參數(shù)item指定的菜單選項對象。add(Strings)向菜單增加指定的選項。JMenuItemgetItem(intn)得到指定索引處的菜單選項。getItemCount()得到菜單選項數(shù)目。

(3)JMenuItem菜單項,菜單項將被放在菜單里

JMenuItem是JMenu的父類,負責創(chuàng)建菜單項JMenuItem(Strings)構造有標題的菜單JMenuItem(Stringtext,Iconicon)構造有標題和圖標的菜單項setEnabled(booleanb)設置當前菜單項是否可被選擇。StringgetLabel()得到菜單選項的名字。setAccelerator(KeyStrokekeyStroke):設置快捷鍵

嵌入子菜單JMenu是JMenuItem的子類,因此菜單項本身還可以是一個菜單,稱這樣的菜單項為子菜單。為了使得菜單項有一個圖標,可以用圖標類Icon聲明一個圖標,然后使用其子類ImageIcon類創(chuàng)建一個圖標,如:

Iconicon=newImageIcon(“dog.gif”);例子1是一個含有菜單的窗口。

4布局設計控制組件在容器中的位置java.awt包中:FlowLayout、BorderLayoutCardLayout、GridLayoutjavax.swing.border包中:BoxLayout對于JFrame,默認布局是BorderLayout。setLayout:設置自己的布局1.FlowLayout布局利用構造方法可以創(chuàng)建一個居中對齊的布局對象。例如:

FlowLayoutflow=newFlowLayout();con.setLayout(flow);setHgap(inthgap)方法和setVgap(intvgap)可以重新設置布局的水平間隙和垂直間隙。例子2JFrame使用FlowLayout布局放置10個組件。是Window型容器的默認布局,如JFrame、JDialog都是Window類的間接子類,它們的默認布局都是BorderLayout布局。容器使用BorderLayout布局,那么容器空間簡單地劃分為東、西、南、北、中五個區(qū)域。一個組件加入都應該指明把這個組件添加在哪個區(qū)域中BorderLayout中的靜態(tài)常量CENTER、NORTH、SOUTH、WEST、EAST表示.2.BorderLayout布局添加到某個區(qū)域的組件將占據(jù)整個這個區(qū)域。每個區(qū)域只能放置一個組件,如果向某個已放置了組件的區(qū)域再放置一個組件,那么先前的組件將被后者替換掉。例子3使用了BorderLayout布局3.CardLayout布局使用CardLayout的容器可以容納多個組件,但是實際上同一時刻容器只能從這些組件中選出一個來顯示,這個被顯示的組件將占據(jù)所有的容器空間。JTabbedPane創(chuàng)建的對象是一個輕容器,稱作選項卡窗格。選項卡窗格的默認布局是CardLayout卡片式布局。4布局設計選項卡窗格可以使用:

add(Stringtext,Componentc);該方法將組件c添加到容器當中,并指定和該組件c對應的選項卡的文本提示是text。例子4中,在選項卡窗格中添加了5個按鈕,并設置了相對應的選項卡的文本提示,然后將選項卡窗格添加到窗體中。4.GridLayout布局

GridLayout是使用較多的布局編輯器,其基本布局策略是把容器劃分成若干行乘若干列的網(wǎng)格區(qū)域,組件就位于這些劃分出來的小格中。(1)使用GridLayout的構造方法GridLayout(intm,intn)創(chuàng)建布局對象,指定劃分網(wǎng)格的行數(shù)m和列數(shù)n,例如:GridLayoutgrid=newnewGridLayout(10,8);

(2)使用GridLayout布局的容器調(diào)用方法add將組件加入容器,組件進入容器的順序?qū)凑盏谝恍械谝粋€、第一行第二個、…第一行最后一個、第二行第一個、…最后一行第一個、…最后一行最后一個。

5.BoxLayout布局(盒式布局)Box類是Container類的一個子類,創(chuàng)建的容器稱作一個盒式容器,盒式容器的的默認布局是盒式布局,而且不允許更改盒式容器的布局。在策劃程序的布局時,可以利用容器的嵌套,將某個容器嵌入幾個盒式容器,達到你的布局目的。使用盒式布局的容器將組件排列在一行或一列行型布局中添加的組件的上沿在同一水平線上。列型布局中添加的組件的左沿在同一垂直線上。Box.createHorizontalBox()

獲得一個具有行型盒式布局的盒式容器;Box.createVerticalBox()

獲得一個具有列型盒式布局的盒式容器。Box.createHorizontalStrut(intwidth)可以得到一個不可見的水平Struct類型對象,稱做水平支撐。該水平支撐的高度為0,寬度是width。Box.createVertialStrut(intheight)可以得到一個不可見的垂直Struct類型對象,稱做垂直支撐。參數(shù)height決定垂直支撐的高度,垂直支撐的寬度為0。例子5中兩個列型盒式容器:boxV1、boxV2一個行行盒式容器baseBox在列型盒式容器的組件之間添加垂直支撐,控制組件之間的距離,將boxV1、boxV2添加到baseBox中,并在它倆之間添加了水平支撐。

6.null布局可以把一個容器的布局設置為null布局(空布局)??詹季秩萜骺梢詼蚀_地定位組件在容器的位置和大小。setBounds(inta,intb,intwidth,intheight)方法是所有組件都擁有的一個方法,組件調(diào)用該方法可以設置本身的大小和在容器中的位置。例如,p是某個容器:

p.setLayout(null);

把p的布局設置為空布局。

向空布局的容器p添加一個組件c需要兩個步驟首先使用add(c)方法向容器添加組件,然后組件c再調(diào)用setBounds(inta,intb,intwidth,intheight)方法設置該組件在容器中的位置和本身的大小,組件都是一個矩形結構,方法中的參數(shù)a,b是被添加的組件c的左上角在容器中的位置坐標,即該組件距容器左面a個像素,距容器上方b個像素;weidth,height是組件c的寬和高。

5中間容器1.JPanel面板經(jīng)常使用JPanel創(chuàng)建一個面板,再向這個面板添加組件,然后把這個面板添加到底層容器或其他中間容器中。JPanel面板的默認布局是FlowLayout布局。2.JScrollPane滾動窗格可以把一個組件放到一個滾動窗格中,然后通過滾動條來觀察這個組件。例如,JTextArea不自帶滾動條,因此我們就需要把文本區(qū)放到一個滾動窗格中。可以使用JScorollPane的構造方法JScorollPane(componentc)構造一個滾動窗格。

3.JSplitPane拆分窗格顧名思義,拆分窗格就是被分成兩部分的容器。拆分窗格有兩種類型:水平拆分和垂直拆分。水平拆分窗口用一條拆分線把容器分成左右兩部分,左面放一個組件,右面放一個組件,拆分線可以水平移動。垂直拆分30AWT事件模型抽象窗口工具包(AWT)是一組類,用來創(chuàng)建圖形用戶界面,并能夠通過鍵盤和鼠標響應用戶的操作。兩種常用容器類:框架(Frame類)和面板(Panel類)AWT支持下列類型的組件:標簽、文本域、文本區(qū)、按鈕、復選框、列表框等。布局管理器類提供控制GUI組件物理布局的一種方式。31事件控制的要點Java事件處理方法是基于授權事件模型事件源生成事件并將其發(fā)送至一個或多個監(jiān)聽器監(jiān)聽器簡單地等待,直到它收到一個事件。一旦事件被接受,監(jiān)聽器將處理這些事件,然后返回。3233事件源事件源是一個生成事件的對象一個事件源可能會生成不同類型的事件事件源提供了一組方法,用于為事件注冊一個或多個監(jiān)聽器。publicvoidadd<EventType>Listener(TypeListenere)34AWT采取的事件控制過程監(jiān)聽器對象屬于一個類的實例,這個類實現(xiàn)了一個特殊的接口,名為“監(jiān)聽者接口”事件源將在發(fā)生事件時向所有注冊的監(jiān)聽器發(fā)送事件對象。監(jiān)聽器對象使用事件對象中的信息來確定它們對事件做出響應。publicclassMyEventTestextendsPanel{ButtonmyButton=newButton("藍色");...//創(chuàng)建面板或其他

GUI組件

MyListenermyAction=newMyListener();MyButton.addActionListener(myAction);

privateclassMyListenerimplementsActionListener{publicMyListener(){...//初始化

}publicvoidactionPerformed(ActionEventevent){...//需要為事件進行的操作

}}}實現(xiàn)了ActionListener接口的監(jiān)聽器實現(xiàn)了actionPerformed方法,以便根據(jù)參數(shù)ActionEvent

對象的信息對事件做出響應為按鈕事件注冊監(jiān)聽器36事件體系結構FocusEventAWTEventActionEventAdjustmentEventComponentEventTextEventItemEventContainerEventInputEventWindowEventPaintEventKeyEventMouseEventEventObjectAWT將事件分為底層事件和語義事件。語義事件是表示用戶動作的時間。

ActionEvent是一個語義事件。底層事件時形成那些事件的事件

調(diào)節(jié)滾動條是一個語義事件,但是拖動鼠標是一個底層事件。

3738AWT事件類型2-1事件類說明事件源ActionEvent

通常按下按鈕,雙擊列表項或選中一個菜單項時,就會生成此事件。Button、List、MenuItem、TextField

AdjustmentEvent

操縱滾動條時會生成此事件。ScrollbarComponentEvent

當一個組件移動、隱藏、調(diào)整大小或成為可見時會生成此事件。ComponentItemEvent單擊復選框或列表項時,或者當一個選擇框或一個可選菜單的項被選擇或取消時生成此事件。Checkbox、CheckboxMenuItem、Choice、ListFocusEvent組件獲得或失去鍵盤焦點時會生成此事件。Component39AWT事件類型2-2事件類說明事件源KeyEvent

接收到鍵盤輸入時會生成此事件。ComponentMouseEvent

拖動、移動、單擊、按下或釋放鼠標或在鼠標進入或退出一個組件時,會生成此事件。ComponentContainerEvent

將組件添加至容器或從中刪除時會生成此事件。ContainerTextEvent在文本區(qū)或文本域的文本改變時會生成此事件。TextField、TextAreaWindowEvent當一個窗口激活、關閉、失效、恢復、最小化、打開或退出時會生成此事件。

Window40監(jiān)聽器接口監(jiān)聽器通過實現(xiàn)java.awt.event包中定義的一個或多個接口來創(chuàng)建。在發(fā)生事件時,事件源將調(diào)用監(jiān)聽器定義的相應方法。有興趣接收事件的任何監(jiān)聽器類都必須實現(xiàn)監(jiān)聽器接口。

41監(jiān)聽器接口列表2-1事件監(jiān)聽器

方法

ActionListener

actionPerformed

AdjustmentListener

adjustmentValueChanged

ComponentListener

componentResizedcomponentMovedcomponentShowncomponentHidden

ContainerListener

componentAddedcomponentRemoved

FocusListener

focusLost、focusGained

ItemListener

itemStateChanged

42監(jiān)聽器接口列表2-2事件監(jiān)聽器

方法

KeyListener

keyPressed、keyReleasedkeyTyped

MouseListener

mouseClicked、mouseEnteredmouseExited、mousePressedmouseReleased

MouseMotionListener

mouseDragged、mouseMoved

TextListener

textChanged

WindowListener

windowActivated、windowDeactivatedwindowClosed、windowClosingwindowIconified、windowDeiconifiedwindowOpened

43適配器類適配器類

事件監(jiān)聽器接口

ComponentAdapter

ComponentListener

ContainerAdapter

ContainerListener

FocusAdapter

FocusListener

KeyAdapter

KeyListener

MouseAdapter

MouseListener

MouseMotionAdapter

MouseMotionListener

WindowAdapter

WindowListener

為了使事件處理變得簡單,Java為具有多個方法的監(jiān)聽器接口提供適配器類。適配器類實現(xiàn)并提供了一個事件監(jiān)聽器接口中的所有的方法,但這些方法都是空方法。privateclassMyMouseAdapterextendsMouseAdapter{privateColorbgColor;

publicMyMouseAdapter(Colorc){bgColor=c;}

publicvoidmouseClicked(MouseEventmevent){setBackground(bgColor);repaint();

}}

44任何GUI對象的獲得或失去焦點都被視為焦點事件,并且事件源必須向事件監(jiān)聽器通知事件對象已失去或已獲得焦點。焦點監(jiān)聽器需要實現(xiàn)兩個方法:focusGained和focusLost。要進行錯誤檢查或數(shù)據(jù)校驗時,對焦點的捕捉就顯得尤其重要。焦點事件45焦點事件示例publicvoidfocusLost(FocusEventevent){if(event.getComponent()==ccField&&!event.isTemporary()){if(!checkFormat(ccField.getText()))

ccField.requestFocus();}}實現(xiàn)了當捕捉到失去焦點事件時如何響應檢驗失去焦點的組件中的文本格式是否正確如果格式不正確,將焦點移回到該組件46窗口事件當一個窗口被激活、禁止、關閉、正在關閉、最小化、恢復、打開時將生成窗口事件。需要實現(xiàn)的方法如下:windowActivated、windowClosedwindowClosing、windowDeactivatedwindowDeiconified、windowIconifiedwindowOpened窗口事件示例classMyFrameextendsFrame{

booleanw;

publicMyFrame(){

w=false;

setTitle("測試適配器類");

setSize(300,200);

MyPanelpanel=newMyPanel();

add(panel);

addWindowListener(newMyWindowAdapter());}

privateclassMyWindowAdapterextendsWindowAdapter{

publicvoidwindowClosing(WindowEventwevent){if(w)dispose();elseSystem.exit(0);}}}實現(xiàn)了windowClosing方法,以響應窗口關閉時的事件

importjava.awt.*;

importjava.awt.event.*;

publicclassMyAdapterDemo{publicstaticvoidmain(String[]args){MyFramefrm=newMyFrame();frm.show();}}

48

在按下或釋放鍵盤上的一個鍵時,將生成鍵盤事件。

keyEvent類包含用來表示按下或點擊的鍵的常量。

生成keyEvent時將調(diào)用keyListener。如果程序需要處理特殊的鍵,如方向鍵,需要通過調(diào)用keyPressed()方法來處理。鍵盤事件publicvoidkeypressed(keyEventk){intkeyCode=k.getKeyCode();if(keyCode==k.VK_RIGHT&&k.isShiftDown()){...}}檢測用戶是否按下了Shift+右箭頭鍵鍵盤事件示例classMyPanelextendsPanel{publicMyPanel(){TextFieldtField=newTextField(20);add(tField);

MyKeyAdapterbAction=newMyKeyAdapter();tField.addKeyListener(bAction);}

privateclassMyKeyAdapterextendsKeyAdapter{

publicvoidkeyPressed(KeyEventkevent){setBackground(Color.blue);repaint();}

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論