Java語言系統界面設計_第1頁
Java語言系統界面設計_第2頁
Java語言系統界面設計_第3頁
Java語言系統界面設計_第4頁
Java語言系統界面設計_第5頁
已閱讀5頁,還剩114頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

模塊6系統界面設計

——圖形界面設計及事件處理主要內容學習目標及重、難點1教學內容2課堂、拓展實踐3小結4學習目標及重點、難點學習目標了解圖形界面的基礎知識掌握Swing編程步驟掌握容器的創(chuàng)建與使用掌握常用Swing組件的創(chuàng)建和使用掌握布局管理器的使用掌握事件處理機制重點容器的創(chuàng)建與使用布局管理器事件處理機制難點頁面的布局管理事件處理重、難點;;;回顧Java基礎數據類型、運算符、表達式分支結構和循環(huán)結構數組的創(chuàng)建與使用字符串的基本操作面向對象基礎面向對象思想類的創(chuàng)建與使用對象的創(chuàng)建與使用繼承、對象轉型、多態(tài)、接口集合容器set、List、Map引入前面的所有模塊中,用戶與系統的交互是通過控制臺輸入/輸出實現,操作不方便,交互性不好。如何能像Windows界面操作那樣美觀、方便,實現交互功能?第一講

——Swing基礎及常用容器

使用NetBeans開發(fā)Swing應用程序圖形界面簡介圖形用戶界面(Graphical

user

interface,稱GUI)是采用圖形方式顯示的計算機操作用戶界面,包括窗口、菜單、按鈕、工具欄和其他各種屏幕元素。Java中主要提供了兩個包為GUI設計提供豐富的功能,它們是AWT(java.awt)和Swing(javax.swing)。圖形界面簡介1.AWTAWT是Java1.0提供的抽象視窗工具包,將處理用戶界面的任務交給操作系統,由底層平臺負責創(chuàng)建圖形界面元素,AWT組件構建的GUI程序受操作系統的影響,在不同平臺上進行測試會有不同的結果顯示。2.SwingSwing是構筑在AWT上層的一組GUI組件的集合,對于底層平臺的依賴更少。Swing中保留了AWT的事件處理、顏色、字體等處理。設計和實現圖形用戶界面主要有兩方面:創(chuàng)建組成界面的各個元素、設置它們的屬性、指定它們的位置,構成完整的圖形用戶界面的外觀。定義圖形用戶界面的事件、確定界面各元素對不同事件的響應,實現與用戶的交互。圖形界面簡介Swing編程簡介Swing組件都是AWT的Container類的直接子類和間接子類,各類之間的關系如下。

java.awt.Component

-java.awt.Container

-java.awt.Window

-java.awt.Frame-javax.swing.JFrame

-javax.Dialog-javax.swing.JDialog

-javax.swing.JWindow

-java.awt.Applet-javax.swing.JApplet

-javax.swing.Box

-javax.swing.JcomponetJComponent類是大部分Swing組件的父類,它是抽象類,不能創(chuàng)建對象,但它包含了數百個函數,Swing中的每個組件都可以使用這些函數。Swing編程簡介使用NetBeans開發(fā)Swing應用程序的一般步驟:1.新建項目2.創(chuàng)建基于Swing的窗體3.Swing可視化設計4.設置窗體屬性5.進行事件處理6.測試程序Swing容器組件-簡介容器(Container)也是一個類,因此容器本身也是一個組件,具有組件的所有性質,但是它的主要功能是容納其它組件和容器。容器可以簡化圖形化界面的設計,以整體結構來布置界面。所有的容器都可以通過add()方法向容器中添加組件。容器可以嵌套使用。Swing容器組件-簡介頂層容器窗體JFrame、JWindow、JApplet、JDialog中間層容器面板JPanel、

滾動窗格JScrollPane、JScrollBar、

拆分窗格JSplitPane、索查標簽窗格JTabbedPane、JToolBar等特殊容器內部窗體JInternalFrame、分層窗格JLayeredPane、根窗格JRootPaneSwing框架-JFrameJFrame是Swing程序的最外層窗口,它具有操作系統窗口的特性:最小化/最大化、關閉、改變大小、移動等。JFrame類是Java.awt包中的Frame類的子類,該類在javax.swing包中在GUI編程中,一般至少有一個頂層窗體(JFrame、JDialog等)Swing框架-JFrameJFrame常用的構造方法用:JFrame()

構造一個初始時不可見的新窗體。JFrame(String

title)

創(chuàng)建一個新的、初始不可見的、具有指定標題的窗體。Swing框架-JFrame常用方法與基本操作:add()將組件添加到窗體中。

is/setVisible()

獲取/設置窗體的可視狀態(tài),換句話說,是否在屏幕上顯示。

get/setTitle()獲取/設置窗體的標題。

get/setState()獲取/設置窗體的最小化、最大化等狀態(tài)。

get/setLocation()獲取/設置窗體在屏幕上應當出現的位置。

get/setSize()獲取/設置窗體的大小。setDefaultCloseOperation(int

operation)設置點擊窗體上的關閉按鈕時的默認操作setIconImage(Iconicon)方法設置窗口圖標。getContentPane()獲取窗體的內容面板DO_NOTHING_ON_CLOSE:當窗口關閉時,不做任何處理;HIDE_ON_CLOSE:當窗口關閉時,隱藏這個窗口;DISPOSE_ON_CLOSE:當窗口關閉時,隱藏并處理這個窗口;EXIT_ON_CLOSE:當窗口關閉時,退出程序。課堂演示-創(chuàng)建一個新窗體設置標題方法1:屬性窗口:設置title屬性為“我的第一個Swing程序”方法2:添加代碼:this.setTitle("我的第一個Swing程序");設置尺寸方法1:屬性窗口-代碼:設置“窗體大小策略”為“生成調整大小代碼”

設置“窗體大小”的高度和寬度為300和200方法2:添加代碼:this.setSize(300,200);設置背景色

添加代碼:

this.getContentPane().setBackground(Color.red);設置SetDefaultCloseOperation

EXIT_ON_CLOSE17Swing對話框-JDialog對話框與框架(JFrame)有一些相似,但它一般是一個臨時的窗口,主要用于顯示提示信息或接受用戶輸入。對話框中一般不需要菜單條,也不需要改變窗口大小,用戶可以決定對話框的尺寸是否能被改變。在對話框出現時,可以設定禁止其他窗口的輸入,直到這個對話框被關閉。構造方法:JDialog(Dialogowner)構造一個屬于Dialog組件的對話框,無模式,無標題。JDialog(Dialogowner,booleanmodel)構造一個屬于Dialog組件的對話框,有模式,無標題。JDialog(Dialogowner,Stringtitle)構造一個屬于Dialog組件的對話框,無模式,有標題。JDialog(Dialogowner,Stringtitle,booleanmodel)構造一個屬于Dialog組件的對話框,有模式,有標題。CompanyLogoSwing對話框-JDialog常用成員方法有:getContentPane()返回此對話框的ContentPane對象。setDefaultCloseOperation(intoperation)設置當用戶在此對話框上啟動"close"時默認執(zhí)行的操作。setJMenuBar(JMenuBarmenu)設置此對話框的菜單欄。一般對話框都會依附在某個JFrame窗口上,對話框通常是一個程序運行的過程中與用戶互動的中間過程。Swing對話框-JDialogSwing面板-JPanelJPanel是一般的輕量級容器,可以容納其他組件。與JPanel相比,JFrame用來制作桌面程序主框架窗口,是頂級窗體,而JPanel只是普通面板。JPanel可以放在JFrame中,反之,則不行。通常,組件不直接放入頂級窗體JFrame,而是先放入普通面板JPanel中,然后將JPanel放入頂級窗體JFrame。這樣使得Swing程序中的組件更具有層次,方便組件管理與布局。Swing面板-JPanel常用構造方法:JPanel()

創(chuàng)建具有流布局的新面板。JPanel(LayoutManager

layout)

創(chuàng)建具有指定布局管理器的新面板。常用成員方法:add(Componentcomp)添加組件到面板中setBorder(Border

border)設置面板的邊框方法setBorder()中使用到的Border為邊界接口,通過BorderFactory類的相關createXXXBorder()方法可以創(chuàng)建其對象,并用來設置組件的邊框。如: JPaneljp1=newJPanel(); jp1.setBorder(BorderFactory.createTitledBorder("測試"));常用屬性border:設置邊框Swing面板-JPanelCompanyLogo存放工具欄組件的容器,工具欄中的組件通常是圖標形式顯示的按鈕,組合框也是工具欄中的常用組件。常用構造方法:JToolBar()JToolBar(Stringtitle)//工具欄處于浮動狀態(tài)時窗口的標題JToolBar(intorientation)//指定工具攔水平或垂直方向放置常用成員方法:add(Componentcomp)//增加組件到工具欄addSeparator()//在工具欄末尾添加一個分隔符工具欄上的組件調用下列方法可以為該命令設置提示信息:

setToolTipText(Stringtext)Swing工具欄-JToolBarCompanyLogo課堂實踐創(chuàng)建一個標題為“我的第一個窗口”,大小為(300,200),位置居中的窗口。提示:在屬性窗口-代碼中選擇“生成中心”即可居中顯示。圖形界面基礎知識Swing編程的一般流程相對固定容器分為頂層容器和中間容器頂層容器一般只有一個小結CompanyLogo第二講

——Swing常用組件

使用NetBeans開發(fā)Swing應用程序掌握Swing常用組件的屬性設置及基本操作常用基本組件:JLabel//標簽JTextField//文本字段JPasswordField//口令字段JTextArea//文本域JButton//按鈕JRadioButton//單選按鈕JCheckBox//復選框JList//列表JMenu//菜單學習內容CompanyLogoSwing組件創(chuàng)建及使用的一般流程為:創(chuàng)建一個新組件添加組件到某一中間容器或頂層容器中對容器中的組件進行布局管理對組件添加事件處理組件處理流程CompanyLogoSwing標簽、文本與按鈕JLabel標簽JTextField文本字段JPasswordField口令字段JButton按鈕JPanel面板JTextArea文本區(qū)域各組件/容器對象的屬性設置控件類型/變量名稱屬性名屬性值窗體JFrametitle用戶注冊界面代碼->窗體大小策略生成調整大小代碼->生成中心√面板jPanel1borderTitledBorder->標題:用戶注冊標簽jLabel1text用戶名:標簽jLabel2text密碼:標簽jLabel3text個人說明:文本字段UserNameTexttext空,用于輸入用戶名口令字段PasswordTexttext空,用于輸入密碼echoChar*文本區(qū)域UserInfoText用于輸入個人說明按鈕okButtontext提交按鈕cancleButtontext取消程序功能點擊“提交”按鈕:1、若沒有輸入用戶名或密碼2、輸入用戶名和密碼事件處理

privatevoidokButtonActionPerformed(java.awt.event.ActionEvent

evt){Stringusername=UserNameText.getText().trim();Stringpassword=PasswordText.getPassword().toString();if(username.equals("")||password.equals("")){

JOptionPane.showMessageDialog(this,"你還沒有輸入用戶名或密碼!");}else{

JOptionPane.showMessageDialog(this,"恭喜你注冊成功,你的用戶名為:"+username);System.exit(0);}}事件處理點擊“取消”按鈕:退出程序

privatevoidcancleButtonActionPerformed(java.awt.event.ActionEventevt){System.exit(0);}標簽JLabel常用方法如下:get/setText():獲取/設置標簽的文本。get/seticon():獲取/設置標簽的圖片。get/setHorizontalAlignment():獲取/設置文本的水平位置。get/setVerticalAlignment():獲取/設置文本的垂直位置。get/setDisplayedMnemonic():獲取/設置標簽的訪問鍵(下劃線文字)。get/setLableFor():獲取/設置這個標簽附著的組件,所以當用戶按下Alt+訪問鍵時,焦點轉移到指定的組件。按鈕JButton

JButton的常用構造方法有:JButton(Icon

icon)

創(chuàng)建一個帶圖標的按鈕。JButton(String

text)

創(chuàng)建一個帶文本的按鈕。JButton(String

text,Icon

icon)

創(chuàng)建一個帶初始文本和圖標的按鈕。JButton的常用成員方法有:get/setText()獲取/設置標簽的文本。get/seticon()獲取/設置標簽的圖片。get/setHorizontalAlignment()獲取/設置文本的水平位置。get/setVerticalAlignment()獲取/設置文本的垂直位置。get/setDisplayedMnemonic()獲取/設置訪問鍵(下劃線字符),與Alt按鈕組合時,造成按鈕單擊。文本框JTextField

JTextField是單行文本輸入框,主要用來接收用戶的輸入。JTextField的常用構造方法為:JTextField()構造一個列數為0的文本框。JTextField(intcolumns)構造一個指定列數的文本框。JTextField(Stringtext)構造一個指定文本的文本框。JTextField(Stringtext,intcolumns)構造一個指定文本和列數的文本框。常用方法有:set/getText()設置/獲取文本框內容。set/getFont(Fontf)設置/獲取當前字體。set/getHorizontalAlignment()設置/獲取水平對齊方式。set/getColumns()設置/獲取JTextField

中的列數。密碼框JPasswordField

一種特殊類型的文本框,JPasswordField

是JTextField

的子類,其構造方法也是類似的。用戶可以向密碼框中輸入文本并加以編輯,和文本框不同的是,向密碼框中輸入文本時,顯示的不是實際輸入的文本,而是特殊的回顯字符(通常是‘*’)??梢允褂胹etEchoChar(charc)方法或設置它的echoChar屬性來改變缺省的回顯字符。JPasswordField的構造方法與JTextField的基本一致,常用成員方法中要注意的是JTextField獲取文本框中文本使用的是getText(),該方法返回的是一個String類型的對象;而要取得密碼框中的文本,使用方法getPassword(),該方法返回的是一個char數組。文本域JTextArea

JTextArea常用構造方法有:JTextArea()構造行數和列數為0的文本域。JTextArea(introws,intcolumns)構造具有指定行數和列數的文本域。JTextArea(Stringtext)構造具有初始文本的文本域。JTextArea(Stringtext,introws,intcolumns)構造具有指定行數和列數,并有初始文本的文本域。常用的成員方法有:append(String

str)

將給定文本追加到文檔結尾。insert(String

str,int

pos)

將指定文本插入指定位置。set/getColumns()

設置/獲取文本域的列數。set/getRows()

設置/獲取文本域的行數。set/getLineWrap()

設置/獲取文本區(qū)的換行策略。Set/getText()設置/獲取文本域內容。setWrapStyleWord(boolean

word)

設置換行方式(如果文本區(qū)要換行)。課堂實踐-系統登錄界面設計程序界面:程序功能假定用戶名和密碼均為ccit,若沒有輸入用戶名和密碼,點擊“確定”后顯示如下圖若輸入的用戶名和密碼不正確,點擊“確定”后顯示如下圖程序功能若輸入正確用戶名和密碼,點擊“確定”后顯示如下圖點擊“退出”后退出程序綜合實踐(標簽、文本框、按鈕)編寫一個實現加、減、乘、除四則運算的計算器程序,用四個按鈕分別表示+、-、*、/運算,在兩個文本框中輸入數據,單擊按鈕后,在第三個文本框中顯示運算結果。程序功能提示:編寫這個程序需要對四個按鈕的動作事件做出響應,因為它們所處理的事件是一致的,所以我們不需要定義4個事件,這里可以定義一個共同的動作事件,在此事件處理代碼中,去區(qū)分是哪個按鈕被單擊了,并以此執(zhí)行相應的運算。開啟/關閉按鈕JToggleButtonJTextArea文本區(qū)域JToggleButton開啟/關閉按鈕程序功能單擊”設置背景”按鈕,將文本區(qū)域背景色設為紅色,并且,開啟/關閉按鈕上的文本變?yōu)椤比∠尘啊眴螕簟比∠尘啊卑粹o,將文本區(qū)域背景紅色取消,重新設為白色,并且,開啟/關閉按鈕上的文本變?yōu)椤痹O置背景”事件處理單選按鈕與復選框JRadioButton單選按鈕JComboBox組合框JCheckBox復選框JTextArea文本區(qū)域各組件/容器對象的屬性設置控件類型/變量名稱屬性名屬性值窗體JFrametitle個人問卷調查resizablefalse面板jPanel1borderTitledBorder->標題:請選擇標簽jLabel1text性別標簽jLabel2text愛好標簽jLabel3text系別按鈕組buttonGroup1單選按鈕mailRadiolabel/text男單選按鈕femailRadiolabel/text女復選框singChecklabel/text唱歌復選框dancingChecklabel/text跳舞復選框netChecklabel/text上網復選框sportChecklabel/text運動組合框DepartmentCombomodel軟件學院

信息管理系

電子與電氣工程學院

機電系

藝術系

外語系

網絡通信學院selectedItem軟件學院文本區(qū)域resultText

用于顯示選擇結果事件處理-單選按鈕(選擇“性別”)添加性別單選按鈕的事件(ActionPerformed或ItemStateChanged或MouseClick等)代碼,當用戶單擊性別男或性別女(單選按鈕)均會觸發(fā)如下事件。二者均可,只需一個:性別單選按鈕的事件事件處理-復選框(選擇“愛好”)程序運行后,當用戶單擊“愛好”JCheckBox中的任何一個控件時,都將觸發(fā)interestingItemStateChanged事件。該事件將讀取選擇的愛好信息并將其顯示在JTextArea中。其中flag為全局變量(boolean型),控制“愛好”顯示格式事件處理-組合框(選擇“系別”)單選按鈕JRadioButton

JRadioButton的構造方法有:JRadioButton(Icon

icon)

創(chuàng)建一個初始未選擇、具有指定的圖像單選按鈕。JRadioButton(Icon

icon,boolean

selected)

創(chuàng)建一個具有指定圖像和選擇狀態(tài)的單選按鈕JRadioButton(String

text)

創(chuàng)建一個具有指定文本的狀態(tài)為未選擇的單選按鈕。JRadioButton(String

text,boolean

selected)

創(chuàng)建一個具有指定文本和選擇狀態(tài)的單選按鈕。JRadioButton(String

text,Icon

icon)

創(chuàng)建一個具有指定的文本和圖像并初始化為未選擇的單選按鈕JRadioButton(String

text,Icon

icon,boolean

selected)

創(chuàng)建一個具有指定的文本、圖像和選擇狀態(tài)的單選按鈕。常用成員方法有:setSeletcted(booleanselected)設置按鈕是否被選中isSelected()返回單選按鈕的當前狀態(tài)復選框JCheckBox

JCheckBox的構造方法有:JCheckBox()

創(chuàng)建一個沒有文本、沒有圖標并且最初未被選定的復選框。JCheckBox(Icon

icon)

創(chuàng)建有一個圖標、最初未被選定的復選框。JCheckBox(Icon

icon,boolean

selected)

創(chuàng)建一個帶圖標的復選框,并指定其最初是否處于選定狀態(tài)JCheckBox(String

text)創(chuàng)建一個帶文本的、最初未被選定的復選框。JCheckBox(String

text,boolean

selected)

創(chuàng)建一個帶文本的復選框,并指定其最初是否處于選定狀態(tài)。JCheckBox(String

text,Icon

icon)

創(chuàng)建帶有指定文本和圖標的、最初未選定的復選框。JCheckBox(String

text,Icon

icon,boolean

selected)創(chuàng)建一個帶文本和圖標的復選框,并指定其最初是否處于選定狀態(tài)常用成員方法有:setSeletcted(booleanselected)設置按鈕是否被選中isSelected()返回單選按鈕的當前狀態(tài)組合框JComboBoxJComboBox的構造方法JComboBox():構造一個JComboBoxJComboBox(finalObjectitems[]):構造一個JComboBox,以數組items為選項.JComboBox(Vectoritems):構造一個JComboBox,以向量items為選項JComboBox(ComboBoxModelmodel):構造一個JComboBox,以model為模型組合框JComboBox常用方法voidaddItem():添加一個選項voidinsertItemAt(Object

anObject,int

index)在項列表中的給定索引處插入項。voidremoveItem(Object

anObject)從項列表中移除項。voidremoveItemAt(int

anIndex)移除anIndex

處的項。ObjectgetItemAt(inti):返回位置i處的選項int

getItemCount():返回選項總數int

getSelectIndex():返回選中的選項位置ObjectgetSelectedItem():返回選中的選項voidsetEditable(Boolean

aFlag):設置可修改課堂實踐實現一個市場調查程序,功能如圖所示。主界面點擊“提交”后JList可以讓用戶在多個條目中作出選擇,選擇模式可以是單一選擇、連續(xù)選擇、多項選擇選擇模式對應于

ListSelectionModel

中的3個常量:SINGLE_SELECTION只能選擇一條。SINGLE_INTERVAL_SELECTION按住[Shift]鍵可選擇聯系的區(qū)間。MULTIPLE_INTERVAL_SELECTION按住[Ctrl]鍵可選擇多條。

常用組件-JListCompanyLogo構造方法:JList(ListModelmodel)構造一個指定模式的JList對象JList(Object[]items)利用數組對象構造一個JList對象JList(Vectoritems)利用Vector對象構造一個JList對象常用方法:int

getSelectedIndex()返回列表中的第一個被選擇的項目的索引,-1表示沒有項目被選。ObjectgetSelectedValue()返回JList列表中的第一個被選擇的項目的名字。isSelectedIndex(int

index)判斷第index項是否被選。setSelectedIndex(int

index)選擇第index項。setSelectionMode(int

selectionMode)設置列表的選擇模式常用組件-JListCompanyLogo示例JList列表課堂實踐JList列表JTextArea文本域程序主界面課堂實踐-功能實現“添加”按鈕:將左側列表中選中的部門加入到右側的文本區(qū)域,若右側的文本區(qū)域已經存在該部門,則不加入并提示”已存在”的信息.課堂實踐-功能實現“刪除”按鈕:將左側列表中選中的部門從右側的文本區(qū)域中刪除,若右側的文本區(qū)域沒有該部門,則提示”沒有該部門”的信息.每個菜單組件包括一個菜單條(JMenuBar),每個JMenuBar由若干個菜單項(JMenu)組成每個JMenu又由若干個子菜單項(JMenuItem)組成。JFrame提供下列方法設置菜單欄:

voidsetJMenuBar(JMenuBar

mb)示例:

JFrameframe=newJFrame();

JMenuBar

mb=newJMenuBar();

f.setMenuBar(mb);常用組件-菜單CompanyLogo一個窗體中最多只能有一個JMenuBar構造方法:JMenuBar()創(chuàng)建一個菜單欄常用方法:JMenuadd(JMenumenu)添加指定菜單到菜單欄JMenugetMenu(intindex)返回指定的菜單項intgetMenuCount()返回菜單的總數常用組件-JMenuBarCompanyLogo構造方法:JMenu()創(chuàng)建一個沒有標題的菜單JMenu(Strings)創(chuàng)建標題為s的菜單常用方法:JMenuItemadd(JMenuItemitem)將菜單項item加入菜單末尾voidaddSeperator()向菜單添加一個分隔符voidremove(intindex)刪除索引為index的菜單項voidremove(JMenuItemitem)刪除指定菜單項JMenuItemadd(JMenuItemitem,intindex)向指定位置插一個菜單項常用組件-JMenuCompanyLogo構造方法:JMenuItem(Stringtext)創(chuàng)建一個標題為text的菜單項JMenuItem(Stringtext,Iconicon)創(chuàng)建帶圖標和文本的菜單

常用方法:voidsetText(Stringlab)設定標題為labvoidsetEnabled(booleanb)設定菜單項是否可用,true可用,false為不可用voidsetAccelerator(KeyStrokekey)指定菜單上的快捷鍵常用組件-JMenuItemCompanyLogo⑴創(chuàng)建一個菜單欄,并將菜單欄置于窗體中⑵在菜單欄中添加菜單⑶在菜單中添加菜單項課堂演示CompanyLogo按要求完成如下圖所示的界面。課堂實踐CompanyLogo事件處理編輯菜單—剪切編輯菜單—復制事件處理編輯菜單—粘貼事件處理編輯菜單—刪除、全選、時間/日期事件處理格式菜單—字體、字形、字號事件處理格式菜單—文本顏色思考:文件菜單的實現?常用組件的使用步驟創(chuàng)建組件對象設置相關屬性添加到容器中小結第三講

——布局管理器

使用NetBeans開發(fā)Swing應用程序引入在上一講的課堂實踐中,設計界面時該如何布局比較合理?布局管理器的相關基礎知識FlowLayoutBorderLayoutGridLayoutCardLayoutnull單元學習內容CompanyLogoJava為了實現跨平臺的特性并且獲得動態(tài)的布局效果,將容器內的所有組件的大小、位置、順序、間隔等交給“布局管理器”負責管理。不同的布局管理器使用不同算法和策略,程序可以選擇不同的布局管理器來決定布局,主要有FlowLayout,BorderLayout,GridLayout,CardLayout,BoxLayou,GridBagLayout,null等。通過容器組件的setLayout()方法可以設定容器中組件排放策略,如:setLayout(newBorderLayout());setLayout(null);布局管理器80布局管理器布局管理器主要負責以下幾個方面:確定容器的全面尺寸;確定容器內各元素的大??;確定容器內各元素的位置;確定元素間的間隔距離。布局管理器決定容器中組件的排列方式,布局管理器都實現了接口LayoutManager接口,可以使用LayoutManager的變量來存儲它們中的任何一個。流式布局管理器—FlowLayoutFlowLayout

是JPanel、JApplet的缺省布局管理器。其組件的放置規(guī)律是從上到下、從左到右進行放置。當容器的大小發(fā)生變化時,用FlowLayout管理的組件會發(fā)生變化,其變化規(guī)律是:組件的大小不變,但是相對位置會發(fā)生變化。如圖中有三個按鈕都處于同一行,但是如果把該窗口變窄,窄到剛好能夠放下一個按鈕,則第二個按鈕將折到第二行,第三個按鈕將折到第三行。按鈕"Open"本來在按鈕"OK"的右邊,但是現在跑到了下面,所以說"組件的大小不變,但是相對位置會發(fā)生變化"。81流布局管理器—FlowLayout構造方法:FlowLayout()

居中對齊,水平和垂直間距為5像素的流布局管理器。FlowLayout(int

align)

指定對齊方式,水平和垂直間距為5像素的流布局管理器。FlowLayout(int

align,int

hgap,int

vgap)指定對齊方式及水平和垂直間距的流布局管理器。82常用方法intgetHgap()//返回組件的水平間隔voidsetHgap(inthgap)()//設定組件的水平間隔intgetVgap()//返回組件的垂直間隔voidsetVgap(inthgap)//設定組件的垂直間隔intgetAlignment()//返回組件的對齊方式voidsetAlignment(intalign)//設定組件的對齊方式示例—FlowLayoutBorderLayout是JWindow,JFrame和JDialog的缺省布局管理器。BorderLayout布局管理器把容器分成5個區(qū)域:North,South,East,West和Center,每個區(qū)域只能放置一個組件。使用BorderLayout的時候,如果容器的大小發(fā)生變化,其變化規(guī)律為:組件的相對位置不變,大小發(fā)生變化。例如容器變高了,則North、South區(qū)域不變,West、Center、East區(qū)域變高;如果容器變寬了,West、East區(qū)域不變,North、Center、South區(qū)域變寬。不一定所有的區(qū)域都有組件,如果四周的區(qū)域(West、East、North、South區(qū)域)沒有組件,則由Center區(qū)域去補充,但是如果Center區(qū)域沒有組件,則保持空白:邊界布局管理器—BorderLayoutCenterNorthSouthWestEast邊界布局管理器—BorderLayout構造方法BorderLayout()//建立一個BorderLayout對象,組件間隔默認,水平垂直為0。BorderLayout(int

hgap,int

vgap)//建立一個BorderLayout對象,參數設定水平垂直間隔。常用方法int

getHgap()//返回組件水平間隔voidsetHgap(int

hgap)//設定組件水平間隔int

getVgap()//返回組件垂直間隔voidsetVgap(int

vgap)//設定組件垂直間隔

85新建窗體,在窗體中添加三個按鈕,分別使用FlowLayout和BorderLayout進行布局管理.對兩種布局特點進行總結課堂實踐CompanyLogo網格布局管理器—GridLayout使容器中各個組件呈網格狀布局,平均占據容器的空間,將容器空間劃分成nxm的大小相同的小格,每格區(qū)間放一個組件,按序存放(從左至右,從上至下)。示例:JFramef=newJFrame(“GridLayout”);

f.setLayout(newGridLayout(2,3));

//容器平均分成2行3列共6格

f.add(newJButton("1"));//添加到第一行的第一格

f.add(newJButton("2"));//添加到第一行的下一格

...

f.add(newJButton("6"));//添加到第二行的第三格87網格布局管理器—GridLayout構造方法GridLayout()//建立一個GridLayout對象,在一行中排列組件,組件之間的默認間隔為0GridLayout(int

rows,intcols)//建立一個GridLayout對象,將容器分為rows行,cols列,組件之間的水平和垂直間隔為0GridLayout(int

rows,int

cols,int

hgap,int

vgap)//建立一個GridLayout對象,將容器分為rows行,cols列,設定組件之間的水平和垂直間隔常用方法int

getColumns()//返回設定列數voidsetColumns(intcols)//設定列數int

getRows()//返回設定行數voidsetRows(introws)//設定行數int

getHgaps()//返回設定水平間隔voidsetHgaps(int

hgap)//設定水平間隔int

getVgap()//返回設定垂直間隔voidsetVgap(int

vgap)//設定垂直間隔88卡片布局管理器—CardLayoutCardLayout將容器中的所有組件象撲克牌一樣堆疊在一起,每次只能看到最上面的一張,要看到別的,要用相關

方法。構造方法CardLayout()//建立一個CardLayout對象,組件之間間隔默認為0CardLayout(int

hgap,int

vgap)//建立一個CardLayout對象,組件之間設定間隔89常用方法voidfirst(Containercont)//顯示容器cont的第一個對象voidlast(Containercont)//顯示容器cont的最后一個對象voidnext(Containercont)//顯示容器cont的下一個對象voidprevious(Containercont)//顯示容器cont的前一個對象voidshow(Containercont,Stringname)//顯示容器cont中名為name的對象intgetHgap()//返回組件水平間隔voidsetHgap(inthgap)//設定組件水平間隔intgetVgap()//返回組件垂直間隔voidsetVgap(inthgap)//設定組件水平間隔卡片布局管理器—CardLayoutCompanyLogo91null稱為無布局管理器。可以隨心所欲安排容器,但是跨平臺時,可能發(fā)生變化。容器的嵌套

容器中再添加容器,這樣就形成了容器的嵌套。示例:

f=newFrame(“GUIexample3”);

bw=newButton(“West”);

bc=newButton("Workspaceregion");

f.add(bw,BorderLayout.WEST);

f.add(bc,BorderLayout.CENTER);

p=newPanel();

f.add(p,"North");

bfile=newButton("File");

bhelp=newButton("Help");

p.add(bfile); p.add(bhelp);

f.pack();

f.setVisible(true);容器的嵌套92課后實踐CompanyLogo設計一個簡易計算器,并實現基本功能。小結JFrame的缺省布局管理器為BorderLayout。JPanel

的缺省布局管理器為FlowLayout。當把JPanel

作為一個組件添加到某個容器中后,該JPanel

仍然可以有自己的布局管理器。因此,可以利用JPanel

使得BorderLayout

中某個區(qū)域顯示多個組件,達到設計復雜用戶界面的目的。如果采用無布局管理器setLayout(null),則必須使用setLocation(),setSize(),setBounds()等方法手工設置組件的大小和位置,此方法會導致平臺相關,不鼓勵使用。

94第四講

——事件處理機制使用NetBeans開發(fā)Swing應用程序回顧與引入CompanyLogo常用容器Swing常用組件布局管理器輸入用戶名和密碼后,單擊“確定”,能做出正確判斷和響應?事件處理基本原理事件處理步驟事件監(jiān)聽器類定義事件響應處理事件適配器單元學習內容CompanyLogo圖形用戶界面識別和區(qū)分鼠標和鍵盤的操作并做出相應的反映。Java語言將每一個鍵盤或鼠標的操作定義為一個“事件”,在編程中只需定義每個特定事件發(fā)生時程序應該做出何種響應即可。這是圖形用戶界面中的“事件”和“事件響應”事件處理模型CompanyLogo除了鼠標和鍵盤的操作,圖形界面等元素都可以引發(fā)事件,系統對這些事件分別定義處理代碼,以保證系統有序地工作。事件處理模型Java的事件處理機制:一個產生事件的對象必須設定其事件處理的監(jiān)聽者對象(Listener),當事件發(fā)生時,監(jiān)聽者便會依據事件的類型來執(zhí)行相應的程序。要能夠讓圖形界面接收用戶的操作,就必須給各個組件加上事件處理機制。在事件處理的過程中,主要涉及幾類對象:EventSource—事件源,事件發(fā)生的場所,通常就是可以激發(fā)事件的各個組件,例如按鈕、文本框等。Event—事件,用戶對界面操作在java語言上的描述,以類的形式出現,例如鍵盤操作對應的事件類是KeyEvent。Eventhandler—事件處理者,接收事件對象并對其進行處理的對象。99事件及處理機制組件(事件源)觸發(fā)一個相應類型的事件此事件由相應類型的Listener(事件監(jiān)聽者)接收并處理當事件發(fā)生時,監(jiān)聽者根據事件的類型來執(zhí)行相應的程序。100Button1事件源接收事件e,并做處理ActionListener事件監(jiān)聽者創(chuàng)建ActionEvente單擊通過調用源對象的addActionListener()方法將監(jiān)聽器連接到事件源上一個事件監(jiān)聽器對象需和某個事件源的某種事件進行關聯,這稱為向事件源注冊事件監(jiān)聽器對象。使用授權處理模型進行事件處理的一般方法歸納如下:⑴對于某一類型的事件XXXEvent,要想接收并處理這類事件,必須定義相應的事件監(jiān)聽器類,該類需要實現與該事件相對應的接口XXXListener;⑵事件源實例化以后,必須進行授權,注冊該類事件的監(jiān)聽器,使用事件源.addXXXListener(XXXListener)

方法來注冊監(jiān)聽器。

事件及處理機制CompanyLogo事件及處理機制CompanyLogo事件類層次結構CompanyLogo所有事件的父類事件處理步驟1.根據需要定義相應類型的監(jiān)聽者類,在類的定義中完成事件的處理;2.創(chuàng)建事件監(jiān)聽者對象;3.為將會觸發(fā)事件的組件C注冊相應的事件監(jiān)聽者對象(使用C的addXXXListener()方法)。104實現相應的監(jiān)聽接口105AWT事件監(jiān)聽器及接口定義事件監(jiān)聽器的幾種方法自身類作為事件監(jiān)聽器在類頭部加上“implements監(jiān)聽接口”,類體中實現接口中的方法,完成事件處理。監(jiān)聽對象可以使用this表示外部類作為事件監(jiān)聽器定義一個獨立的類實現監(jiān)聽接口,完成事件處理創(chuàng)建類的對象表示監(jiān)聽對象匿名內部類作為事件監(jiān)聽器注冊監(jiān)聽對象時,直接創(chuàng)建監(jiān)聽對象并給出類體實現事件處理內部類作為事件監(jiān)聽器將監(jiān)聽類定義放到自身類內部定義

107定義事件監(jiān)聽器說明可以聲明多個接口,接口之間用逗號隔開……implementsMouseMotionListener,MouseListener,WindowListener;可以由同一個對象監(jiān)聽一個事件源上發(fā)生的多種事件:f.addMouseMotionListener(this);f.addMouseListener(this);f.addWindowListener(this);

則對象f上發(fā)生的多個事件都將被同一個監(jiān)聽器接收和處理。定義事件監(jiān)聽器說明可以通過事件對象獲得詳細資料,比如本例中就通過事件對象獲得了鼠標發(fā)生時的坐標值。publicvoidmouseDragged(MouseEvente){

Strings="Mousedragging:X="+e.getX()+"Y="+e.getY();

tf.setText(s);}無論實現了幾個接口,接口中已聲明的方法必須一一實現,如果對某事件不感興趣,可以不具體實現其方法,而用空的方法體來代替。108109注冊事件監(jiān)聽器要使組件能夠響應相應事件,必須將該組件注冊到監(jiān)聽器上。一個組件可以注冊多個監(jiān)聽器。AWT的組件類中提供注冊和注銷監(jiān)聽器的方法:注冊監(jiān)聽器:

publicvoidadd<ListenerType>(<ListenerType>

listener);注銷監(jiān)聽器:

publicvoidremove<ListenerType>(<ListenerType>

listener);

110按鈕單擊事件示例importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;classButtonHandlerimplementsActionListener{ publicvoidactionPerformed(ActionEvent

argo){

System.out.println("按鈕被按下"); }}publicclassEventDemo{ public

溫馨提示

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

評論

0/150

提交評論