




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Java高級應用開發錢能J021104723975921qiansiyuan@163.com教學目標掌握窗體、菜單的設計掌握布局的應用掌握基本組件的應用掌握各種事件的處理掌握文件的讀寫教學內容1.1日歷記事本項目介紹1.2窗體的設計1.3菜單的設計1.4布局的應用1.5常用組件的使用1.6各種事件的處理1.7文件的讀寫1.8項目的打包學習重點首先應熟練掌握GUI設計中各種組件的方法掌握窗體、菜單、布局和事件處理的步驟理解GUI圖形設計的思路與分析方法1.1日歷記事本項目介紹1.1.1軟件需求分析所謂“需求分析”,是指對要解決的問題進行詳細的分析,弄清楚問題的要求,包括需要輸入什么數據,要得到什么結果,最后應輸出什么。可以說,在軟件工程當中的“需求分析”就是確定要計算機“做什么”。軟件需求包括三個不同的層次:業務需求、用戶需求和功能需求(也包括非功能需求)。1.業務需求(businessrequirement)反映了組織機構或客戶對系統、產品高層次的目標要求,它們在項目視圖與范圍文檔中予以說明。2.用戶需求(userrequirement)文檔描述了用戶使用產品必須要完成的任務,這在使用實例(usecase)文檔或方案腳本說明中予以說明。3.功能需求(functionalrequirement)定義了開發人員必須實現的軟件功能,使得用戶能完成他們的任務,從而滿足了業務需求。需求分析需求分析的方法首先調查組織機構情況,包括了解該組織的部門組成情況,各部門的職能等,為分析信息流程作準備。然后調查各部門的業務活動情況,包括了解各個部門輸入和使用什么數據,如何加工處理這些數據,輸出什么信息,輸出到什么部門,輸出結果的格式是什么。協助用戶明確對新系統的各種要求,包括信息要求、處理要求、完全性與完整性要求。確定新系統的邊界,確定哪些功能由計算機完成或將來準備讓計算機完成,哪些活動由人工完成。由計算機完成的功能就是新系統應該實現的功能。常用方法:跟班作業、開調查會、請專人介紹、詢問、設計調查表請用戶填寫、查閱記錄等日歷記事本的需求分析1、日歷展示功能:2、日志備注功能:1.1.2軟件概要設計概要設計的主要任務是把需求分析得到的DFD轉換為軟件結構和數據結構。設計軟件結構的具體任務是:將一個復雜系統按功能進行模塊劃分、建立模塊的層次結構及調用關系、確定模塊間的接口及人機界面等。數據結構設計包括數據特征的描述、確定數據的結構特性、以及數據庫的設計。顯然,總體設計建立的是目標系統的邏輯模型,與計算機無關。概要設計界面如何布局?如何通過類描述日期?1.1.3軟件詳細設計詳細設計的任務是設計每個模塊的實現算法、所需的局部數據結構。詳細設計的目標有兩個:實現模塊功能的算法要邏輯上正確和算法描述要簡明易懂。主要任務:1.為每個模塊確定采用的算法,選擇某種適當的工具表達算法的過程,寫出模塊的詳細過程性描述;2.確定每一模塊使用的數據結構;3.確定模塊接口的細節,包括對系統外部的接口和用戶界面,對系統內部其它模塊的接口,以及模塊輸入數據、輸出數據及局部數據的全部細節。4.要為每一個模塊設計出一組測試用例,以便在編碼階段對模塊代碼(即程序)進行預定的測試,模塊的測試用例是軟件測試計劃的重要組成部分,通常應包括輸入數據,期望輸出等內容。實驗1JAVA基礎復習類的封裝與繼承java.util.Calendar的介紹/DocWeb/api/all/java.util.Calendar定義一個日歷類MyCalendar用于展示某年某月的日歷分布。獲得當前月的天數獲得當前月的第一天是星期幾java.util.Calendar類獲取Calendar實例Calendardate=Calendar.getInstance();設置日期date.set(year,month-1,1);獲取當前月第一天是星期幾intxq=date.get(Calendar.DAY_OF_WEEK)-1;展示某年某月的日歷分布2010.10日一二三四五六12345678910111213141516171819202122232425262728293031任務一:獲得當前月的第一天是星期幾任務二:獲得當前月的天數任務三:將日歷分布保存在數組中任務四:輸出數組中的內容首先,如何描述日歷類MyCalendar年year月month日day日歷dayssetYear()getYear()setMonth()getMonth()setDay()getDay()initDays():創建并初始化setDays():完成任務1-3getDays():返回日歷任務一:獲得當前月的第一天是星期幾創建日歷實例對象Calendardate=Calendar.getInstance();設置日歷的年和月(注意月份減一)date.set(year,month-1,1);獲取當前月第一天是星期幾intxq=date.get(Calendar.DAY_OF_WEEK)-1;思考為什么設置月份要減1?為什么計算星期時也要減1?任務二:獲得當前月的天數如果是1、3、5、7、8、10、12月,則天數為31天;如果是4、6、9、11月,則天數為30天;如果是2月,且閏年,天數為29天,不閏年,天數為28天。任務三:將日歷分布保存在數組中for(inti=xq,n=1;i<xq+day;i++){ days[i]=String.valueOf(n); n++;//用n來表示日歷顯示的內容
}任務四:輸出數組中的內容輸出2010年10月的日歷分布日一二三四五六123456789101112131415161718192021222324252627282930311.2窗體的設計窗體框架頂層容器組件由javax.swing包中的JFrame類或者java.awt包中的Frame類提供。因此在定義窗體類時,必須首先引用javax.swing包中的JFrame類或者java.awt包中的Frame類。1.2.1AWT與SWING圖形用戶界面(GUI,GraphicalUserInterface)是為應用程序提供一個圖形化的界面,程序通過GUI與用戶交互,GUI能使一個應用程序具有與眾不同的“外觀”與“感覺”。JAVA中提供GUI組件的包有AWT和SWINGAWT:依賴平臺,不同平臺上外觀和風格不同,不易做出美觀的界面(java.awt.*)SWING:不依賴平臺,不同平臺上具有相同的外觀和風格(javax.swing.*)AWT與SWING基本具有相同的組件,如:Button和JButton,Frame和JFrame……1.2.2組件與容器的概念及關系Java把由Component類的子類或間接子類創建的對象稱為一個組件,可分為容器組件和基本組件。把由Container的子類或間接子類創建的對象稱為一個容器兩者之間的關系:容器類是組件類的抽象子類,即容器本身也是組件;容器中可以裝入其他容器或者基本組件。1.2.3組件的分類頂層容器組件包括JFrame、JApplet、JDialog和JWindow可以獨立存在,每個界面應屬于一個頂層容器中間容器組件JPanel、JScrollPane、JSplitPane、JTabbedPane和JToolBar等。中間容器必須依附于頂層容器或其他中間容器特殊容器組件(一些特殊的中間容器)包括JInternalFrame、JLayeredPane、JRootPane等?;窘M件基本組件是用于實現人機交互的組件,包括JButton等。必須依附于容器。1.2.4JFrame窗體框架設計JFame窗體通過調用方法:getContentPane(),得到它的內容面板。如需要將按鈕b1加載到窗體myFrame上,可以通過以下語句來實現:myFrame.getContentPane().add(b1);Containercon=myFrame.getContentPane();con.add(b1);JMenuBar
ContentPaneJFame窗體框架的基本結構JFrame常用方法JFrame()創建一個無標題的窗口。JFrame(Strings)創建一個標題為s的窗口。publicvoidsetBounds(inta,intb,intwidth,intheight)設置窗口的位置和大小。publicvoidsetSize(intwidth,intheight)設置窗口大小。publicvoid
setResizable(booleanb)publicvoidsetVisible(booleanb)設置窗口是否可見,默認為不可見。JFrame常用方法publicvoidsetResizable(booleanb)設置窗口是否可調整大小,默認為可調整。publicvoidsetDefaultCloseOperation(intoperation)該方法用來設置單擊窗體右上角的關閉圖標后,程序會做出怎樣的處理。其中的參數operation取下列有效值:
0DO_NOTHING_ON_CLOSE什么也不做。
1HIDE_ON_CLOSE隱藏當前窗口。
2DISPOSE_ON_CLOSE隱藏當前窗口,并釋放窗體占有的其它資源。
3EXIT_ON_CLOSE結束窗體所在的應用程序。JFrame常用方法publicvoidsetTitle(Stringstr)設置窗口標題為strpublicvoidsetIconImage(Imageimage)設置窗口的圖標。publicvoidpack()用緊湊方式自動設置窗口大小。直接利用JFrame創建窗體框架用JFrame類聲明并創建一個窗口JFramef=newJFrame(“標題”);設置窗口的大小f.setSize(200,300);設置窗口可見或顯示窗口f.setVisible(true);或者f.show();設置窗口關閉時的方法f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);利用JFrame子類創建窗體框架定義子類繼承JFrame,并在子類構造方法中完成窗體的定義classMyFrameextendsJFrame{MyFrame(Strings){super(s);//設置標題
setBounds(200,300);//設置大小
setVisible(true);//設置顯示
setDefaultCloseOperation(3);//設置關閉
}}定義一個主類,并在主類中創建該窗體一個較完整的窗體創建框架1.importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;2.publicclass××extends頂層容器implements××Listener{3.組件定義及初始化4.××(){//構造方法
4.1super(“××”);//定義窗口名稱
4.2Containerc=getContentPane();//獲得內容窗格
c.add(組件);4.3組件.addActionListener(this);//按鈕注冊事件監聽器
4.4調整顯示效果,如
setSize(350,200);//設置窗口大小
setLocation(200,200);//設置窗口位置
setVisible(true);//顯示窗口
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setDefaultLookAndFeelDecorated(true);}}5.實現接口:對接口中要處理的方法編程實驗2日歷記事本窗體設計用子類繼承JFrame的方法創建日歷記事本的主窗體CalendarFrame,要求滿足條件:(1)標題為“我的日歷記事本”也可以自己定義;(2)窗體大小為(600,300),并且大小不可以改變;(3)窗體出現在(100,100)的位置;(4)關閉主窗體時退出應用程序。1.3菜單的設計菜單是GUI中非常重要且常用的部分,它主要包括三個部分:菜單條、菜單和菜單項。菜單設計的基本原則是:菜單條JMenuBar須放在窗體中菜單JMenu須放在菜單條中菜單項JMenuItem須放在菜單中1.3.1JMenuBar菜單條首先應注意每個窗體只能放置一個菜單條。常用方法:JMenuBar()構造方法publicvoidsetJMenuBar(JMenuBarmenubar)將菜單條放到窗體中。publicvoidadd(MenuImenu)
向菜單條中增加由參數menu指定的菜單對象。創建菜單條的步驟:創建菜單條對象JMenuBarmb=newJMenuBar();將菜單條放到窗體f中f.setJMenuBar(mb);1.3.2JMenu菜單JMenu(Strings)
創建標題為s的菜單。publicvoidadd(MenuItemitem)向菜單增加由參數item指定的菜單選項對象。publicvoidadd(Strings)向菜單增加指定的選項。publicJMenuItemgetItem(intn)得到指定索引處的菜單選項。publicintgetItemCount()菜單選項數目。publicvoid
addSeparator()增加分割條。創建菜單的步驟:聲明并創建菜單
JMenum1=newJMenu(“文件”);將菜單放入菜單條中
mb.add(m1);1.3.3JMenuItem菜單項JMenuItem(Strings)
構造有標題的菜單JMenuItem(Stringtext,Iconicon)
構造有標題和圖標的菜單項publicvoidsetEnabled(booleanb)設置當前菜單項是否可被選擇。publicStringgetLabel()得到菜單選項的名字。1.3.3JMenuItem菜單項publicvoidsetAccelerator(KeyStrokekeyStroke)為菜單項設置快捷鍵。為了向該方法的參數傳遞一個KeyStroke對象,可以使用KeyStroke類的類方法:publicstaticKeyStrokegetKeyStroke(charkeyChar)返回一個KeyStroke對象。也可以使用KeyStroke類的類方法:
publicstaticKeyStrokegetKeyStroke(intkeyCode,intmodifiers)
返回一個KeyStroke對象,其中參數keyCode取值范圍:KeyEvent.VK_A~KeyEvent.VK_Z。modifiers取值:
InputEvent.ALT_MASK、InputEvent.CTRL_MASK和InputEvent.SHIFT_MASK。1.3.3JMenuItem菜單項嵌入子菜單JMenu是JMenuItem的子類,因此菜單項本身還可以是一個菜單,稱這樣的菜單項為子菜單。為了使得菜單項有一個圖標,可以用圖標類Icon聲明一個圖標,然后使用其子類ImageIcon類創建一個圖標,如:Iconicon=newImageIcon(“dog.gif”);JMenuItemm1=newJMenuItem(“加密狗",icon);JMenuItemm1=newJMenuItem(“加密狗",newImageIcon("open.gif"));創建菜單的過程聲明并創建菜單條聲明并創建菜單聲明并創建菜單項,設置菜單項快捷鍵將菜單項添加到菜單中將菜單添加到菜單條中將菜單條添加到窗口中JMenuBarm=newJMenuBar();
JMenum1=newJMenu();
JMenuItemm11=newJMenuItem();m1.add(m11);
m.add(m1);this.setJMenuBar(m);實驗3日歷記事本菜單設計完成日歷記事本中的菜單設計,其菜單結果如下:文件編輯幫助
|_打開|_復制|_幫助主題
|_保存|_剪切|_關于…|_退出|_粘貼實驗4多樣式菜單及快捷鍵設計菜單圖片加載為打開和保存菜單添加圖標open.gif和save.gifm1=newJMenuItem("打開",newImageIcon("open.gif"));菜單快捷鍵設置m11.setAccelerator(KeyStroke.getKeyStroke(‘O’));m12.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));在保存和退出菜單之間加一個分隔條m1.addSeparator();將保存菜單設置為不可用1.4布局的應用教學內容FlowLayout流型布局GridLayout網格布局BoxLayout盒式布局BorderLayout邊界布局CardLayout卡片布局學習目標掌握五種布局的方法和步驟理解布局設計的重要性及應用布局概述當把組件添加到容器中時,希望控制組件在容器中的位置,這就需要學習布局設計的知識。我們將分別介紹java.awt包中的FlowLayout、BorderLayout、CardLayout、GridLayout布局類和java.swing.border包中的BoxLayout布局類。對于JFrame窗口,程序只能將組件添加到它的內容面板中,內容面板的默認布局是BorderLayout布局。容器可以使用方法:setLayout(布局對象);來設置自己的布局。1.4.1流型布局FlowLayout流型布局的規則:組件按照加入的先后順序從左向右排列,一行排滿之后就轉到下一行繼續從左至右排列,每一行中的組件都居中排列,組件之間默認的水平和垂直間隙是5個像素。如何應用流型布局?首先創建流型布局對象設置布局樣式(可省略)然后將該布局對象應用到容器上1、創建流型布局對象構造方法FlowLayout()FlowLayout(intalign);FlowLayout(intalign,inthgap,intvgap);FlowLayoutf1=newFlowLayout();FlowLayoutf2=newFlowLayout(0);FlowLayoutf3=newFlowLayout(0,5,5);FlowLayout.LEFT0FlowLayout.CENTER1FlowLayout.RIGHT2設置布局的水平間隙和垂直間隙2、設置布局樣式FlowLayout布局對象調用
setAlignment(intaligin)方法可以重新設置布局的對齊方式。其中aligin可以取值:FlowLayout.LEFT、FlowLayout.CENTER、FlowLayout.RIGHTFlowLayout布局對象調用setHgap(inthgap)、setVgap(intvgap)
可以重新設置布局的水平間隙和垂直間隙。3、應用布局對象新建一個流布局對象FlowLayoutflow=newFlowLayout();設置其屬性flow.setAlignment(FlowLayout.LEFT);flow.setHgap(2);flow.setVgap(8);容器應用布局con.setLayout(flow);第1、2兩點可以綜合為:FlowLayoutflow=newFlowLayout(FlowLayout.LEFT,2,8);1.4.2邊界布局BorderLayout
BorderLayout布局是Window型容器的默認布局,例如JFrame、JDialog都是Window類的間接子類,它們的內容面板的默認布局都是BorderLayout布局。BorderLayout也是一種簡單的布局策略,如果一個容器使用這種布局,那么容器空間簡單地劃分為東、西、南、北、中五個區域,中間的區域最大。每加入一個組件都應該指明把這個組件添加在哪個區域中,區域由BorderLayout中的靜態常量CENTER、NORTH、SOUTH、WEST、EAST表示,例如,一個使用BorderLayout布局的容器con,可以使用add方法將一個組件b添加到中心區域:con.add(b,BorderLayout.CENTER);注意:添加到某個區域的組件將占據整個這個區域。每個區域只能放置一個組件,如果向某個已放置了組件的區域再放置一個組件,那么先前的組件將被后者替換掉。1.4.3盒式布局用BoxLayout類可以創建一個布局對象,稱為盒式布局。BoxLayout在java.swing.border包中。javaswing包提供了Box類,該類也是Container類的一個子類,創建的容器稱作一個盒式容器,盒式容器的的默認布局是盒式布局,而且不允許更改盒式容器的布局。因此,在策劃程序的布局時,可以利用容器的嵌套,將某個容器嵌入幾個盒式容器,達到你的布局目的。使用盒式布局的容器將組件排列在一行或一列,這取決于創建盒式布局對象時,是否指定了是行排列還是列排列。盒式布局的兩種樣式行型盒式布局容器中添加的組件的上沿在同一水平線上。Boxb1=Box.createHorizontalBox()列型盒式布局容器中添加的組件的左沿在同一垂直線上。Boxb2=Box.createVerticalBox()如果想控制盒式布局容器中組件之間的距離,就需要createHorizontalStrut(intwidth)可以得到一個不可見的水平Struct類型對象,稱做水平支撐。該水平支撐的高度為0,寬度是width。Box類調用靜態方法createVertialStrut(intheight)可以得到一個不可見的垂直Struct類型對象,稱做垂直支撐。參數height決定垂直支撐的高度,垂直支撐的寬度為0。盒式布局的步驟聲明并創建盒式布局BoxboxV1=Box.createVerticalBox();或者BoxbaseBox=Box.createHorizontalBox();向布局中添加組件boxV1.add(newJLabel("輸入您的姓名"));設置垂直支撐或水平支撐boxV1.add(Box.createVerticalStrut(8));或者baseBox.add(Box.createHorizontalStrut(10));設置容器布局con.setLayout(newFlowLayout());向容器中加載盒式布局con.add(baseBox);實驗5日歷記事本窗體布局設計列盒布局容器列盒布局容器改變年月容器日歷展示容器農歷及提示信息容器標簽容器日志記事容器保存刪除按鈕容器星期容器為窗體設置流型布局向窗體中添加列盒布局容器p1創建一個面板p1創建列盒布局bv1創建改變年月面板容器p11將p11放入列盒bv1中創建星期面板容器p12將p12放入列盒bv1中創建建日歷面板容器p13將p13放入列盒bv1中創建建農歷面板容器p14將p14放入列盒bv1中將bv1加入面板容器p1將面板p1放入窗體中向窗體中添加列盒布局容器p2創建一個面板p2創建列盒布局bv2創建標簽dateLabel將dateLabel放入列盒bv2中創建日志文本區域容器note將note放入列盒bv2中創建按鈕面板容器p21將p21放入列盒bv2中將bv2加入面板容器p2將面板p2放入窗體中1.4.4卡式布局CardLayout
JTabbedPane創建的對象是一個輕容器,稱作選項卡窗格。選項卡窗格的默認布局是CardLayout卡片式布局。該容器自帶一些選項卡,這些選項卡和容器中添加的組件相對應,也就是說,單擊相應的選項卡時,選項卡窗格將顯示對應的組件。選項卡窗格自帶的選項卡默認地在該選項卡窗格的頂部,從左向右依次排列,選項卡的順序和容器添加的組件的順序相同。選項卡窗格可以使用:add(Stringtext,Componentc);方法將組件c添加到容器當中,并指定和該組件c對應的選項卡的文本提示是text。也可以使用構造方法publicJTabbedPane(inttabPlancement)其中參數指定選項卡的位置,有JTabbedPane.TOP,JTabbedPane.BOTTOM,JTabbedPane.LEFT和JTabbedPane.RIGHT創建選項卡對象JTabbedPanep=newJTabbedPane(JTabbedPane.LEFT);為選項卡創建并添加頁面()p.add(“第1頁”,newJButton());加載選項卡到容器中con.add(p,BorderLayout.CENTER);1.4.5網格布局GridLayout網格布局規則:將容器劃分為大小相同的網格,最多可添加m×n個組件,每個網格都是相同大小并且強制組件與網格的大小相同(即每個網格只能放一個組件);每個網格中可以添加容器,而這個容器又可以設置為GridLayout布局、FlowLayout布局、CarderLayout布局或BorderLayout布局等。利用這種嵌套方法,可以設計出符合一定需要的布局。如何實施網格布局?與流型布局步驟一致1、創建網格布局對象構造方法GridLayout(intm,intn)GridLayout(intm,intn,inthgap,intvgap)比如:GridLayoutg1=newnewGridLayout(10,8);GridLayoutg2=newnewGridLayout(10,8,5,10);2、將布局應用到容器上聲明創建網格對象GridLayoutg1=newGridLayout(3,2);將網格布局應用到容器上con.setLayout(g1);3、向網格布局容器中加組件1.4.6null空布局我們可以把一個容器的布局設置為null布局(空布局)??詹季秩萜骺梢詼蚀_地定位組件在容器的位置和大小。setBounds(inta,intb,intwidth,intheight)方法是所有組件都擁有的一個方法,組件調用該方法可以設置本身的大小和在容器中的位置。例如,p是某個容器:
p.setLayout(null);
把p的布局設置為空布局。向空布局的容器p添加一個組件c需要兩個步驟,首先使用add(c)方法向容器添加組件,然后組件c再調用setBounds(inta,intb,intwidth,intheight)方法設置該組件在容器中的位置和本身的大小,組件都是一個矩形結構,方法中的參數a,b是被添加的組件c的左上角在容器中的位置坐標,即該組件距容器左面a個像素,距容器上方b個像素;weidth,height是組件c的寬和高。實驗6日歷布局設計日一二三四五六12345678910111213141516171819202122232425262728293031任務1:日歷面板布局創建星期面板p12在面板p12上應用1×7的網格布局創建7個標簽,并將其放入到p12中將星期面板p12放入列盒bv1中創建日歷面板p13在p13上應用6×7的網格布局創建42個按鈕,并將其放入面板p13中將日歷面板p13放入列盒bv1中任務2:改變年月面板設計任務3:農歷顯示面板設計任務4:日志按鈕面板設計1.5常用組件的使用標簽JLabel文本框JTextField密碼框JPasswordField文本區域JTextArea按鈕JButton復選框JCheckBox單選按鈕JRadioButton中間容器面板JPanel拆分窗格JSplitPane滾動窗格JScrollPane標簽JLabelpublicJLabel()創建沒有名字的標簽。publicJLabel(Strings)創建名字是s的標簽,s在標簽中靠左對齊。publicJLabel(Strings,intaligment)參數aligment決定標簽中的文字在標簽中的水平對齊方式。publicJLabel(Iconicon)創建具有圖標icon的標簽,icon在標簽中靠左對齊。publicJLabel(Strings,Iconicon,intaligment)創建名字是s,具有圖標icon的標簽,參數aligment決定標簽中的文字和圖標做為一個整體在標簽中的水平對齊方式。StringgetText()獲取標簽的名字。voidsetText(Strings)設置標簽的名字是s。IcongetIcon()獲取標簽的圖標。voidsetIcon(Iconicon)設置標簽的圖標是iconvoidsetHorizontalTextPosition(inta)參數a確定名字相對于圖標的位置,a的取值是:JLabel.LEFT,JLabel.RIGHT。voidsetVerticalTextPosition(inta)參數a確定名字相對于JLabel上的圖標的位置,參數a取值是:JLabel.BOTTOM,JLabel.TOP。文本框JTextFieldJComponent的子類JTextField是專門用來建立文本框的,即JTextField創建的一個對象就是一個文本框。用戶可以在文本框輸入單行的文本。JTextField(intx)如果使用這個構造方法創建文本框對象,可以在文本框中輸入若干個字符,文本框的可見字符個數由參數x指定。JTextField(Strings)如果使用這個構造方法創建文本框對象,則文本框的初始字符串為s,可以在文本框中輸入若干個字符。publicvoidsetText(Strings)文本框對象調用該方法可以設置文本框中的文本為參數s指定的文本。publicStringgetText()文本框對象調用該方法可以獲取文本框中的文本。publicvoidsetEditable(booleanb)文本框對象調用該方法可以指定文本框的可編輯性。創建的文本框默認為可編輯的。publicvoidsetHorizontalAlignment(intalignment)設文本在文本框中的對齊方式,其中alignment的有效值確定對齊方式。密碼框JPasswordField使用JComponent的子類JPasswordField可以建立一個密碼框對象。密碼框可以使用setEchoChar(charc)設置回顯字符(默認的回顯字符是‘*’);使用char[]getPassword()方法返回密碼框中的密碼。文本區域JTextAreaJTextArea類專門用來建立文本區,用戶可以在文本區輸入多行的文本。JTextArea(introws,intcolumns)構造一個可見行和可見列分別是rows、columns的文本區。setLineWrap(booleanb)方法決定輸入的文本能否在文本區的右邊界自動換行setWrapStyleWord(booleanb)決定是以單詞為界(b取true時)或以字符為界(b取false時)進行換行。getText()和setText(Strings)append(Strings)在文本區末尾追加字符串sinsert(Strings,intx)方法在文本區的指定位置處插入文本replaceRange(StringnewString,intstart,intend)將文本區start至end處的文本替換為新文本newStringgetCaretPosition()獲取文本區中輸入光標的位置setCaretPosition(intposition)設置文本區中輸入光標的置(其中position不能大于文本區中字符的個數)另外,文本區還可以使用copy()和cut()方法將文本區中選中的內容拷貝或剪切到系統的剪貼板,使用paste()方法將系統剪貼板上的文本數據粘貼在文本區中,如果文本區中有選中的內容,paste()方法從剪貼板上取回的數據將替換選中的內容。按鈕JButtonJButton(Stringtext)創建名字是text的按鈕。publicJButton(Iconicon)創建帶有圖標icon的按鈕。publicJButton(Stringtext,Iconicon)創建名字是text且帶有圖標icon的按鈕publicvoidsetText(Stringtext)和publicStringgetText()
publicvoidsetHorizontalTextPosition(inttextPosition)設置按鈕名字相對按鈕上圖標的水平位置,參數textPosition的有效值是:AbstractButton.LEFT、AbstractButton.CENTERT、AbstractButton.RIGHT。publicvoidsetVerticalTextPosition(inttextPosition)設置按鈕上名字相對按鈕上圖標的垂直位置。publicvoidsetMnemonic(charmnemonic)按鈕對象調用該方法可以設置按鈕的鍵盤激活方式,mnemonic的有效值是:’a’~’z’。復選框JCheckBox復選框提供兩種狀態,一種是選中,另一種是未選中,用戶通過單擊該組件切換狀態。publicJCheckBox()創建一個沒有名字的復選框。publicJCheckBox(Stringtext)創建一個名字是text的復選框。publicJCheckBox(Iconicon)創建一個帶有默認圖標icon,但沒有名字的復選框。publicJCheckBox(Stringtext,Iconicon)創建一個帶有默認圖標和名字text的復選框。publicvoidsetIcon(IcondefaultIcon)設置復選框上的默認圖標。publicvoidsetSelectedIcon(IconselectedIcon)設置復選框選中狀態下的圖標publicbooleanisSelected()如果復選框處于選中狀態該方法返回true,否則返回false。如果不對復選框進行初始化設置,默認的初始化設置均為為選中。復選框上的ItemEvent事件當復選框獲得監視器之后,復選框從未選中狀態變成選中狀態或從選中狀態變成未選中狀態時就發生ItemEvent事件,ItemEvent類將自動創建一個事件對象。發生ItemEvent事件的事件源獲得監視器的方法是addItemListener(ItemListenerlistener)。由于復選框可以發生ItemEvent事件,JCheckBox類提供了addItemListener方法。處理ItemEvent事件的接口是ItemListener,創建監視器的類必須實現ItemListener接口,該接口中只有一個的方法。當在復選框發生ItemEvent事件時,監視器將自動調用接口方法:publicvoiditemStateChanged(ItemEvente)對發生的事件作出處理。ItemEvent類中的方法getItemSelectable()返回Itemevent事件的事件源。單選按鈕JRadioButton單選按鈕和復選框很類似,所不同的是:在若干個復選框中我們可以同時選中多個,而一組單選按鈕同一時刻只能有一個被選中。當創建了若干個單選按鈕后,應使用ButtonGroup再創建一個對象,然后利用這個對象把這若干個單選按鈕歸組。歸到同一組的單選按鈕每一時刻只能選一。中間容器面板JPanel我們會經常使用JPanel創建一個面板,再向這個面板添加組件,然后把這個面板添加到底層容器或其他中間容器中。JPanel面板的默認布局是FlowLayout布局。JPanel()構造一個面板容器對象JPanelp1;p1=newJPanel();JPanelp2=newJPanel();拆分窗格JSplitPane拆分窗格就是被分成兩部分的容器。拆分窗格有兩種類型:水平拆分和垂直拆分。水平拆分窗口用一條拆分線把容器分成左右兩部分,左面放一個組件,右面放一個組件,拆分線可以水平移動。垂直拆分窗格由一條拆分線分成上下兩部分,上面放一個組件,下面放一個組件,拆分線可以垂直移動。JSplitPane(inta,Componentb,Componentc)構造一個拆分窗格,參數a取JSplitPane的靜態常量HORIZONTAL_SPLIT或VERTICAL_SPLIT,以決定是水平還是垂直拆分。后兩個參數決定要放置的組件。setDividerLocation(doubleposition)設置拆分線的位置。滾動窗格JScrollPane如果我們需要通過滾動條來觀察一個組件,可以把一個組件放到一個滾動窗格中。JScorollPane(componentc)構造一個滾動窗格。例如:JTextArea不自帶滾動條,因此我們就需要把文本區放到一個滾動窗格中。JTextAreatext1=newJTextArea(12,14);con.add(newJScorollPane(text1));分別設置水平和垂直滾動條自動出現scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);分別設置水平和垂直滾動條總是出現scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
分別設置水平和垂直滾動條總是隱藏scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
實驗7日歷展示設計與實現任務1:聲明并創建日歷類對象mydate任務2:設置日歷的年月日,并獲取日歷分布數組任務3:將日歷數組保存的分布對應到按鈕上。javax.swing.Border的使用見word文檔實驗8界面顯示的優化任務1:將日歷中周日列和周六列的字體顏色分別設置為紅色和藍色label.setForeGround(Color.red);任務2:將星期的字體設置為12號的隸書,并且加粗;并且將日歷的字體設置為12號黑體。label.setFont(newFont(“隸書”,Font.BOLD,12))任務3:在上年、下年、上月和下月按鈕設置快捷鍵;在保存和刪除按鈕上增加圖標。
priYear.setMnemonic(‘P’);JButtonsava=newJButton(“保存”,newImageIcon(“save.gif”));任務4:將星期標簽凸出顯示Borderborder1=BorderFactory.createBevelBorder(BevelBorder.RAISED);xqLabel[i].setBorder(border1);任務5:將日歷按鈕凹下顯示Borderborder2=BorderFactory.createBevelBorder(BevelBorder.LOWERED);rlButton[i].setBorder(border2);事件的處理主要內容ActionEvent行為事件FocusEvent焦點事件WindowEvent窗體事件MouseEvent鼠標事件KeyEvent鍵盤事件教學目標掌握事件處理機制掌握各種事件處理的方法及應用0、事件處理機制通知發生XXX事件事件源.addXXXListener(存放監視器引用的接口)接口方法(XXXe)
實現XXXListener接口的監視器接口回調圖1事件處理事件源能夠產生事件的對象都可以成為事件源,如文本框、按鈕、下拉式列表等。也就是說,事件源必須是一個對象,而且這個對象必須是Java認為能夠發生事件的對象。監視器我們需要一個對象對事件源進行監視,以便對發生的事件作出處理。事件源通過調用相應的方法將某個對象作為自己的監視器。監視器就好比一個崗哨,只要事件源上發生了任何事情,都能夠馬上被崗哨發現。例如,對于一個事件源可以通過以下方法加載監視器:
add****Listener(ActioListenerlistener)
對于獲取了監視器的事件源對象,在獲得事件響應后,Java運行系統就自動用****Event類創建了一個對象,即發生了****Event事件。處理事件監視器負責調用特定的方法處理事件,也就是說創建監視器的類必須提供處理事件的特定方法,即實現接口方法。Java采用接口回調技術來處理事件,當事件源發生事件時,接口立刻通知監視器自動調用實現的某個接口方法,由接口方法規定了怎樣處理事件的操作。接口回調這一過程對程序是不可見的,Java在設計組件事件時已經設置好了回調過程,程序只需讓事件源獲得正確的監視器即可自動完成事件處理。注意:為了能監視到這種類型的事件,事件源必須使用add****Listener方法獲得監視器。1、ActionEvent為類引用ActionListener接口classCalendarFrameextendsJFrameimplementsActionListener{為事件源加載監視器
nextYear.addActionListener(this);重寫事件處理方法publicvoidactionPerformed(ActionEvente){
if(e.getSource()==nextYear){//需要完成的處理事件}}JAVA的ActionEvent類的事件對象提供了如下方法去獲得觸發事件的事件源:
publicObjectgetSource()可以返回發生ActionEvent事件的對象的引用。實驗9日歷調整顯示設計任務1:完成點擊上年、下年將dateText文本框中數字加1或減1的功能;任務2:完成上月、下月將monthLabel標簽中數字加1或者減1的功能;思考:如何限制年月不超過實際限制?任務3:當改變年月時,將日歷分布也隨之改變。任務4:完成dateText文本框的回車事件,完成日歷改變2、FocusEvent為類引用FocusListener接口classCalendarFrameextendsJFrameimplementsActionListener,FocusListener{為事件源加載監視器
nextYear.addFocusListener(this);重寫事件處理方法publicvoidfocusGained(FocusEvente){}publicvoidfocusLost(FocusEvente){}
JAVA的FocusEvent類的事件對象提供了如下方法去獲得觸發事件的事件源:
publicObjectgetSource()可以返回發生FocusEvent事件的對象的引用。實驗10日歷按鈕點擊事件處理任務1:當日歷按鈕獲得焦點時,將該按鈕背景設置為灰色Color.gray;任務2:當點擊日歷按鈕時,將當前年月日顯示在標簽dateLabel中,如:2010年10月1日;任務3:當點擊日歷按鈕時,在“農歷及提示信息面板”中顯示對應日期的農歷信息。WindowEvent1、引用WindowListener接口JFrame類是Window類的子類,Window型對象都能觸發WindowEvent事件。當一個JFrame窗口被激活、撤消激活、打開、關閉、圖標化或撤消圖標化時,就引發了窗口事件,即WindowEvent創建一個窗口事件對象。WindowEvent2、加載監視器addWindowlistener(Windowlistenerlistener)3、實現WindowListener接口中的所有抽象方法publicvoidwindowActivated(WindowEvente)當窗口從非激活狀態到激活時調用該方法。publicvoidwindowDeactivated(WindowEvente)當窗口激活狀態到非激活狀態時調用該方法。publicvoidwindowClosing(WindowEvente)當窗口正在被關閉時調用該方法。publicvoidwindowClosed(WindowEvente)當窗口關閉時調用該方法。publicvoidwindowIconified(WindowEvente)當窗口圖標化時調用該方法。publicvoidwindowDeiconified(WindowEvente)
當窗口撤消圖標化時,窗口監視器調用。publicvoidwindowOpened(WindowEvente)
當窗口打開時,窗口的監視器調用該方法。WindowEvent創建的事件對象通過getWindow()方法可以獲取發生窗口事件的窗口。WindowEvent事件處理方法2WindowAdapter適配器:接口中如果有多個方法會給使用者帶來諸多不便,因為實現這個接口的類必須要實現接口中的全部方法,否則這個類必須是一個abstract類。為了給編程人員提供方便,Java提供的接口,如果其中的方法多于一個,Java同時就提供一個相關的稱作適配器的類,這個適配器是已經實現了相應接口的類。舉例:關閉窗體時退出應用程序MouseEvent1、引用接口Java分別使用兩個接口來處理鼠標事件MouseListener接口與MouseMotionListener接口2、加載監視器addMouseListener(MouseListenerlistener)addMouseMotionListener(MouseListenerlistener)3、實現接口中的所有抽象方法mouseEntered(MouseEvente)
負責處理鼠標進入組件觸發的鼠標事件。mouseExited(MouseEvente)
負責處理鼠標退出組件觸發的鼠標事件。mousePressed(MouseEvent)
負責處理鼠標按下觸發的鼠標事件。mouseReleased(MouseEvente)負責處理鼠標釋放觸發的鼠標事件。mouseClicked(MouseEvente)負責處理鼠標單擊或連擊觸發的鼠標事件。MouseMotionListener的抽象方法mouseDragged(MouseEvente)在組件上拖動鼠標指針mouseMoved(MouseEvente)在組件上運動鼠標指針處理鼠標事件中常用的方法getX()
鼠標事件調用該方法返回觸發當前鼠標事件時,鼠標指針在事件源坐標系中的x-坐標。getY()
鼠標事件調用該方法返回觸發當前鼠標事件時,鼠標指針在事件源坐標系中的y-坐標。getClickCount()
鼠標事件調用該方法返回鼠標被連續單擊的次數。getModifiers()鼠標事件調用該方法返回一個整數值,如果是通過鼠標左鍵觸發的鼠標事件,該方法返回的值等于InputEvent類中的類常量BUTTON1_MASK;如果是右鍵返回的是InputEvent類中的類常量BUTTON3_MASK來表示。getSource()
鼠標事件調用該方法返回觸發當前鼠標事件的事件源。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國地理原創試題及答案
- 西藏自治區日喀則市南木林高級中學2025屆高二生物第二學期期末學業水平測試試題含解析
- 學海大聯考 2025屆高二化學第二學期期末調研模擬試題含解析
- 云南省昆明市師范大學附屬中學2024-2025學年高二生物第二學期期末聯考試題含解析
- 浙江省杭州市西湖區杭州學軍中學2025年高二下物理期末經典模擬試題含解析
- 鹽城市阜寧縣高二上學期期中考試歷史試題
- 節能減排項目廠房所有權轉讓合同
- 企業內部保密合同協議書
- 綠色生態彩鋼板房建造與維護服務合同
- 農家樂廚師聘用及農家特色菜品研發合同
- 開荒保潔施工方案三篇
- 近5年高考背誦默寫真題
- 電梯工程竣工驗收報告
- 江蘇省無錫市惠山區2024年統編版小升初考試語文試卷(含答案解析)
- JT-T-1134-2017道路客貨運運輸駕駛員行車操作規范
- 課前游戲-數字炸彈-模板可修改
- 2023年湖南省高考化學真題卷和答案
- 《中式烹調工藝》課件-熱菜烹調工藝
- 《高壓電力用戶安全用電》
- 糧食收集裝袋機結構設計說明書
- 工會專業知識考試題庫
評論
0/150
提交評論