




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
模塊6系統(tǒng)界面設(shè)計
——圖形界面設(shè)計及事件處理主要內(nèi)容學(xué)習(xí)目標(biāo)及重、難點1教學(xué)內(nèi)容2課堂、拓展實踐3小結(jié)4學(xué)習(xí)目標(biāo)及重點、難點學(xué)習(xí)目標(biāo)了解圖形界面的基礎(chǔ)知識掌握Swing編程步驟掌握容器的創(chuàng)建與使用掌握常用Swing組件的創(chuàng)建和使用掌握布局管理器的使用掌握事件處理機(jī)制重點容器的創(chuàng)建與使用布局管理器事件處理機(jī)制難點頁面的布局管理事件處理重、難點;;;回顧Java基礎(chǔ)數(shù)據(jù)類型、運(yùn)算符、表達(dá)式分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)數(shù)組的創(chuàng)建與使用字符串的基本操作面向?qū)ο蠡A(chǔ)面向?qū)ο笏枷腩惖膭?chuàng)建與使用對象的創(chuàng)建與使用繼承、對象轉(zhuǎn)型、多態(tài)、接口集合容器set、List、Map引入前面的所有模塊中,用戶與系統(tǒng)的交互是通過控制臺輸入/輸出實現(xiàn),操作不方便,交互性不好。如何能像Windows界面操作那樣美觀、方便,實現(xiàn)交互功能?第一講
——Swing基礎(chǔ)及常用容器
使用NetBeans開發(fā)Swing應(yīng)用程序圖形界面簡介圖形用戶界面(Graphical
user
interface,稱GUI)是采用圖形方式顯示的計算機(jī)操作用戶界面,包括窗口、菜單、按鈕、工具欄和其他各種屏幕元素。Java中主要提供了兩個包為GUI設(shè)計提供豐富的功能,它們是AWT(java.awt)和Swing(javax.swing)。圖形界面簡介1.AWTAWT是Java1.0提供的抽象視窗工具包,將處理用戶界面的任務(wù)交給操作系統(tǒng),由底層平臺負(fù)責(zé)創(chuàng)建圖形界面元素,AWT組件構(gòu)建的GUI程序受操作系統(tǒng)的影響,在不同平臺上進(jìn)行測試會有不同的結(jié)果顯示。2.SwingSwing是構(gòu)筑在AWT上層的一組GUI組件的集合,對于底層平臺的依賴更少。Swing中保留了AWT的事件處理、顏色、字體等處理。設(shè)計和實現(xiàn)圖形用戶界面主要有兩方面:創(chuàng)建組成界面的各個元素、設(shè)置它們的屬性、指定它們的位置,構(gòu)成完整的圖形用戶界面的外觀。定義圖形用戶界面的事件、確定界面各元素對不同事件的響應(yīng),實現(xiàn)與用戶的交互。圖形界面簡介Swing編程簡介Swing組件都是AWT的Container類的直接子類和間接子類,各類之間的關(guān)系如下。
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)建對象,但它包含了數(shù)百個函數(shù),Swing中的每個組件都可以使用這些函數(shù)。Swing編程簡介使用NetBeans開發(fā)Swing應(yīng)用程序的一般步驟:1.新建項目2.創(chuàng)建基于Swing的窗體3.Swing可視化設(shè)計4.設(shè)置窗體屬性5.進(jìn)行事件處理6.測試程序Swing容器組件-簡介容器(Container)也是一個類,因此容器本身也是一個組件,具有組件的所有性質(zhì),但是它的主要功能是容納其它組件和容器。容器可以簡化圖形化界面的設(shè)計,以整體結(jié)構(gòu)來布置界面。所有的容器都可以通過add()方法向容器中添加組件。容器可以嵌套使用。Swing容器組件-簡介頂層容器窗體JFrame、JWindow、JApplet、JDialog中間層容器面板JPanel、
滾動窗格JScrollPane、JScrollBar、
拆分窗格JSplitPane、索查標(biāo)簽窗格JTabbedPane、JToolBar等特殊容器內(nèi)部窗體JInternalFrame、分層窗格JLayeredPane、根窗格JRootPaneSwing框架-JFrameJFrame是Swing程序的最外層窗口,它具有操作系統(tǒng)窗口的特性:最小化/最大化、關(guān)閉、改變大小、移動等。JFrame類是Java.awt包中的Frame類的子類,該類在javax.swing包中在GUI編程中,一般至少有一個頂層窗體(JFrame、JDialog等)Swing框架-JFrameJFrame常用的構(gòu)造方法用:JFrame()
構(gòu)造一個初始時不可見的新窗體。JFrame(String
title)
創(chuàng)建一個新的、初始不可見的、具有指定標(biāo)題的窗體。Swing框架-JFrame常用方法與基本操作:add()將組件添加到窗體中。
is/setVisible()
獲取/設(shè)置窗體的可視狀態(tài),換句話說,是否在屏幕上顯示。
get/setTitle()獲取/設(shè)置窗體的標(biāo)題。
get/setState()獲取/設(shè)置窗體的最小化、最大化等狀態(tài)。
get/setLocation()獲取/設(shè)置窗體在屏幕上應(yīng)當(dāng)出現(xiàn)的位置。
get/setSize()獲取/設(shè)置窗體的大小。setDefaultCloseOperation(int
operation)設(shè)置點擊窗體上的關(guān)閉按鈕時的默認(rèn)操作setIconImage(Iconicon)方法設(shè)置窗口圖標(biāo)。getContentPane()獲取窗體的內(nèi)容面板DO_NOTHING_ON_CLOSE:當(dāng)窗口關(guān)閉時,不做任何處理;HIDE_ON_CLOSE:當(dāng)窗口關(guān)閉時,隱藏這個窗口;DISPOSE_ON_CLOSE:當(dāng)窗口關(guān)閉時,隱藏并處理這個窗口;EXIT_ON_CLOSE:當(dāng)窗口關(guān)閉時,退出程序。課堂演示-創(chuàng)建一個新窗體設(shè)置標(biāo)題方法1:屬性窗口:設(shè)置title屬性為“我的第一個Swing程序”方法2:添加代碼:this.setTitle("我的第一個Swing程序");設(shè)置尺寸方法1:屬性窗口-代碼:設(shè)置“窗體大小策略”為“生成調(diào)整大小代碼”
設(shè)置“窗體大小”的高度和寬度為300和200方法2:添加代碼:this.setSize(300,200);設(shè)置背景色
添加代碼:
this.getContentPane().setBackground(Color.red);設(shè)置SetDefaultCloseOperation
EXIT_ON_CLOSE17Swing對話框-JDialog對話框與框架(JFrame)有一些相似,但它一般是一個臨時的窗口,主要用于顯示提示信息或接受用戶輸入。對話框中一般不需要菜單條,也不需要改變窗口大小,用戶可以決定對話框的尺寸是否能被改變。在對話框出現(xiàn)時,可以設(shè)定禁止其他窗口的輸入,直到這個對話框被關(guān)閉。構(gòu)造方法:JDialog(Dialogowner)構(gòu)造一個屬于Dialog組件的對話框,無模式,無標(biāo)題。JDialog(Dialogowner,booleanmodel)構(gòu)造一個屬于Dialog組件的對話框,有模式,無標(biāo)題。JDialog(Dialogowner,Stringtitle)構(gòu)造一個屬于Dialog組件的對話框,無模式,有標(biāo)題。JDialog(Dialogowner,Stringtitle,booleanmodel)構(gòu)造一個屬于Dialog組件的對話框,有模式,有標(biāo)題。CompanyLogoSwing對話框-JDialog常用成員方法有:getContentPane()返回此對話框的ContentPane對象。setDefaultCloseOperation(intoperation)設(shè)置當(dāng)用戶在此對話框上啟動"close"時默認(rèn)執(zhí)行的操作。setJMenuBar(JMenuBarmenu)設(shè)置此對話框的菜單欄。一般對話框都會依附在某個JFrame窗口上,對話框通常是一個程序運(yùn)行的過程中與用戶互動的中間過程。Swing對話框-JDialogSwing面板-JPanelJPanel是一般的輕量級容器,可以容納其他組件。與JPanel相比,JFrame用來制作桌面程序主框架窗口,是頂級窗體,而JPanel只是普通面板。JPanel可以放在JFrame中,反之,則不行。通常,組件不直接放入頂級窗體JFrame,而是先放入普通面板JPanel中,然后將JPanel放入頂級窗體JFrame。這樣使得Swing程序中的組件更具有層次,方便組件管理與布局。Swing面板-JPanel常用構(gòu)造方法:JPanel()
創(chuàng)建具有流布局的新面板。JPanel(LayoutManager
layout)
創(chuàng)建具有指定布局管理器的新面板。常用成員方法:add(Componentcomp)添加組件到面板中setBorder(Border
border)設(shè)置面板的邊框方法setBorder()中使用到的Border為邊界接口,通過BorderFactory類的相關(guān)createXXXBorder()方法可以創(chuàng)建其對象,并用來設(shè)置組件的邊框。如: JPaneljp1=newJPanel(); jp1.setBorder(BorderFactory.createTitledBorder("測試"));常用屬性border:設(shè)置邊框Swing面板-JPanelCompanyLogo存放工具欄組件的容器,工具欄中的組件通常是圖標(biāo)形式顯示的按鈕,組合框也是工具欄中的常用組件。常用構(gòu)造方法:JToolBar()JToolBar(Stringtitle)//工具欄處于浮動狀態(tài)時窗口的標(biāo)題JToolBar(intorientation)//指定工具攔水平或垂直方向放置常用成員方法:add(Componentcomp)//增加組件到工具欄addSeparator()//在工具欄末尾添加一個分隔符工具欄上的組件調(diào)用下列方法可以為該命令設(shè)置提示信息:
setToolTipText(Stringtext)Swing工具欄-JToolBarCompanyLogo課堂實踐創(chuàng)建一個標(biāo)題為“我的第一個窗口”,大小為(300,200),位置居中的窗口。提示:在屬性窗口-代碼中選擇“生成中心”即可居中顯示。圖形界面基礎(chǔ)知識Swing編程的一般流程相對固定容器分為頂層容器和中間容器頂層容器一般只有一個小結(jié)CompanyLogo第二講
——Swing常用組件
使用NetBeans開發(fā)Swing應(yīng)用程序掌握Swing常用組件的屬性設(shè)置及基本操作常用基本組件:JLabel//標(biāo)簽JTextField//文本字段JPasswordField//口令字段JTextArea//文本域JButton//按鈕JRadioButton//單選按鈕JCheckBox//復(fù)選框JList//列表JMenu//菜單學(xué)習(xí)內(nèi)容CompanyLogoSwing組件創(chuàng)建及使用的一般流程為:創(chuàng)建一個新組件添加組件到某一中間容器或頂層容器中對容器中的組件進(jìn)行布局管理對組件添加事件處理組件處理流程CompanyLogoSwing標(biāo)簽、文本與按鈕JLabel標(biāo)簽JTextField文本字段JPasswordField口令字段JButton按鈕JPanel面板JTextArea文本區(qū)域各組件/容器對象的屬性設(shè)置控件類型/變量名稱屬性名屬性值窗體JFrametitle用戶注冊界面代碼->窗體大小策略生成調(diào)整大小代碼->生成中心√面板jPanel1borderTitledBorder->標(biāo)題:用戶注冊標(biāo)簽jLabel1text用戶名:標(biāo)簽jLabel2text密碼:標(biāo)簽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);}標(biāo)簽JLabel常用方法如下:get/setText():獲取/設(shè)置標(biāo)簽的文本。get/seticon():獲取/設(shè)置標(biāo)簽的圖片。get/setHorizontalAlignment():獲取/設(shè)置文本的水平位置。get/setVerticalAlignment():獲取/設(shè)置文本的垂直位置。get/setDisplayedMnemonic():獲取/設(shè)置標(biāo)簽的訪問鍵(下劃線文字)。get/setLableFor():獲取/設(shè)置這個標(biāo)簽附著的組件,所以當(dāng)用戶按下Alt+訪問鍵時,焦點轉(zhuǎn)移到指定的組件。按鈕JButton
JButton的常用構(gòu)造方法有:JButton(Icon
icon)
創(chuàng)建一個帶圖標(biāo)的按鈕。JButton(String
text)
創(chuàng)建一個帶文本的按鈕。JButton(String
text,Icon
icon)
創(chuàng)建一個帶初始文本和圖標(biāo)的按鈕。JButton的常用成員方法有:get/setText()獲取/設(shè)置標(biāo)簽的文本。get/seticon()獲取/設(shè)置標(biāo)簽的圖片。get/setHorizontalAlignment()獲取/設(shè)置文本的水平位置。get/setVerticalAlignment()獲取/設(shè)置文本的垂直位置。get/setDisplayedMnemonic()獲取/設(shè)置訪問鍵(下劃線字符),與Alt按鈕組合時,造成按鈕單擊。文本框JTextField
JTextField是單行文本輸入框,主要用來接收用戶的輸入。JTextField的常用構(gòu)造方法為:JTextField()構(gòu)造一個列數(shù)為0的文本框。JTextField(intcolumns)構(gòu)造一個指定列數(shù)的文本框。JTextField(Stringtext)構(gòu)造一個指定文本的文本框。JTextField(Stringtext,intcolumns)構(gòu)造一個指定文本和列數(shù)的文本框。常用方法有:set/getText()設(shè)置/獲取文本框內(nèi)容。set/getFont(Fontf)設(shè)置/獲取當(dāng)前字體。set/getHorizontalAlignment()設(shè)置/獲取水平對齊方式。set/getColumns()設(shè)置/獲取JTextField
中的列數(shù)。密碼框JPasswordField
一種特殊類型的文本框,JPasswordField
是JTextField
的子類,其構(gòu)造方法也是類似的。用戶可以向密碼框中輸入文本并加以編輯,和文本框不同的是,向密碼框中輸入文本時,顯示的不是實際輸入的文本,而是特殊的回顯字符(通常是‘*’)。可以使用setEchoChar(charc)方法或設(shè)置它的echoChar屬性來改變?nèi)笔〉幕仫@字符。JPasswordField的構(gòu)造方法與JTextField的基本一致,常用成員方法中要注意的是JTextField獲取文本框中文本使用的是getText(),該方法返回的是一個String類型的對象;而要取得密碼框中的文本,使用方法getPassword(),該方法返回的是一個char數(shù)組。文本域JTextArea
JTextArea常用構(gòu)造方法有:JTextArea()構(gòu)造行數(shù)和列數(shù)為0的文本域。JTextArea(introws,intcolumns)構(gòu)造具有指定行數(shù)和列數(shù)的文本域。JTextArea(Stringtext)構(gòu)造具有初始文本的文本域。JTextArea(Stringtext,introws,intcolumns)構(gòu)造具有指定行數(shù)和列數(shù),并有初始文本的文本域。常用的成員方法有:append(String
str)
將給定文本追加到文檔結(jié)尾。insert(String
str,int
pos)
將指定文本插入指定位置。set/getColumns()
設(shè)置/獲取文本域的列數(shù)。set/getRows()
設(shè)置/獲取文本域的行數(shù)。set/getLineWrap()
設(shè)置/獲取文本區(qū)的換行策略。Set/getText()設(shè)置/獲取文本域內(nèi)容。setWrapStyleWord(boolean
word)
設(shè)置換行方式(如果文本區(qū)要換行)。課堂實踐-系統(tǒng)登錄界面設(shè)計程序界面:程序功能假定用戶名和密碼均為ccit,若沒有輸入用戶名和密碼,點擊“確定”后顯示如下圖若輸入的用戶名和密碼不正確,點擊“確定”后顯示如下圖程序功能若輸入正確用戶名和密碼,點擊“確定”后顯示如下圖點擊“退出”后退出程序綜合實踐(標(biāo)簽、文本框、按鈕)編寫一個實現(xiàn)加、減、乘、除四則運(yùn)算的計算器程序,用四個按鈕分別表示+、-、*、/運(yùn)算,在兩個文本框中輸入數(shù)據(jù),單擊按鈕后,在第三個文本框中顯示運(yùn)算結(jié)果。程序功能提示:編寫這個程序需要對四個按鈕的動作事件做出響應(yīng),因為它們所處理的事件是一致的,所以我們不需要定義4個事件,這里可以定義一個共同的動作事件,在此事件處理代碼中,去區(qū)分是哪個按鈕被單擊了,并以此執(zhí)行相應(yīng)的運(yùn)算。開啟/關(guān)閉按鈕JToggleButtonJTextArea文本區(qū)域JToggleButton開啟/關(guān)閉按鈕程序功能單擊”設(shè)置背景”按鈕,將文本區(qū)域背景色設(shè)為紅色,并且,開啟/關(guān)閉按鈕上的文本變?yōu)椤比∠尘啊眴螕簟比∠尘啊卑粹o,將文本區(qū)域背景紅色取消,重新設(shè)為白色,并且,開啟/關(guān)閉按鈕上的文本變?yōu)椤痹O(shè)置背景”事件處理單選按鈕與復(fù)選框JRadioButton單選按鈕JComboBox組合框JCheckBox復(fù)選框JTextArea文本區(qū)域各組件/容器對象的屬性設(shè)置控件類型/變量名稱屬性名屬性值窗體JFrametitle個人問卷調(diào)查resizablefalse面板jPanel1borderTitledBorder->標(biāo)題:請選擇標(biāo)簽jLabel1text性別標(biāo)簽jLabel2text愛好標(biāo)簽jLabel3text系別按鈕組buttonGroup1單選按鈕mailRadiolabel/text男單選按鈕femailRadiolabel/text女復(fù)選框singChecklabel/text唱歌復(fù)選框dancingChecklabel/text跳舞復(fù)選框netChecklabel/text上網(wǎng)復(fù)選框sportChecklabel/text運(yùn)動組合框DepartmentCombomodel軟件學(xué)院
信息管理系
電子與電氣工程學(xué)院
機(jī)電系
藝術(shù)系
外語系
網(wǎng)絡(luò)通信學(xué)院selectedItem軟件學(xué)院文本區(qū)域resultText
用于顯示選擇結(jié)果事件處理-單選按鈕(選擇“性別”)添加性別單選按鈕的事件(ActionPerformed或ItemStateChanged或MouseClick等)代碼,當(dāng)用戶單擊性別男或性別女(單選按鈕)均會觸發(fā)如下事件。二者均可,只需一個:性別單選按鈕的事件事件處理-復(fù)選框(選擇“愛好”)程序運(yùn)行后,當(dāng)用戶單擊“愛好”JCheckBox中的任何一個控件時,都將觸發(fā)interestingItemStateChanged事件。該事件將讀取選擇的愛好信息并將其顯示在JTextArea中。其中flag為全局變量(boolean型),控制“愛好”顯示格式事件處理-組合框(選擇“系別”)單選按鈕JRadioButton
JRadioButton的構(gòu)造方法有: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)設(shè)置按鈕是否被選中isSelected()返回單選按鈕的當(dāng)前狀態(tài)復(fù)選框JCheckBox
JCheckBox的構(gòu)造方法有:JCheckBox()
創(chuàng)建一個沒有文本、沒有圖標(biāo)并且最初未被選定的復(fù)選框。JCheckBox(Icon
icon)
創(chuàng)建有一個圖標(biāo)、最初未被選定的復(fù)選框。JCheckBox(Icon
icon,boolean
selected)
創(chuàng)建一個帶圖標(biāo)的復(fù)選框,并指定其最初是否處于選定狀態(tài)JCheckBox(String
text)創(chuàng)建一個帶文本的、最初未被選定的復(fù)選框。JCheckBox(String
text,boolean
selected)
創(chuàng)建一個帶文本的復(fù)選框,并指定其最初是否處于選定狀態(tài)。JCheckBox(String
text,Icon
icon)
創(chuàng)建帶有指定文本和圖標(biāo)的、最初未選定的復(fù)選框。JCheckBox(String
text,Icon
icon,boolean
selected)創(chuàng)建一個帶文本和圖標(biāo)的復(fù)選框,并指定其最初是否處于選定狀態(tài)常用成員方法有:setSeletcted(booleanselected)設(shè)置按鈕是否被選中isSelected()返回單選按鈕的當(dāng)前狀態(tài)組合框JComboBoxJComboBox的構(gòu)造方法JComboBox():構(gòu)造一個JComboBoxJComboBox(finalObjectitems[]):構(gòu)造一個JComboBox,以數(shù)組items為選項.JComboBox(Vectoritems):構(gòu)造一個JComboBox,以向量items為選項JComboBox(ComboBoxModelmodel):構(gòu)造一個JComboBox,以model為模型組合框JComboBox常用方法voidaddItem():添加一個選項voidinsertItemAt(Object
anObject,int
index)在項列表中的給定索引處插入項。voidremoveItem(Object
anObject)從項列表中移除項。voidremoveItemAt(int
anIndex)移除anIndex
處的項。ObjectgetItemAt(inti):返回位置i處的選項int
getItemCount():返回選項總數(shù)int
getSelectIndex():返回選中的選項位置ObjectgetSelectedItem():返回選中的選項voidsetEditable(Boolean
aFlag):設(shè)置可修改課堂實踐實現(xiàn)一個市場調(diào)查程序,功能如圖所示。主界面點擊“提交”后JList可以讓用戶在多個條目中作出選擇,選擇模式可以是單一選擇、連續(xù)選擇、多項選擇選擇模式對應(yīng)于
ListSelectionModel
中的3個常量:SINGLE_SELECTION只能選擇一條。SINGLE_INTERVAL_SELECTION按住[Shift]鍵可選擇聯(lián)系的區(qū)間。MULTIPLE_INTERVAL_SELECTION按住[Ctrl]鍵可選擇多條。
常用組件-JListCompanyLogo構(gòu)造方法:JList(ListModelmodel)構(gòu)造一個指定模式的JList對象JList(Object[]items)利用數(shù)組對象構(gòu)造一個JList對象JList(Vectoritems)利用Vector對象構(gòu)造一個JList對象常用方法:int
getSelectedIndex()返回列表中的第一個被選擇的項目的索引,-1表示沒有項目被選。ObjectgetSelectedValue()返回JList列表中的第一個被選擇的項目的名字。isSelectedIndex(int
index)判斷第index項是否被選。setSelectedIndex(int
index)選擇第index項。setSelectionMode(int
selectionMode)設(shè)置列表的選擇模式常用組件-JListCompanyLogo示例JList列表課堂實踐JList列表JTextArea文本域程序主界面課堂實踐-功能實現(xiàn)“添加”按鈕:將左側(cè)列表中選中的部門加入到右側(cè)的文本區(qū)域,若右側(cè)的文本區(qū)域已經(jīng)存在該部門,則不加入并提示”已存在”的信息.課堂實踐-功能實現(xiàn)“刪除”按鈕:將左側(cè)列表中選中的部門從右側(cè)的文本區(qū)域中刪除,若右側(cè)的文本區(qū)域沒有該部門,則提示”沒有該部門”的信息.每個菜單組件包括一個菜單條(JMenuBar),每個JMenuBar由若干個菜單項(JMenu)組成每個JMenu又由若干個子菜單項(JMenuItem)組成。JFrame提供下列方法設(shè)置菜單欄:
voidsetJMenuBar(JMenuBar
mb)示例:
JFrameframe=newJFrame();
JMenuBar
mb=newJMenuBar();
f.setMenuBar(mb);常用組件-菜單CompanyLogo一個窗體中最多只能有一個JMenuBar構(gòu)造方法:JMenuBar()創(chuàng)建一個菜單欄常用方法:JMenuadd(JMenumenu)添加指定菜單到菜單欄JMenugetMenu(intindex)返回指定的菜單項intgetMenuCount()返回菜單的總數(shù)常用組件-JMenuBarCompanyLogo構(gòu)造方法:JMenu()創(chuàng)建一個沒有標(biāo)題的菜單JMenu(Strings)創(chuàng)建標(biāo)題為s的菜單常用方法:JMenuItemadd(JMenuItemitem)將菜單項item加入菜單末尾voidaddSeperator()向菜單添加一個分隔符voidremove(intindex)刪除索引為index的菜單項voidremove(JMenuItemitem)刪除指定菜單項JMenuItemadd(JMenuItemitem,intindex)向指定位置插一個菜單項常用組件-JMenuCompanyLogo構(gòu)造方法:JMenuItem(Stringtext)創(chuàng)建一個標(biāo)題為text的菜單項JMenuItem(Stringtext,Iconicon)創(chuàng)建帶圖標(biāo)和文本的菜單
常用方法:voidsetText(Stringlab)設(shè)定標(biāo)題為labvoidsetEnabled(booleanb)設(shè)定菜單項是否可用,true可用,false為不可用voidsetAccelerator(KeyStrokekey)指定菜單上的快捷鍵常用組件-JMenuItemCompanyLogo⑴創(chuàng)建一個菜單欄,并將菜單欄置于窗體中⑵在菜單欄中添加菜單⑶在菜單中添加菜單項課堂演示CompanyLogo按要求完成如下圖所示的界面。課堂實踐CompanyLogo事件處理編輯菜單—剪切編輯菜單—復(fù)制事件處理編輯菜單—粘貼事件處理編輯菜單—刪除、全選、時間/日期事件處理格式菜單—字體、字形、字號事件處理格式菜單—文本顏色思考:文件菜單的實現(xiàn)?常用組件的使用步驟創(chuàng)建組件對象設(shè)置相關(guān)屬性添加到容器中小結(jié)第三講
——布局管理器
使用NetBeans開發(fā)Swing應(yīng)用程序引入在上一講的課堂實踐中,設(shè)計界面時該如何布局比較合理?布局管理器的相關(guān)基礎(chǔ)知識FlowLayoutBorderLayoutGridLayoutCardLayoutnull單元學(xué)習(xí)內(nèi)容CompanyLogoJava為了實現(xiàn)跨平臺的特性并且獲得動態(tài)的布局效果,將容器內(nèi)的所有組件的大小、位置、順序、間隔等交給“布局管理器”負(fù)責(zé)管理。不同的布局管理器使用不同算法和策略,程序可以選擇不同的布局管理器來決定布局,主要有FlowLayout,BorderLayout,GridLayout,CardLayout,BoxLayou,GridBagLayout,null等。通過容器組件的setLayout()方法可以設(shè)定容器中組件排放策略,如:setLayout(newBorderLayout());setLayout(null);布局管理器80布局管理器布局管理器主要負(fù)責(zé)以下幾個方面:確定容器的全面尺寸;確定容器內(nèi)各元素的大??;確定容器內(nèi)各元素的位置;確定元素間的間隔距離。布局管理器決定容器中組件的排列方式,布局管理器都實現(xiàn)了接口LayoutManager接口,可以使用LayoutManager的變量來存儲它們中的任何一個。流式布局管理器—FlowLayoutFlowLayout
是JPanel、JApplet的缺省布局管理器。其組件的放置規(guī)律是從上到下、從左到右進(jìn)行放置。當(dāng)容器的大小發(fā)生變化時,用FlowLayout管理的組件會發(fā)生變化,其變化規(guī)律是:組件的大小不變,但是相對位置會發(fā)生變化。如圖中有三個按鈕都處于同一行,但是如果把該窗口變窄,窄到剛好能夠放下一個按鈕,則第二個按鈕將折到第二行,第三個按鈕將折到第三行。按鈕"Open"本來在按鈕"OK"的右邊,但是現(xiàn)在跑到了下面,所以說"組件的大小不變,但是相對位置會發(fā)生變化"。81流布局管理器—FlowLayout構(gòu)造方法:FlowLayout()
居中對齊,水平和垂直間距為5像素的流布局管理器。FlowLayout(int
align)
指定對齊方式,水平和垂直間距為5像素的流布局管理器。FlowLayout(int
align,int
hgap,int
vgap)指定對齊方式及水平和垂直間距的流布局管理器。82常用方法intgetHgap()//返回組件的水平間隔voidsetHgap(inthgap)()//設(shè)定組件的水平間隔intgetVgap()//返回組件的垂直間隔voidsetVgap(inthgap)//設(shè)定組件的垂直間隔intgetAlignment()//返回組件的對齊方式voidsetAlignment(intalign)//設(shè)定組件的對齊方式示例—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ū)域去補(bǔ)充,但是如果Center區(qū)域沒有組件,則保持空白:邊界布局管理器—BorderLayoutCenterNorthSouthWestEast邊界布局管理器—BorderLayout構(gòu)造方法BorderLayout()//建立一個BorderLayout對象,組件間隔默認(rèn),水平垂直為0。BorderLayout(int
hgap,int
vgap)//建立一個BorderLayout對象,參數(shù)設(shè)定水平垂直間隔。常用方法int
getHgap()//返回組件水平間隔voidsetHgap(int
hgap)//設(shè)定組件水平間隔int
getVgap()//返回組件垂直間隔voidsetVgap(int
vgap)//設(shè)定組件垂直間隔
85新建窗體,在窗體中添加三個按鈕,分別使用FlowLayout和BorderLayout進(jìn)行布局管理.對兩種布局特點進(jìn)行總結(jié)課堂實踐CompanyLogo網(wǎng)格布局管理器—GridLayout使容器中各個組件呈網(wǎng)格狀布局,平均占據(jù)容器的空間,將容器空間劃分成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網(wǎng)格布局管理器—GridLayout構(gòu)造方法GridLayout()//建立一個GridLayout對象,在一行中排列組件,組件之間的默認(rèn)間隔為0GridLayout(int
rows,intcols)//建立一個GridLayout對象,將容器分為rows行,cols列,組件之間的水平和垂直間隔為0GridLayout(int
rows,int
cols,int
hgap,int
vgap)//建立一個GridLayout對象,將容器分為rows行,cols列,設(shè)定組件之間的水平和垂直間隔常用方法int
getColumns()//返回設(shè)定列數(shù)voidsetColumns(intcols)//設(shè)定列數(shù)int
getRows()//返回設(shè)定行數(shù)voidsetRows(introws)//設(shè)定行數(shù)int
getHgaps()//返回設(shè)定水平間隔voidsetHgaps(int
hgap)//設(shè)定水平間隔int
getVgap()//返回設(shè)定垂直間隔voidsetVgap(int
vgap)//設(shè)定垂直間隔88卡片布局管理器—CardLayoutCardLayout將容器中的所有組件象撲克牌一樣堆疊在一起,每次只能看到最上面的一張,要看到別的,要用相關(guān)
方法。構(gòu)造方法CardLayout()//建立一個CardLayout對象,組件之間間隔默認(rèn)為0CardLayout(int
hgap,int
vgap)//建立一個CardLayout對象,組件之間設(shè)定間隔89常用方法voidfirst(Containercont)//顯示容器cont的第一個對象voidlast(Containercont)//顯示容器cont的最后一個對象voidnext(Containercont)//顯示容器cont的下一個對象voidprevious(Containercont)//顯示容器cont的前一個對象voidshow(Containercont,Stringname)//顯示容器cont中名為name的對象intgetHgap()//返回組件水平間隔voidsetHgap(inthgap)//設(shè)定組件水平間隔intgetVgap()//返回組件垂直間隔voidsetVgap(inthgap)//設(shè)定組件水平間隔卡片布局管理器—CardLayoutCompanyLogo91null稱為無布局管理器??梢噪S心所欲安排容器,但是跨平臺時,可能發(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設(shè)計一個簡易計算器,并實現(xiàn)基本功能。小結(jié)JFrame的缺省布局管理器為BorderLayout。JPanel
的缺省布局管理器為FlowLayout。當(dāng)把JPanel
作為一個組件添加到某個容器中后,該JPanel
仍然可以有自己的布局管理器。因此,可以利用JPanel
使得BorderLayout
中某個區(qū)域顯示多個組件,達(dá)到設(shè)計復(fù)雜用戶界面的目的。如果采用無布局管理器setLayout(null),則必須使用setLocation(),setSize(),setBounds()等方法手工設(shè)置組件的大小和位置,此方法會導(dǎo)致平臺相關(guān),不鼓勵使用。
94第四講
——事件處理機(jī)制使用NetBeans開發(fā)Swing應(yīng)用程序回顧與引入CompanyLogo常用容器Swing常用組件布局管理器輸入用戶名和密碼后,單擊“確定”,能做出正確判斷和響應(yīng)?事件處理基本原理事件處理步驟事件監(jiān)聽器類定義事件響應(yīng)處理事件適配器單元學(xué)習(xí)內(nèi)容CompanyLogo圖形用戶界面識別和區(qū)分鼠標(biāo)和鍵盤的操作并做出相應(yīng)的反映。Java語言將每一個鍵盤或鼠標(biāo)的操作定義為一個“事件”,在編程中只需定義每個特定事件發(fā)生時程序應(yīng)該做出何種響應(yīng)即可。這是圖形用戶界面中的“事件”和“事件響應(yīng)”事件處理模型CompanyLogo除了鼠標(biāo)和鍵盤的操作,圖形界面等元素都可以引發(fā)事件,系統(tǒng)對這些事件分別定義處理代碼,以保證系統(tǒng)有序地工作。事件處理模型Java的事件處理機(jī)制:一個產(chǎn)生事件的對象必須設(shè)定其事件處理的監(jiān)聽者對象(Listener),當(dāng)事件發(fā)生時,監(jiān)聽者便會依據(jù)事件的類型來執(zhí)行相應(yīng)的程序。要能夠讓圖形界面接收用戶的操作,就必須給各個組件加上事件處理機(jī)制。在事件處理的過程中,主要涉及幾類對象:EventSource—事件源,事件發(fā)生的場所,通常就是可以激發(fā)事件的各個組件,例如按鈕、文本框等。Event—事件,用戶對界面操作在java語言上的描述,以類的形式出現(xiàn),例如鍵盤操作對應(yīng)的事件類是KeyEvent。Eventhandler—事件處理者,接收事件對象并對其進(jìn)行處理的對象。99事件及處理機(jī)制組件(事件源)觸發(fā)一個相應(yīng)類型的事件此事件由相應(yīng)類型的Listener(事件監(jiān)聽者)接收并處理當(dāng)事件發(fā)生時,監(jiān)聽者根據(jù)事件的類型來執(zhí)行相應(yīng)的程序。100Button1事件源接收事件e,并做處理ActionListener事件監(jiān)聽者創(chuàng)建ActionEvente單擊通過調(diào)用源對象的addActionListener()方法將監(jiān)聽器連接到事件源上一個事件監(jiān)聽器對象需和某個事件源的某種事件進(jìn)行關(guān)聯(lián),這稱為向事件源注冊事件監(jiān)聽器對象。使用授權(quán)處理模型進(jìn)行事件處理的一般方法歸納如下:⑴對于某一類型的事件XXXEvent,要想接收并處理這類事件,必須定義相應(yīng)的事件監(jiān)聽器類,該類需要實現(xiàn)與該事件相對應(yīng)的接口XXXListener;⑵事件源實例化以后,必須進(jìn)行授權(quán),注冊該類事件的監(jiān)聽器,使用事件源.addXXXListener(XXXListener)
方法來注冊監(jiān)聽器。
事件及處理機(jī)制CompanyLogo事件及處理機(jī)制CompanyLogo事件類層次結(jié)構(gòu)CompanyLogo所有事件的父類事件處理步驟1.根據(jù)需要定義相應(yīng)類型的監(jiān)聽者類,在類的定義中完成事件的處理;2.創(chuàng)建事件監(jiān)聽者對象;3.為將會觸發(fā)事件的組件C注冊相應(yīng)的事件監(jiān)聽者對象(使用C的addXXXListener()方法)。104實現(xiàn)相應(yīng)的監(jiān)聽接口105AWT事件監(jiān)聽器及接口定義事件監(jiān)聽器的幾種方法自身類作為事件監(jiān)聽器在類頭部加上“implements監(jiān)聽接口”,類體中實現(xiàn)接口中的方法,完成事件處理。監(jiān)聽對象可以使用this表示外部類作為事件監(jiān)聽器定義一個獨立的類實現(xiàn)監(jiān)聽接口,完成事件處理創(chuàng)建類的對象表示監(jiān)聽對象匿名內(nèi)部類作為事件監(jiān)聽器注冊監(jiān)聽對象時,直接創(chuàng)建監(jiān)聽對象并給出類體實現(xiàn)事件處理內(nèi)部類作為事件監(jiān)聽器將監(jiān)聽類定義放到自身類內(nèi)部定義
107定義事件監(jiān)聽器說明可以聲明多個接口,接口之間用逗號隔開……implementsMouseMotionListener,MouseListener,WindowListener;可以由同一個對象監(jiān)聽一個事件源上發(fā)生的多種事件:f.addMouseMotionListener(this);f.addMouseListener(this);f.addWindowListener(this);
則對象f上發(fā)生的多個事件都將被同一個監(jiān)聽器接收和處理。定義事件監(jiān)聽器說明可以通過事件對象獲得詳細(xì)資料,比如本例中就通過事件對象獲得了鼠標(biāo)發(fā)生時的坐標(biāo)值。publicvoidmouseDragged(MouseEvente){
Strings="Mousedragging:X="+e.getX()+"Y="+e.getY();
tf.setText(s);}無論實現(xiàn)了幾個接口,接口中已聲明的方法必須一一實現(xiàn),如果對某事件不感興趣,可以不具體實現(xiàn)其方法,而用空的方法體來代替。108109注冊事件監(jiān)聽器要使組件能夠響應(yīng)相應(yīng)事件,必須將該組件注冊到監(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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 危險品包裝可視化設(shè)計的互動性研究考核試卷
- 五金行業(yè)區(qū)域一體化與數(shù)字經(jīng)濟(jì)發(fā)展融合考核試卷
- 處理設(shè)施生命周期成本分析考核試卷
- 綠色供應(yīng)鏈與企業(yè)內(nèi)部環(huán)境管理體系整合考核試卷
- 租賃設(shè)備租賃保險管理考核試卷
- 住宅風(fēng)水與室內(nèi)空氣質(zhì)量控制考核試卷
- 人臉識別在無人零售場景下的商品質(zhì)檢探討考核試卷
- 2025年中國PU水晶膠數(shù)據(jù)監(jiān)測研究報告
- 2025年中國IC測試座數(shù)據(jù)監(jiān)測研究報告
- 2025年中國DSNG數(shù)字電視激勵器數(shù)據(jù)監(jiān)測研究報告
- 公安網(wǎng)絡(luò)安全培訓(xùn)
- 唐山購房協(xié)議模板
- 旅拍運(yùn)營方案
- 國開 電大《政治學(xué)原理》形考測試一答案
- 高中化學(xué)乙醇教學(xué)反思
- 如皋市直屬機(jī)關(guān)遴選筆試真題
- 2022-2023學(xué)年山東省濟(jì)南市高一下學(xué)期期末數(shù)學(xué)試題(解析版)
- 2022-2023學(xué)年安徽省阜陽市高一下學(xué)期期末教學(xué)質(zhì)量統(tǒng)測數(shù)學(xué)試卷(解析版)
- 華東師大版數(shù)學(xué)七年級上冊教案全冊
- 醫(yī)患之間暴力行為預(yù)防與處理管理制度
- 2022年版初中物理課程標(biāo)準(zhǔn)解讀-課件
評論
0/150
提交評論