版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第六章圖形用戶界面一、圖形用戶界面概述二、Swing常用組件三、事件處理四、布局設計與邊界五、菜單設計六、對話框設計七、文字與圖形處理一、圖形用戶界面概述Java語言提供了大量支持GUI設計的類,如按鈕、菜單、列表、特性框、對話框等組件類,同時也提供了包含窗口、面板等容器類。Java的抽象工具集AWT和Swing中包含了很多類以支持GUI的設計。設計和實現(xiàn)圖形用戶界面的主要任務包括下面兩個層次:(1)創(chuàng)建組成界面的各成分和元素,指定它們的屬性和位置關系,根據(jù)具體需要布局排列,以構成圖形用戶界面的外觀表現(xiàn)。(2)定義圖形用戶界面的事件和各界面元素所對不同事件的響應,以實現(xiàn)圖形用戶界面與用戶間的交互功能。一、圖形用戶界面概述基本概念
1.組件組件是Java圖形用戶界面最基本的組成部分,是一個以可視化的圖形方式顯示于屏幕上與用戶進行交互的對象。Java中包含許多的基本組件,如按鈕、標簽、滾動條、列表、單選/復選框等等。使用Java語言進行圖形用戶界面設計過程中,需要用到兩類組件,一類是AWT類的組件,另一類是Swing組件,AWT和Swing都是Java設計GUI用戶界面的基礎。一、圖形用戶界面概述2.容器顧名思義,容器是用來容納組件的。容器(Container)是Component類的子類,由Container類的子類和間接子類創(chuàng)建的對象均稱為容器,容器本身也是一種組件,可以通過add()方法向容器中添加組件,也可以把一個容器添加到另一個容器中以實現(xiàn)容器的嵌套,容器具有組件的所有性質。Java中AWT和Swing組件各有三類常用的容器,AWT的容器有Frame、Panel和Applet,Swing的容器有JFrame、JPanel和JApplet,另外Swing還有JScrollPane(滾動窗格)、JSplitPae(拆分窗格)和JLayeredPane(分層窗格)等容器。一、圖形用戶界面概述3.AWT組件AWT是API為Java程序提供的建立圖形用戶界面GUI工具集,AWT可用于JavaApplet和Application中。它提供用戶界面組件、事件處理模型、圖形和圖像工具、布局管理器等,可以進行靈活的窗口布局,與特定窗口的尺寸和屏幕分辨率無關。java.awt包中提供了GUI設計所需的類和接口,主要包括組件、容器與布局管理器等相關概念。由java.awt包中的類創(chuàng)建的組件稱為重組件,每創(chuàng)建一個組件時,都有一個相應的本地組件在為它工作,AWT組件設計原理是把與顯示組件有關的許多工作和處理事件的工作交給相應的本地組件。基于重組件的GUI設計有許多不足之處,如同一程序在不同的平臺可能有不同的外觀呈現(xiàn),使用AWT進行GUI設計會消耗大量的系統(tǒng)資源。一、圖形用戶界面概述CardLayoutBorderLayoutFlowLayoutComponentTextComponentScrollBarListLabelContainerChoiceCheckBoxCanvasButtonComponentComponentComponentComponentComponentAWTEventMenuComponentGridBagLayoutGridlayoutjava.awtTextAreaTextFieldMenuItemMenuBarCheckBoxMenuItemPopupMenuMenu一、圖形用戶界面概述4.Swing組件Swing是以AWT為基礎構建的,javax.swing包提供了更加豐富的、功能更強的Swing組件,它的大多數(shù)組件都是在AWT組件前面加一個“J”,Swing組件的用法與AWT基本相同,也使用AWT的事件處理機制,只是組件風格不同,同時也增加了一些原來沒有的組件特性。Swing組件無需同位體,故稱為輕組件。由于Swing組件在設計上和AWT完全不同,輕組件把與顯示組件有關的許多工作和處理事件的工作交給相應的java程序完成,這些類被添加到Java的運行環(huán)境中,具有外觀不依賴平臺的功能特性,且具有更高的性能。一、圖形用戶界面概述ComponentContainerJComponentWindowJDialogJFrameDailogFrameJPanelJTableJTreeJTextAreaJTextFieldJButton一、圖形用戶界面概述5.組件與容器的關系
在Java中必須理解容器和組件兩個基本概念,以及它們之間的關系。(1)Java把由Component類的子類或間接子類創(chuàng)建的對象稱為一個組件。(2)Java把由Container的子類或間接子類創(chuàng)建的對象稱為一個容器。(3)可以向容器添加組件。Container類提供了一個public方法add(),一個容器可以調(diào)用這個方法將組件添加到該容器中。(4)調(diào)用removeAll()方法可以清除容器中的所有組件,調(diào)用remove(Componentc)可以在容器中刪除指定參數(shù)的組件。(5)每當容器添加新的組件或刪除組件時,應該讓容器調(diào)用validate()方法,以保證容器中的組件能正確顯示出來。(6)容器本身也是一個組件,因此可以把一個容器添加到另一個容器中實現(xiàn)容器的嵌套。一、圖形用戶界面概述框架與面板
1.Frame框架框架是Window類的直接子類,因而框架是窗口的一種,是頂級窗口。JFrame組件在Java的頂層窗口中可以獨立使用,包含標題、邊框、菜單等??蚣苁且粋€容器,可以在這個容器中放入其他一些圖形用戶界面組件,如按鈕等,從而組成一個功能完善的程序。方法功能Frame()建立一個沒有標題的Frame類對象Frame(Stringtitle)建立一個標題為title的Frame類對象setsize(intwidth,intheight)設置Frame對象的寬和高setBackground(Colorc)設置Frame對象的背景色setVisible(booleanb)設置Frame對象的可見性StringgetTitle()獲得Frame對象的標題voidsetTitle(Stringtitle)設置Frame對象的標題BooleanisResizable()測試窗口是否可以改變大小ImagegetIconImage()返回窗口的最小化圖標voidsetIconImage(Imageimg)設置Frame對象的最小化圖標setBounds(intx,inty,intwidth,intheight)設置Frame對象的大小和位置一、圖形用戶界面概述使用框架:(1)框架創(chuàng)建(2)框架外觀控制(3)框架信息顯示importjavax.swing.*;importjava.awt.*;publicclassHelloWorld{ publicstaticvoidmain(Stringargs) { TextFrameframe=newTextFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.show();}}classTextFrameextendsJFrame{ publicTextFrame(){ setTitle("HelloWorld");setSize(WIDTH,HEIGHT); TextPanelpanel=newTextPanel(); ContainercontentPane=getContentPane(); contentPane.add(panel); } publicstaticfinalintWIDTH=300; publicstaticfinalintHEIGHT=200;}classTextPanelextendsJPanel{ publicvoidpaintComponent(Graphicsg){ super.paintComponent(g);g.drawString("Hello,World!",x,y);} publicintx=100;publicinty=100;}一、圖形用戶界面概述2.Panel面板Panel面板類為Container類的子類,也是一種容器,可容納其它組件(使用add()方法添加),但它不是頂層窗口,不能獨立存在,必須被添加到其它容器中,所以一般創(chuàng)建一個Panel面板對象后,需將其放入Window和Frame中,這樣才能看見Panel面板中的內(nèi)容。該類中比較重要的方法如下:
方法功能Panel()創(chuàng)建一個Panel類對象,布局管理器為默認的flowLayoutPanel(LayoutManagerlayout)創(chuàng)建一個Panel類對象,將layout設置為默認布局管理器二、Swing常用組件AbstractButtonJComboBoxJFileChooserJInternalFrameJLabelJLayeredPaneJListJMenuBarJPanel……JTableJTextComponent……JButtonJMenuItemJToggleButtonJCheckBoxJDesktopPaneJEditorPaneJTextAreaJTextFieldJCheckBoxMenuItemJMenuJRadioButtonMenuItemJRadioButtonJFormattedTextFieldJPasswordFieldJComponentjava.awt.containerjava.lang.object二、Swing常用組件1.文本組件Java提供的文本組件包括兩個:用于單行文本輸入的文本域(JTextField)和用于多行輸入的文本區(qū)(JTextArea),使用getText方法獲得文本域所做的修改: addl=Integer.parseInt(originText.getText().trim());跟蹤該文本域的內(nèi)容,使用文檔監(jiān)聽器: DocumentListenerresultListener=newResultListener(); originText.getDocument().addDocumentListener(resultListener);當文本發(fā)生改變后,下面三個方法之一會被調(diào)用: voidinsertUpdate(DocumentEvente) voidremoveUpdate(DocumentEvente) voidchangedUpdate(DocumentEvente)當文本中的內(nèi)容被添加或刪除時,前兩個方法會被調(diào)用,而對于文本域來說,第三個方法則不會被調(diào)用。為了對文本的改變進行處理,需要實現(xiàn)這三個方法。當需要重新設置文本域的內(nèi)容時,可以使用setText方法:resultText.setText(S),其中s是String類型的變量。
二、Swing常用組件2.標簽
JLablelabel=newJLabel("NoWrapArea",JLabel.LEFT);通過上面的代碼建立了一個標簽對象,其顯示的文本是“NoWrapArea”,對齊方式為左對齊。3.按鈕按鈕的使用是相當簡單的。為了在按鈕上顯示相應的信息,可以提供初始的文本和圖標。loginButton=newJButton("登錄",newImagelcon("login.gif"));文件"login.gif"必須在當前目錄下,另外當希望按鈕對單擊動作有所反應時,需要為按鈕注冊一個事件監(jiān)聽器,并且實現(xiàn)這個事件監(jiān)聽器,就可以完成所需要的按鈕功能。//注冊事件監(jiān)聽器loginButton.addActionListener(newLoginAction());//實現(xiàn)事件監(jiān)聽器privateclassLoginActionimplementsActionListener二、Swing常用組件4.單選按鈕組件單選按鈕組件是一組互斥按鈕,即一次只能選擇其中的一個選項,選項的選取只需要單擊即可。要使單選按鈕有效,需要新建一個ButtonGroup類型的對象,然后把JRadioButton類型的對象添加到ButtonGroup對象中。為指定單選按鈕的初始選項,在新建JRadioButton對象時,將其構造器的第二個參數(shù)設置為"true",同時其他按鈕對象的第二個參數(shù)設置為"false"。二、Swing常用組件5.復選框組件復選框組件可以進行多重選擇,即我們能夠選擇其中的多個選項,如果要取消或選取選項,可以單擊此選項。和單選按鈕不同,復選框允許用戶選擇多個選項。通過單擊復選框來選取該選項,再單擊一下,則取消選取。建立復選框組件對象需要使用標簽來表明該復選框的含義,標簽在復選框構造器里進行設置,對復選框是否被選取可以通過isSelected方法進行狀態(tài)判斷。在進行文本編輯時,我們經(jīng)常會遇到設置字體風格的問題,即需要在多個字體風格中進行多項選擇。二、Swing常用組件6.列表框組件
列表框組件允許用戶從一個列表中選擇一個或多個條目,用戶可以從列表框中選擇一個或多個條目。建立列表框前,需要指定所顯示的列表條目。如果列表框比較長,而顯示屏幕比較小,我們可以設置列表中顯示的行數(shù),同時使用滾動條。選擇列表框中的多個條目有連續(xù)條目選擇和間斷條目選擇兩種方式。連續(xù)條目的選擇方法是在選擇第一個條目后,按住Shift鍵,然后選擇需要的最后一個條目。間斷條目選擇的方法是按住Ctrl鍵,然后選擇需要的條目。當用戶選擇列表框條目時,列表框就會產(chǎn)生選擇事件。列表框的事件監(jiān)聽器和前面的組件不同,它需要將列表選擇監(jiān)聽器ListSelectionListener添加給列表組件,并在該監(jiān)聽器中實現(xiàn)valueChanged方法。獲得用戶所選擇的列表框條目以及條目所在的索引號需要使用getSelectedValues方法和getSelectedlndices方法。二、Swing常用組件7.組合框組件
組合框組件將編輯框和下拉列表框結合起來,使得用戶可以在一組預定義的選項中選擇一個條目,而且能夠修改選項內(nèi)容。新建一個有內(nèi)容的組合框既可以像列表框那樣指定數(shù)組,也可以采用向組合框對象里加入條目的方法,對組合框是否能夠被編輯也可以進行設置。組合框的內(nèi)容是可以動態(tài)變化的。addltem方法能夠把條目添加到列表的末尾,insertltemAt方法將把新條目添加到列表的任何位置,removeltem方法和removeltemAt方法將能夠刪除指定條目,removeAllltems方法將刪除所有條目,組合框的條目位置是從0開始的。當選擇一個條目時,組合框就產(chǎn)生一個事件,對事件的監(jiān)聽需要添加事件監(jiān)聽器,并實現(xiàn)actionPerformed方法。當組合框的選擇事件發(fā)生時,可以通過getSelectedltem方法來獲取當前被選擇的條目。二、Swing常用組件8.滑塊組件滑塊組件一般包含有一個連續(xù)區(qū)間和一個可拖動的滑塊,用戶可以通過拖動這個滑塊在這個區(qū)間范圍里進行選擇。構造滑塊需要給定連續(xù)區(qū)間范圍和滑塊的初始值,如果不指定這些值,將默認為0、100和50。當滑塊被拖動時,滑塊的值將發(fā)生變化,于是觸發(fā)ChangeEvent事件,這些事件將發(fā)送到監(jiān)聽器上?;瑝K組件的事件監(jiān)聽器要實現(xiàn)ChangeListener接口,并實現(xiàn)此接口中的stateChanged方法。當滑塊值發(fā)生變化時,可以使用getValue方法來獲得滑塊值。三、事件處理事件處理原理
Java中定義了各種不同類型的事件類,用來描述各種類型的用戶操作。這個過程將涉及三個主要概念:(1)事件:事件是描述用戶所執(zhí)行的一個操作,所產(chǎn)生的一個行為。(2)事件源:事件是由事件源產(chǎn)生的,事件的產(chǎn)生者稱為事件源,一般指產(chǎn)生事件的組件對象。(3)事件處理方法:負責解析處理事件的類的對象,用以實現(xiàn)和用戶交互的方法。事件源擁有自己的方法,通過它向其注冊事件監(jiān)聽器。事件監(jiān)聽器是一個類的實例,這個類實現(xiàn)了一個稱為Listener-interface的特殊接口。當事件源產(chǎn)生一個事件以后,事件源就會發(fā)送通知給相應的事件監(jiān)聽器,監(jiān)聽器對象根據(jù)事件對象內(nèi)封裝的信息決定如何響應這個事件。三、事件處理Java的事件處理方法主要基于"事件授權模型"的處理機制,事先定義多種事件類型(用戶對組件的操作),當用戶對某個事件源進行操作時,觸發(fā)相應的事件。如果組件注冊了事件監(jiān)聽器,事件被傳送給已經(jīng)注冊的監(jiān)聽器,事件監(jiān)聽器負責處理事件。一個事件源可以注冊一個或多個監(jiān)聽器,一個監(jiān)聽器也可以被注冊到多個事件源。java.awt.AWTEventjava.util.EventObjectActionEventAdjustmentEventComponentEventItemEventTextEventFocusEventPrintEventInputEventWindowEventContainerEventKeyEventMouseEvent三、事件處理事件授權模型實現(xiàn)事件處理的主要步驟包括:(1)選擇組件作為事件源,不同類型的組件會產(chǎn)生特定類型的事件。(2)定義要接收并處理某種類型的事件,注冊相應的事件監(jiān)聽器類。通過調(diào)用組件方法向組件注冊事件監(jiān)聽器??梢酝ㄟ^以下方法來注冊監(jiān)聽器對象:eventSourceObject.addEventListener(eventListenerObject);(3)實現(xiàn)監(jiān)聽器類的實例對象,據(jù)此作為事件的監(jiān)聽器對象。(4)事件源通過實例化事件類激發(fā)并產(chǎn)生事件,事件被傳送給已經(jīng)注冊的一個或多個監(jiān)聽器,事件監(jiān)聽器在接收到事件消息后負責實現(xiàn)相應的事件處理方法。三、事件處理下面以按鈕類為例來說明事件處理的具體過程:MyActionListenerlistener=...;JButtonbutton=newJButton("提交");button.addActionListener(listener);監(jiān)聽器對象listener所屬的類MyActionListener必須實現(xiàn)相應的接口,以響應事件,在這里MyActionListener要實現(xiàn)接口ActionListener。ActionListener接口中只有一個方法actionPerformed。所以MyActionListener要實現(xiàn)actionPerformed方法。相應的代碼如下: publicclassMyActionListenerimplementsActionListener{ …… publicvoidactionPerformed(ActionEventevent){......} }當用戶按下按鈕時,JButton對象就會創(chuàng)建一個ActionEvent對象,然后調(diào)用監(jiān)聽器對象listener的actionPerformed方法來處理這個事件對象??梢詾橐粋€事件源注冊多個監(jiān)聽器對象,這樣當事件產(chǎn)生時,多個監(jiān)聽器對象都會收到通知。三、事件處理按鈕點擊事件捕獲窗口事件
AWT事件層次結構
EventObjectAWTEventActionEventAdjustmentEventCompnentEventItemEventTextEventContainerEventFocusEventInputEventPaintEventWindowEventKeyObjectMouseObject三、事件處理傳遞給監(jiān)聽器的AWT事件類型
java.awt.event包中包含許多監(jiān)聽器接口
ActionEventItemEventAdjustmentEventKeyEventComponentEventMouseEventContainerEventTextEventFocusEventWindowEventActionListenerItemListenerAdjustmentListenerKeyListenerComponentListenermouseListenerContainerListenerTextListenerFocusListenerWindowListener三、事件處理包含多個方法的監(jiān)聽器接口并不止WindowListener一個,它們也都有對應的適配器類不同的事件源產(chǎn)生不同的事件,不同的事件對應不同的監(jiān)聽器接口,不同的監(jiān)聽器接口有不同的方法。
CompnentAdapterMouseAdapterContainerAdapterMouseMotionAdapterFocusAdapterKeyAdapter三、事件處理焦點事件
同一時刻在同一個窗口內(nèi)最多只能有一個組件擁有焦點。除了可以通過鼠標點擊或通過TAB鍵進行組件間焦點的切換,還可以通過程序來控制焦點的切換,通過使用transferFocus方法,把焦點移動到TAB順序中的下一個組件上。但并不是每個組件都能夠接收焦點,例如標簽組件就不能接收焦點。還可以使某些組件不能獲得焦點,這需要重載isFocusTravers是able方法,使其返回false,從而使得該組件不能接收焦點。三、事件處理鍵盤事件
KeyListener接口中有三個方法:publicvoidkeyPressed(KeyEvente)publicvoidkeyReleased(KeyEvente)publicvoidkeyTyped(KeyEvente)當用戶按下某個鍵時,就會生成一個名為KEYPRESSED的按鍵事件,松開鍵時,就會生成一個名為KEYRELEASE的按鍵事件??梢栽趯崿F(xiàn)了KeyListener接口的監(jiān)聽器類中用keyPressed方法和keyReleased方法對這些事件進行處理。不過它們只能處理原始的按鍵,而keyTyped方法可以處理由于按鍵所產(chǎn)生的一系列字符。三、事件處理鼠標事件
當用戶點擊一個鼠標按鍵后,會調(diào)下如下三個監(jiān)聽器方法:●mousePressed:鼠標鍵被按下時調(diào)用?!駇ouseReleased:鼠標鍵被釋放時調(diào)用?!駇ouseClicked:合并上述兩個事件為一次鼠標點擊事件。以上三個方法在MouseListener接口中定義。如果只想捕獲整個點擊操作,可以忽略mousePressed方法和mouse-Released方法。這三個方法的參數(shù)是MouseEvent,通過getX和getY方法,能夠得到鼠標點擊時鼠標指針的x和y坐標。通過getClickCount方法,可以區(qū)別是單擊操作,還是雙擊操作。為了區(qū)分鼠標事件中的不同鼠標按鍵,例如鼠標左鍵、鼠標右鍵,可以將getModifiers的返回值與BUTTONI_MASK、BUTTON2_MASK和BUTTON3_MASK進行比較。需要注意的是,在Windows操作系統(tǒng)中,BUTTON3_MASK實際上測試的是鼠標右鍵。四、布局設計與邊界
一個好的界面首先應該是布局合理的,Java提供了布局工具以支持用戶界面元素的自動定位。布局管理器為容器規(guī)劃布局,容器僅記錄其所包含的組件,而布局管理器則用于管理組件在容器中的布局,負責管理容器中的各個組件的排練順序、位置、組件大小等,當容器移動或改變大小時,應相應改變組件的大小和位置。java.awt包中定義有FlowLayout、BorderLayout、CardLayout、GridLayout、GridBagLayout五種布局,它們都是java.lang.object類的子類,每一種布局都對應于一種布局策略。java.swing包中定義有BoxLayout、ScrollPanelLayout、ViewportLayout、OverLayout四種布局。不同的布局管理器采用不同的布局策略放置組件。四、布局設計與邊界布局設計
1.FlowLayout流布局FlowLayout流布局管理器根據(jù)按鈕的數(shù)目自動對按鈕進行了排列,因此不需要關注按鈕數(shù)目以及大小的改變對布局所造成的影響,流布局管理器會處理好。甚至當改變框架大小時,這些按鈕仍會在流布局管理器的控制下重新排列。流布局管理器的特點是在一行上水平排列組件,直到該行沒有足夠的空間為止,然后另起一行繼續(xù)排列。當用戶縮放容器時,布局管理器將進行自動控制,重新排列,可以指定流布局管理器的組件排列方式。構造方法功能FlowLayout()創(chuàng)建一個FlowLayout居中布局FlowLayout(intalign)創(chuàng)建一個FlowLayout布局,對齊方式為alignFlowLayout(intalign,inthgap,ingvgap)創(chuàng)建一個FlowLayout布局,對齊方式為align,組件間水平和垂直距離分別為hgap,vgap四、布局設計與邊界2.BorderLayout邊界布局BorderLayout布局是一種簡單的布局策略,是Window、Frame、Dialog的默認布局策略,它們的內(nèi)容面板的默認布局都是Borderlayout布局。邊界布局管理器的布局分為五個位置:CENTER、EAST、WEST、NORTH、SOUTH,可以把組件放在這五個位置的任意一個,如果未指定位置,則缺省的位置是CENTER。采用邊界管理器進行布局時,四周的組件先被放置,剩余的空間由位于中間的組件占用;當容器的大小改變時,四周組件的厚度不會被改變,而中間組件的大小需要改變。在使用邊界布局管理器時,通常都要使用面板將一些小組件組織在一起,如按鈕、文本域等,然后再將面板置于邊界布局管理器中的不同位置上。由于容器能夠容納其他容器或組件,因此通過使用層次化的容器,能夠精確地定位各個組件。方法功能BorderLayout()創(chuàng)建一個BorderLayout布局BorderLayout(inthgap,ingvgap)創(chuàng)建一個BorderLayout布局,組件間水平和垂直距離分別為hgap,vgapadd(Componentcomp,Objectcon)添加組件,comp指定被加入的組件,con指定位置四、布局設計與邊界3.CardLayout卡式布局CardLayout卡式布局管理器可實現(xiàn)多個組件在同一容器區(qū)域內(nèi)重疊放置,交替顯示。通過用戶操作可將組件一個個顯示出來,即容納多個組件的同時只能選擇顯示一個組件,就如疊撲克牌,每次只能顯示最上面的一張,這個被顯示的組件占據(jù)所有的容器空間。方法功能CardLayout()創(chuàng)建一個CardLayout布局CardLayout(inthgap,ingvgap)創(chuàng)建一個CardLayout布局,組件間水平和垂直距離分別為hgap,vgapadd(Stringtext,Componentcomp)將組件comp加入容器中,對應文本為Textfirst(Containerc)顯示Container中的第一個對象last(Containerc)顯示Container中的最后一個對象previous(Containerc)顯示Container中的上一個對象next(Containerc)顯示Container中的下一個對象四、布局設計與邊界4.GridLayout卡式布局GridLayout網(wǎng)格布局管理器是使用較多的布局管理器,它在一個二維的網(wǎng)格中布局組件,其基本布局策略是把容器劃分成若干行和列的網(wǎng)格區(qū)域,每個網(wǎng)格的大小相等,組件就位于這些小格中,一個網(wǎng)格可以放置一個組件。使用GridLayout網(wǎng)格布局管理器時,需要指定行數(shù)和列數(shù),這種布局管理器的容器中的組件忽略首選的高度和寬度。GridLayout網(wǎng)格布局比較靈活,可由程序自由控制,組件定位比較精確。方法功能GridLayout()創(chuàng)建一行一列的GridLayout布局GridLayout(introws,ingcols)創(chuàng)建一個rows行cols列的CardLayout布局GridLayout(introws,ingcols,inthgap,intvgap)創(chuàng)建一個rows行cols列的CardLayout布局,組件的水平和垂直距離為hgap,vgap四、布局設計與邊界5.GridBagLayout卡式布局GridbagLayout網(wǎng)格包布局管理器是Java語言提供的最復雜、最靈活的布局管理器之一,采用網(wǎng)格的形式放置組件,組件的位置和大小由gridbagConstraints類的對象實例決定。GridbagLayout類規(guī)范組件使用GridbagLayout網(wǎng)格包布局管理器的限制條件。GridbagLayout網(wǎng)格包布局管理器允許指定的組件跨多行或多列,且行和列不要求同高或同寬,同時允許組件部分重疊。方法功能GridbagLayout()創(chuàng)建一個GridbagLayout布局對象setConstraints(Componentcomp,GridBagConstraintscon)設置網(wǎng)格包限制條件add(Componentcomp,Objectcon)添加組件并用con指定GridBagConstraints類的一個實例四、布局設計與邊界6.BoxLayout盒式布局BoxLayout盒式布局管理器用來創(chuàng)建一個盒式布局對象,BoxLayout在java.swing.border包中。java.swing包提供了Box類,該類是Container類的一個子類,據(jù)此創(chuàng)建的容器稱為盒式容器,其默認布局是盒式布局,且不允許修改。因此在策劃程序布局時,可以利用若干盒式容器的嵌套達到布局目的。BoxLayout類的方法方法功能BoxLayout(Containercon,intaxis)創(chuàng)建一個BoxLayout布局getLayoutalignmentX(Containercon)獲得容器沿X軸的對齊方式:行排列getLayoutalignmentY(Containercon)獲得容器沿Y軸的對齊方式:列排列setLayoutalignmentX(Containercon)設置容器沿X軸的對齊方式:行排列setLayoutalignmentY(Containercon)設置容器沿Y軸的對齊方式:列排列LayoutContainer(Containercon)設置con窗口的布局方式為BoxLayout四、布局設計與邊界邊界
當界面中的組件比較多時,需要從視覺上將組件分隔開。通用的辦法是為面板設置邊界,并將需要分隔的組件添加到該面板中??蛇x的邊界風格包括低斜面、凸斜面、蝕刻、直線、不光滑、空。創(chuàng)建邊界需要調(diào)用BorderFactory的靜態(tài)方法。當需要給邊界增加標題以提示時,可以使用BorderFactory的createTitledBorder方法。當創(chuàng)建好需要的邊界后,就可以把邊界對象添加到組件中:buttonPanel.setBorder(titled)五、菜單設計Java中,一般菜單格式包含菜單欄、菜單、菜單項等類組件,菜單放在菜單欄里,菜單項放在菜單里。
JMenuBar類方法功能說明JMenuBar()創(chuàng)建一個空的菜單欄SetJMenuBar(JmenuBarmenubar)將菜單欄添加到窗口JMenu類方法功能說明JMenu()創(chuàng)建一個菜單對象JMenu(StringmenuName)創(chuàng)建一個名為menuName的菜單對象voidadd(Strings)向菜單增添指定的菜單選項getItem(intn)獲得指定菜單項getItemCount()獲得菜單選項數(shù)目add(JmenuItemitem)將菜單項item添加到菜單對象中addSeparator()菜單中增加一條分隔線五、菜單設計JMenuBar類方法功能說明JMenuBar()創(chuàng)建一個空的菜單欄SetJMenuBar(JmenuBarmenubar)將菜單欄添加到窗口JMenu類方法功能說明JMenu()創(chuàng)建一個菜單對象JMenu(StringmenuName)創(chuàng)建一個名為menuName的菜單對象voidadd(Strings)向菜單增添指定的菜單選項getItem(intn)獲得指定菜單項getItemCount()獲得菜單選項數(shù)目add(JmenuItemitem)將菜單項item添加到菜單對象中addSeparator()菜單中增加一條分隔線五、菜單設計MenuBar類方法功能說明MenuBar()創(chuàng)建一個空的菜單欄add(Menum)將菜單對象m添加到菜單欄中Menu類方法功能說明Menu()創(chuàng)建一個菜單對象Menu(StringmenuName)創(chuàng)建一個名為menuName的菜單對象add(MenuItemitem)將菜單項item添加到菜單對象中addSeparator()菜單中增加一條分隔線MenuItem類方法功能說明MenuItem(StringitemName)創(chuàng)建一個菜單項,顯示為itemNamegetActionCommand()返回菜單項所產(chǎn)生的動作事件關聯(lián)的命令名稱disable()非使能菜單項CheckBoxMenuItem(Strings)創(chuàng)建標題為s的帶復選框的菜單項getstate()返回復選框菜單項對象的狀態(tài)setState(booleanstate)設置復選框菜單項對象的狀態(tài)JPopupMenu類方法功能說明PopupMenu(Strings)創(chuàng)建名為s的彈出式菜單項show(Componentc,intx,inty)在(x,y)處顯示彈出式菜單,c為該彈出式菜單的組件五、菜單設計菜單創(chuàng)建步驟(1)創(chuàng)建一個菜單欄(JMenuBar/MenuBar)對象,將其添加到所建框架(JFrame/Frame)中。(2)創(chuàng)建菜單(JMenu或Menu)對象及其子菜單。(3)創(chuàng)建菜單項(JMenuItem或MenuItem)對象,并將其添加到菜單或子菜單對象中。(4)將菜單對象添加到菜單欄對象中。上述步驟僅是創(chuàng)建了菜單的框架,若要實現(xiàn)其菜單功能,還必須將事件監(jiān)聽器注冊到菜單項,并在監(jiān)聽器提供的事件處理中加入相應的代碼以完成相應功能。六、對話框設計對話框分為模式對話框和無模式對話框,模式對話框必須在用戶處理完后才允許用戶與主窗口繼續(xù)進行交互,例如當用戶單擊"退出"按鈕時,彈出模式對話框強迫用戶確認,這也是本節(jié)的示例內(nèi)容。無模式對話框允許用戶同時在對話框和程序剩余部分中輸入信息,如工具欄,用戶能夠同時與應用程序窗口和工具欄進行交互。Swing下對話框(JOptionPane和JDialog)相對AWT中的Dialog對話框來說,具有更強大的功能,能夠更完善地顯示和獲得信息,完成與用戶的交互。Swing使用JOptionPane類提供許多可直接使用的標準對話框,如消息對話框、確認對話框、輸入對話框等。若JOptionPane提供的對話框仍不能滿足要求,則可以使用JDialog類自行設計對話框。六、對話框設計方法功能JOptionPane()創(chuàng)建一個顯示信息的JOptionPane對象JOptionPane(Objectmsg,intmsgtype)創(chuàng)建一個指定信息和顯示類型的JOptionPane對象JOptionPane(Objectmsg,intmsgtype,intoptiontype,Iconicon)創(chuàng)建一個指定信息和顯示類型的JOptionPane對象,并可設置選項和圖標JDialog()創(chuàng)建一個非模式對話框JDialog(Dialogowner,Stringstr)創(chuàng)建一個具有指定標題的非模式對話框JDialog(Dialogowner,booleanmodel)創(chuàng)建一個模式或非模式的對話框JDialog(Dialogowner,Stringstr,Booleanmodel)創(chuàng)建一個模式或非模式的具有指定標題的對話框showInputDialog(Objectmsg)創(chuàng)建一個具有指定信息的輸入對話框showInputDialog(ComponentparentC,Objectmsg,Stringstr,itmsgtype)創(chuàng)建一個具有依賴組件、指定信息、標題和消息類型的輸入對話框showMessageDialog(Objectmsg)創(chuàng)建一個具有指定信息的信息對話框showMessageDialog(ComponentparentC,Objectmsg,Stringstr,itmsgtype)創(chuàng)建一個具有依賴組件、指定信息、標題和消息類型的信息對話框showConfirmDialog(Objectmsg)創(chuàng)建一個具有指定信息的確認對話框showConfirmDialog(ComponentparentC,Objectmsg,Stringstr,itmsgtype)創(chuàng)建一個具有依賴組件、指定信息、標題和消息類型的確認對話框getTitle()/setTitle(Stringtitle)獲得/設置對話框的標題setModal(booleanb)/setSize()設置對話框的模式/設置對話框的大小setVisible(booleanb)顯示或隱藏對話框六、對話框設計1.JOptionPane對話框JOptionPane類提供了多種可供用戶使用的對話框以及相應的靜態(tài)方法,通過指定方法參數(shù),可以容易地引用該類賦予的對話框。JOptionPane提供了四種簡單的對話框:(1)showMessageDialog:顯示一條消息等待用戶點擊OK。(2)showConfirmDialog:顯示一條消息并等待用戶確認。(3)showOptionDialog:顯示一條消息并等待用戶在一組自定義選項中的選擇。(4)showlnputDialog:顯示一條消息并等待用戶的輸入。底部按鈕類型和對話框有密切的關系,對于showMessageDialog和showlnputDialog對話框來說,只能有一組標準按鈕,分別是OK和OK/CANCEL。對于showConfirmDialog,按鈕可以包括四種:DEFAULT_OPTION,YES_NO_OPTION,YES_NO_CANCEL_OPTION,OK_CANCEL_OPTION??梢詫ο㈩愋瓦M行控制:ERROR_MESSAGE,INFORMATION_MESSAGE,WARNING_MESSAGE,QUESTION_MESSAGE,PLAIN_MESSAGE。消息類型將控制對話框上顯示的圖標。六、對話框設計2.JDialog對話框若JOptionPane提供的對話框仍不能滿足要求,則可以使用JDialog類自行設計對話框。JDialog類和JFrame類都是Window的子類,兩者都依賴于某個窗口或組件,都可以將相關組件添加到JDialog的內(nèi)容面板ContentPane中,當它所依賴的窗口或組件消失,對話框也小時,而它所依賴的窗口或組件可見時,對話框又會自動恢復。通過建立JDialog的子類來建立一個對話框類,然后這個類的一個實例就是一個對話框。對話框的脊背結構類似JFrame框架,但應注意下面幾個問題:(1)不可將組件直接添加到對話框中,JDialog應含有一個內(nèi)容面板ContentPane容器(2)對話框通過調(diào)用方法getContentPane()方法得到內(nèi)容面板(3)不能為JDialog設
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 低保困難補助申請書3篇
- 中醫(yī)科護理面試題及答案
- 清大傳統(tǒng)染織藝術教學大綱
- 甘肅省考面試題及答案
- 瑞士信貸銀行資產(chǎn)管理部經(jīng)理年度考核含答案
- 2025鐵路工務操作人員福建龍巖泉州招聘15人筆試參考題庫附帶答案詳解(3卷合一版)
- 2025重慶慶鈴專用汽車有限公司招聘6人筆試參考題庫附帶答案詳解(3卷合一版)
- 成本工程師的績效考核與反饋
- 2025遼寧沈陽副食集團所屬企業(yè)招聘25人筆試參考題庫附帶答案詳解(3卷合一版)
- 汽車維修技師技能水平與經(jīng)驗考核全解
- GA 2113-2023警服女禮服
- 國開機考答案-鋼結構(本)(閉卷)
- 紀委談話筆錄模板經(jīng)典
- 消防安全制度和操作規(guī)程
- 叉車安全技術交底
- 國家預算實驗報告
- 工業(yè)園區(qū)綜合能源智能管理平臺建設方案合集
- 附件1:中國聯(lián)通動環(huán)監(jiān)控系統(tǒng)B接口技術規(guī)范(V3.0)
- 正弦函數(shù)、余弦函數(shù)的圖象 說課課件
- 閉合性顱腦損傷病人護理查房
- 《你看起來好像很好吃》繪本課件
評論
0/150
提交評論