版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
實驗三圖形用戶界面設(shè)計實驗?zāi)康恼莆認(rèn)ava語言中GUI編程的基本方法掌握J(rèn)ava語言中AWT組件的基本用法掌握J(rèn)ava語言中Swing組件的基本用法實驗導(dǎo)讀通過圖形用戶界面(GUI:GraphicsUserInterface),用戶和程序之間可以方便地進(jìn)行交互。AWT(AbstractWindowingToolkit),中文譯為抽象窗口工具包,是Java提供的用來建立和設(shè)置Java的圖形用戶界面的基本工具。AWT由Java中的java.awt包提供,里面包含了許多可用來建立與平臺無關(guān)的圖形用戶界面(GUI)的類,這些類又被稱為組件(components)。Swing是一個用于開發(fā)Java應(yīng)用程序用戶界面的開發(fā)工具包。它以抽象窗口工具包(AWT)為基礎(chǔ)使跨平臺應(yīng)用程序可以使用任何可插拔的外觀風(fēng)格。Swing開發(fā)人員只用很少的代碼就可以利用Swing豐富、靈活的功能和模塊化組件來創(chuàng)建優(yōu)雅的用戶界面。JDK寫程序所有功能都是靠虛擬機去操作本地操作系統(tǒng)。比如window下,就是JDK用windowsAPI實現(xiàn)功能。而awt包中很多組件是組件自身去調(diào)用本地操作系統(tǒng)代碼swing包中的組件采用的是調(diào)用本地虛擬機方法,由虛擬機再調(diào)用本地操作系統(tǒng)代碼。意思就是中間多了一層,這樣就加強了swing包的移植性,與本地關(guān)系不那強了。圖3.1AWT常用組件繼承關(guān)系圖Container為容器,是一個特殊的組件,該組件中可以通過add方法添加其他組件進(jìn)來。布局,容器中的組件的排放方式。常見的布局管理器:FlowLayout(流式布局管理器):從左到右的順序排列。Panel默認(rèn)的布局管理器。BorderLayout(邊界布局管理器):東,南,西,北,中。Frame默認(rèn)的布局管理器。GridLayout(網(wǎng)格布局管理器):規(guī)則的矩陣CardLayout(卡片布局管理器):選項卡GridBagLayout(網(wǎng)格包布局管理器):非規(guī)則的矩陣類JFrame是java.awt.Frame的擴展版本,該版本添加了對JFC/Swing組件架構(gòu)的支持,常用方法如下:JFrame()該構(gòu)造方法可以創(chuàng)建一個無標(biāo)題的窗口,窗口的默認(rèn)布局為BorderLayout布局。JFrame(Strings)該構(gòu)造方法可以創(chuàng)建一個標(biāo)題為s的窗口,窗口的默認(rèn)布局為BorderLayout布局。publicvoidsetBounds(inta,intb,intwidth,intheight)窗口調(diào)用該方法可以設(shè)置出現(xiàn)在屏幕上時的初始位置是(a,b),即距屏幕左面a個像素、距屏幕上方b個像素;窗口的寬是width,高是height。publicvoidsetSize(intwidth,intheight)設(shè)置窗口的大小,窗口在屏幕出現(xiàn)是默認(rèn)位置是(0,0)。publicvoidsetVisible(booleanb)設(shè)置窗口是可見還是不可見,窗口默認(rèn)是不可見的。publicvoidsetResizable(booleanb)設(shè)置窗口是否可調(diào)整大小,窗口默認(rèn)是可調(diào)整大小的。publicvoidsetDefaultCloseOperation(intoperation)設(shè)置用戶在此窗體上發(fā)起"close"時默認(rèn)執(zhí)行的操作。publicvoidsetLocationRelativeTo(Componentc)設(shè)置窗口相對于指定組件的位置。如果組件當(dāng)前未顯示,或者c為null,則此窗口將置于屏幕的中央。實驗內(nèi)容圖形用戶界面設(shè)計程序(ArtFont.java)要求:設(shè)計一個文字字體設(shè)置窗體,在該窗體中可以設(shè)置要顯示文字的字體內(nèi)容,包括字體名稱、字體大小、粗體和斜體等字體風(fēng)格。并模擬在不同操作系統(tǒng)下的顯示效果。程序的最終顯示效果如下:提示:整個窗體繼承于JFrame,采用BorderLayout布局。在窗體中添加三個JPanel:northPanel、centerPanel和southPanel,分別位于窗體的北部、中部和南部,然后分別在各個面板中添加其它組件,并逐步完善程序功能。日歷應(yīng)用程序設(shè)計編寫一個應(yīng)用程序,設(shè)計一個窗體,該窗體為BorderLayout布局。窗體的中心添加一個Panel容器:Panel容器的布局是7行7列的GridLayout布局,Panel容器中放置49個標(biāo)簽,用來顯示日歷。窗口的北面添加一個Panel容器,其布局是FlowLayout布局,Panel容器中放置兩個按鈕:nextMonth和previousMonth。窗口的南面添加一個Panel容器,其布局是FlowLayout,Panel容器中放置一個標(biāo)簽用來顯示一些信息。請按以下步驟完成程序設(shè)計:編寫CalendarBean類,實現(xiàn)日期類:publicclassCalendarBean{ Stringday[]; intyear=2013,month=0; publicvoidsetYear(intyear){ this.year=year; } publicintgetYear(){ returnyear; } publicvoidsetMonth(intmonth){ this.month=month; } publicintgetMonth(){ returnmonth; } //返回某年某月1號開始的日期數(shù)組 publicString[]getCalendar(){ Stringa[]=newString[42]; Calendar日歷=Calendar.getInstance(); //注意:1月份是從0開始,所以要減1 日歷.set(year,month-1,1); int星期幾=日歷.get(Calendar.DAY_OF_WEEK)-1; intday=0; if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){ day=31; } if(month==4||month==6||month==9||month==11){ day=30; } if(month==2){ if(((year%4==0)&&(year%100!=0))||(year%400==0)){ day=29; }else{ day=28; } } for(inti=星期幾,n=1;i<星期幾+day;i++){ a[i]=String.valueOf(n); n++; } returna; }}補充代碼,完成日歷窗體界面類設(shè)計:publicclassCalendarFrameextendsFrame{ LabellabelDay[]=newLabel[42]; LabellabelYear; ButtontitleName[]=newButton[7]; ButtonnextMonth,previousMonth; LabelshowMessage; TextFieldinputYear; CalendarBeancalendar; Stringname[]={"日","一","二","三","四","五","六"}; intyear=2013,month=1; Stringdays[]; publicCalendarFrame(){ calendar=newCalendarBean(); calendar.setYear(year); calendar.setMonth(month); days=calendar.getCalendar(); ScrollPanescrollPane=newScrollPane(); scrollPane.add(getCenterPanel()); 【補充代碼】//窗口添加scrollPane在中心區(qū)域 【補充代碼】//窗口添加pNorth在北面區(qū)域 【補充代碼】//窗口添加pSouth在南區(qū)域。 } privatePanelgetNorthPanel(){ Panelpanel=newPanel(); 【補充代碼…】 returnpanel; } privatePanelgetCenterPanel(){ Panelpanel=newPanel(); 【補充代碼】//將panel的布局設(shè)置為7行7列的GridLayout布局 for(inti=0;i<7;i++){ titleName[i]=newButton(name[i]); 【補充代碼】//panel添加組件titleName[i]。 } for(inti=0;i<42;i++){ labelDay[i]=newLabel("",Label.CENTER); 【補充代碼】//panel添加組件labelDay[i]。 } for(inti=0;i<42;i++){ labelDay[i].setText(days[i]); } returnpanel; } privatePanelgetSouthPanel(){ Panelpanel=newPanel(); 【補充代碼…】 returnpanel; }}設(shè)計主應(yīng)用程序類: publicclassCalendarMainClass{ publicstaticvoidmain(Stringargs[]){ CalendarFrameframe=newCalendarFrame(); frame.setTitle("日歷應(yīng)用程序"); frame.setBounds(100,100,360,300); frame.setVisible(true); frame.validate(); }}調(diào)試、編譯和運行程序,并顯示正確界面。CalendarBean.javaimportjava.util.Calendar;publicclassCalendarBean{ Stringday[]; intyear=2013,month=0; publicvoidsetYear(intyear){ this.year=year; } publicintgetYear(){ returnyear; } publicvoidsetMonth(intmonth){ this.month=month; } publicintgetMonth(){ returnmonth; } //返回某年某月1號開始的日期數(shù)組 publicString[]getCalendar(){ Stringa[]=newString[42]; Calendar日歷=Calendar.getInstance(); //注意:1月份是從0開始,所以要減1 日歷.set(year,month-1,1); int星期幾=日歷.get(Calendar.DAY_OF_WEEK)-1; intday=0; if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){ day=31; } if(month==4||month==6||month==9||month==11){ day=30; } if(month==2){ if(((year%4==0)&&(year%100!=0))||(year%400==0)){ day=29; }else{ day=28; } } for(inti=星期幾,n=1;i<星期幾+day;i++){ a[i]=String.valueOf(n); n++; } returna; }}CalendarFrame.javaimportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassCalendarFrameextendsJFrameimplementsActionListener,KeyListener{ /** * */ privatestaticfinallongserialVersionUID=1L; LabellabelDay[]=newLabel[42]; LabellabelYear; ButtontitleName[]=newButton[7]; ButtonnextMonth,previousMonth; LabelshowMessage; TextFieldinputYear; CalendarBeancalendar; Stringname[]={"日","一","二","三","四","五","六"}; intyear=2013,month=1; Stringdays[]; publicCalendarFrame(){ calendar=newCalendarBean(); calendar.setYear(year); calendar.setMonth(month); days=calendar.getCalendar(); ScrollPanescrollPane=newScrollPane(); scrollPane.add(getCenterPanel()); add("Center",scrollPane);//【補充代碼】//窗口添加scrollPane在中心區(qū)域 add(getNorthPanel(),BorderLayout.NORTH);//【補充代碼】//窗口添加pNorth在北面區(qū)域 add(getSouthPanel(),BorderLayout.SOUTH);//【補充代碼】//窗口添加pSouth在南區(qū)域。 } privatePanelgetNorthPanel(){ Panelpanel=newPanel(); //【補充代碼…】 panel.setLayout(newFlowLayout(FlowLayout.CENTER,10,5)); showMessage=newLabel("請輸入年份:"); inputYear=newTextField(8); previousMonth=newButton("上月"); nextMonth=newButton("下月"); panel.add(showMessage); panel.add(inputYear); panel.add(previousMonth); panel.add(nextMonth); returnpanel; } privatePanelgetCenterPanel(){ Panelpanel=newPanel(); panel.setLayout(newGridLayout(7,7));//【補充代碼】//將panel的布局設(shè)置為7行7列的GridLayout布局 for(inti=0;i<7;i++){ titleName[i]=newButton(name[i]); panel.add(titleName[i]);//【補充代碼】//panel添加組件titleName[i]。 } for(inti=0;i<42;i++){ labelDay[i]=newLabel("",Label.CENTER); panel.add(labelDay[i]);//【補充代碼】//panel添加組件labelDay[i]。 } for(inti=0;i<42;i++){ labelDay[i].setText(days[i]); } returnpanel; } privatePanelgetSouthPanel(){CalendarMainClass.javaimportjava.awt.*;importjavax.swing.*;publicclassCalendarFrameextendsJFrame{ /** * */ privatestaticfinallongserialVersionUID=1L; LabellabelDay[]=newLabel[42]; LabellabelYear; ButtontitleName[]=newButton[7]; ButtonnextMonth,previousMonth; LabelshowMessage; TextFieldinputYear; CalendarBeancalendar; Stringname[]={"日","一","二","三","四","五","六"}; intyear=2013,month=1; Stringdays[]; publicCalendarFrame(){ calendar=newCalendarBean(); calendar.setYear(year); calendar.setMonth(month); days=calendar.getCalendar(); ScrollPanescrollPane=newScrollPane(); scrollPane.add(getCenterPanel()); add("Center",scrollPane);//【補充代碼】//窗口添加scrollPane在中心區(qū)域 add(getNorthPanel(),BorderLayout.NORTH);//【補充代碼】//窗口添加pNorth在北面區(qū)域 add(getSouthPanel(),BorderLayout.SOUTH);//【補充代碼】//窗口添加pSouth在南區(qū)域。 } privatePanelgetNorthPanel(){ Panelpanel=newPanel(); //【補充代碼…】 panel.setLayout(newFlowLayout(FlowLayout.CENTER,10,5)); showMessage=newLabel("請輸入年份:"); inputYear=newTextField(8); previousMonth=newButton("上月"); nextMo
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024石材行業(yè)深度合作開發(fā)合同書3篇
- VI設(shè)計合同書模板標(biāo)準(zhǔn)
- 2025年度個人住宅陽臺防水改造合同范本8篇
- 個人間緊急貸款協(xié)議樣本2024年版版
- 2025年度新能源汽車充電設(shè)施運營管理承包合同協(xié)議書模板1500字4篇
- 長沙文創(chuàng)藝術(shù)職業(yè)學(xué)院《藝術(shù)學(xué)理論》2023-2024學(xué)年第一學(xué)期期末試卷
- 家庭火災(zāi)自救技巧的普及與推廣
- 小空間大功能單身公寓的空間利用畢業(yè)設(shè)計
- 2025年度精密模具租賃服務(wù)合同模板4篇
- 2025年食品加工委托生產(chǎn)與食品安全合同3篇
- 氣動調(diào)節(jié)閥調(diào)校
- 中考模擬考試化學(xué)試卷與答案解析(共三套)
- 新人教版五年級小學(xué)數(shù)學(xué)全冊奧數(shù)(含答案)
- 風(fēng)電場升壓站培訓(xùn)課件
- 收納盒注塑模具設(shè)計(論文-任務(wù)書-開題報告-圖紙)
- 博弈論全套課件
- CONSORT2010流程圖(FlowDiagram)【模板】文檔
- 腦電信號處理與特征提取
- 高中數(shù)學(xué)知識點全總結(jié)(電子版)
- GB/T 10322.7-2004鐵礦石粒度分布的篩分測定
- 2023新譯林版新教材高中英語必修一重點詞組歸納總結(jié)
評論
0/150
提交評論