版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)三圖形用戶(hù)界面設(shè)計(jì)實(shí)驗(yàn)?zāi)康恼莆認(rèn)ava語(yǔ)言中GUI編程的基本方法掌握J(rèn)ava語(yǔ)言中AWT組件的基本用法掌握J(rèn)ava語(yǔ)言中Swing組件的基本用法實(shí)驗(yàn)導(dǎo)讀通過(guò)圖形用戶(hù)界面(GUI:GraphicsUserInterface),用戶(hù)和程序之間可以方便地進(jìn)行交互。AWT(AbstractWindowingToolkit),中文譯為抽象窗口工具包,是Java提供的用來(lái)建立和設(shè)置Java的圖形用戶(hù)界面的基本工具。AWT由Java中的java.awt包提供,里面包含了許多可用來(lái)建立與平臺(tái)無(wú)關(guān)的圖形用戶(hù)界面(GUI)的類(lèi),這些類(lèi)又被稱(chēng)為組件(components)。Swing是一個(gè)用于開(kāi)發(fā)Java應(yīng)用程序用戶(hù)界面的開(kāi)發(fā)工具包。它以抽象窗口工具包(AWT)為基礎(chǔ)使跨平臺(tái)應(yīng)用程序可以使用任何可插拔的外觀風(fēng)格。Swing開(kāi)發(fā)人員只用很少的代碼就可以利用Swing豐富、靈活的功能和模塊化組件來(lái)創(chuàng)建優(yōu)雅的用戶(hù)界面。JDK寫(xiě)程序所有功能都是靠虛擬機(jī)去操作本地操作系統(tǒng)。比如window下,就是JDK用windowsAPI實(shí)現(xiàn)功能。而awt包中很多組件是組件自身去調(diào)用本地操作系統(tǒng)代碼swing包中的組件采用的是調(diào)用本地虛擬機(jī)方法,由虛擬機(jī)再調(diào)用本地操作系統(tǒng)代碼。意思就是中間多了一層,這樣就加強(qiáng)了swing包的移植性,與本地關(guān)系不那強(qiáng)了。圖3.1AWT常用組件繼承關(guān)系圖Container為容器,是一個(gè)特殊的組件,該組件中可以通過(guò)add方法添加其他組件進(jìn)來(lái)。布局,容器中的組件的排放方式。常見(jiàn)的布局管理器:FlowLayout(流式布局管理器):從左到右的順序排列。Panel默認(rèn)的布局管理器。BorderLayout(邊界布局管理器):東,南,西,北,中。Frame默認(rèn)的布局管理器。GridLayout(網(wǎng)格布局管理器):規(guī)則的矩陣CardLayout(卡片布局管理器):選項(xiàng)卡GridBagLayout(網(wǎng)格包布局管理器):非規(guī)則的矩陣類(lèi)JFrame是java.awt.Frame的擴(kuò)展版本,該版本添加了對(duì)JFC/Swing組件架構(gòu)的支持,常用方法如下:JFrame()該構(gòu)造方法可以創(chuàng)建一個(gè)無(wú)標(biāo)題的窗口,窗口的默認(rèn)布局為BorderLayout布局。JFrame(Strings)該構(gòu)造方法可以創(chuàng)建一個(gè)標(biāo)題為s的窗口,窗口的默認(rèn)布局為BorderLayout布局。publicvoidsetBounds(inta,intb,intwidth,intheight)窗口調(diào)用該方法可以設(shè)置出現(xiàn)在屏幕上時(shí)的初始位置是(a,b),即距屏幕左面a個(gè)像素、距屏幕上方b個(gè)像素;窗口的寬是width,高是height。publicvoidsetSize(intwidth,intheight)設(shè)置窗口的大小,窗口在屏幕出現(xiàn)是默認(rèn)位置是(0,0)。publicvoidsetVisible(booleanb)設(shè)置窗口是可見(jiàn)還是不可見(jiàn),窗口默認(rèn)是不可見(jiàn)的。publicvoidsetResizable(booleanb)設(shè)置窗口是否可調(diào)整大小,窗口默認(rèn)是可調(diào)整大小的。publicvoidsetDefaultCloseOperation(intoperation)設(shè)置用戶(hù)在此窗體上發(fā)起"close"時(shí)默認(rèn)執(zhí)行的操作。publicvoidsetLocationRelativeTo(Componentc)設(shè)置窗口相對(duì)于指定組件的位置。如果組件當(dāng)前未顯示,或者c為null,則此窗口將置于屏幕的中央。實(shí)驗(yàn)內(nèi)容圖形用戶(hù)界面設(shè)計(jì)程序(ArtFont.java)要求:設(shè)計(jì)一個(gè)文字字體設(shè)置窗體,在該窗體中可以設(shè)置要顯示文字的字體內(nèi)容,包括字體名稱(chēng)、字體大小、粗體和斜體等字體風(fēng)格。并模擬在不同操作系統(tǒng)下的顯示效果。程序的最終顯示效果如下:提示:整個(gè)窗體繼承于JFrame,采用BorderLayout布局。在窗體中添加三個(gè)JPanel:northPanel、centerPanel和southPanel,分別位于窗體的北部、中部和南部,然后分別在各個(gè)面板中添加其它組件,并逐步完善程序功能。日歷應(yīng)用程序設(shè)計(jì)編寫(xiě)一個(gè)應(yīng)用程序,設(shè)計(jì)一個(gè)窗體,該窗體為BorderLayout布局。窗體的中心添加一個(gè)Panel容器:Panel容器的布局是7行7列的GridLayout布局,Panel容器中放置49個(gè)標(biāo)簽,用來(lái)顯示日歷。窗口的北面添加一個(gè)Panel容器,其布局是FlowLayout布局,Panel容器中放置兩個(gè)按鈕:nextMonth和previousMonth。窗口的南面添加一個(gè)Panel容器,其布局是FlowLayout,Panel容器中放置一個(gè)標(biāo)簽用來(lái)顯示一些信息。請(qǐng)按以下步驟完成程序設(shè)計(jì):編寫(xiě)CalendarBean類(lèi),實(shí)現(xiàn)日期類(lèi):publicclassCalendarBean{ Stringday[]; intyear=2013,month=0; publicvoidsetYear(intyear){ this.year=year; } publicintgetYear(){ returnyear; } publicvoidsetMonth(intmonth){ this.month=month; } publicintgetMonth(){ returnmonth; } //返回某年某月1號(hào)開(kāi)始的日期數(shù)組 publicString[]getCalendar(){ Stringa[]=newString[42]; Calendar日歷=Calendar.getInstance(); //注意:1月份是從0開(kāi)始,所以要減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; }}補(bǔ)充代碼,完成日歷窗體界面類(lèi)設(shè)計(jì):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()); 【補(bǔ)充代碼】//窗口添加scrollPane在中心區(qū)域 【補(bǔ)充代碼】//窗口添加pNorth在北面區(qū)域 【補(bǔ)充代碼】//窗口添加pSouth在南區(qū)域。 } privatePanelgetNorthPanel(){ Panelpanel=newPanel(); 【補(bǔ)充代碼…】 returnpanel; } privatePanelgetCenterPanel(){ Panelpanel=newPanel(); 【補(bǔ)充代碼】//將panel的布局設(shè)置為7行7列的GridLayout布局 for(inti=0;i<7;i++){ titleName[i]=newButton(name[i]); 【補(bǔ)充代碼】//panel添加組件titleName[i]。 } for(inti=0;i<42;i++){ labelDay[i]=newLabel("",Label.CENTER); 【補(bǔ)充代碼】//panel添加組件labelDay[i]。 } for(inti=0;i<42;i++){ labelDay[i].setText(days[i]); } returnpanel; } privatePanelgetSouthPanel(){ Panelpanel=newPanel(); 【補(bǔ)充代碼…】 returnpanel; }}設(shè)計(jì)主應(yīng)用程序類(lèi): publicclassCalendarMainClass{ publicstaticvoidmain(Stringargs[]){ CalendarFrameframe=newCalendarFrame(); frame.setTitle("日歷應(yīng)用程序"); frame.setBounds(100,100,360,300); frame.setVisible(true); frame.validate(); }}調(diào)試、編譯和運(yùn)行程序,并顯示正確界面。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號(hào)開(kāi)始的日期數(shù)組 publicString[]getCalendar(){ Stringa[]=newString[42]; Calendar日歷=Calendar.getInstance(); //注意:1月份是從0開(kāi)始,所以要減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);//【補(bǔ)充代碼】//窗口添加scrollPane在中心區(qū)域 add(getNorthPanel(),BorderLayout.NORTH);//【補(bǔ)充代碼】//窗口添加pNorth在北面區(qū)域 add(getSouthPanel(),BorderLayout.SOUTH);//【補(bǔ)充代碼】//窗口添加pSouth在南區(qū)域。 } privatePanelgetNorthPanel(){ Panelpanel=newPanel(); //【補(bǔ)充代碼…】 panel.setLayout(newFlowLayout(FlowLayout.CENTER,10,5)); showMessage=newLabel("請(qǐng)輸入年份:"); 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));//【補(bǔ)充代碼】//將panel的布局設(shè)置為7行7列的GridLayout布局 for(inti=0;i<7;i++){ titleName[i]=newButton(name[i]); panel.add(titleName[i]);//【補(bǔ)充代碼】//panel添加組件titleName[i]。 } for(inti=0;i<42;i++){ labelDay[i]=newLabel("",Label.CENTER); panel.add(labelDay[i]);//【補(bǔ)充代碼】//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);//【補(bǔ)充代碼】//窗口添加scrollPane在中心區(qū)域 add(getNorthPanel(),BorderLayout.NORTH);//【補(bǔ)充代碼】//窗口添加pNorth在北面區(qū)域 add(getSouthPanel(),BorderLayout.SOUTH);//【補(bǔ)充代碼】//窗口添加pSouth在南區(qū)域。 } privatePanelgetNorthPanel(){ Panelpanel=newPanel(); //【補(bǔ)充代碼…】 panel.setLayout(newFlowLayout(FlowLayout.CENTER,10,5)); showMessage=newLabel("請(qǐng)輸入年份:"); inputYear=newTextField(8); previousMonth=newButton("上月"); nextMo
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育領(lǐng)域的安全管理創(chuàng)新與實(shí)踐
- 科技助力乳腺疾病早期發(fā)現(xiàn)與干預(yù)
- 2025年度個(gè)人與企業(yè)租車(chē)合作保障協(xié)議3篇
- 2025版?zhèn)€人住宅電梯公寓租賃管理合同
- 2025年度個(gè)人貸款合同解除條件合同范本3篇
- 2025年度個(gè)人住房抵押貸款延期還款合同3篇
- 2025年度個(gè)人土地租賃合同范本7篇
- 學(xué)前兒童科技美術(shù)教育的政策支持與實(shí)施策略
- 2025年新型環(huán)保櫥柜銷(xiāo)售服務(wù)合同范本4篇
- 珠海廣東珠海市公安局交通警察支隊(duì)金灣大隊(duì)招聘輔警2人筆試歷年參考題庫(kù)附帶答案詳解
- 2025年八省聯(lián)考數(shù)學(xué)試題(原卷版)
- 《榜樣9》觀后感心得體會(huì)二
- 小學(xué)科學(xué)項(xiàng)目化作業(yè)的設(shè)計(jì)與實(shí)施研究
- GB/T 10322.7-2004鐵礦石粒度分布的篩分測(cè)定
- 2023新譯林版新教材高中英語(yǔ)必修一重點(diǎn)詞組歸納總結(jié)
- 蘇教版四年級(jí)數(shù)學(xué)下冊(cè)第3單元第2課時(shí)“常見(jiàn)的數(shù)量關(guān)系”教案
- 弘揚(yáng)中華傳統(tǒng)文化課件
- 基于協(xié)同過(guò)濾算法的電影推薦系統(tǒng)設(shè)計(jì)
- 消防應(yīng)急預(yù)案流程圖
- 《數(shù)據(jù)科學(xué)與大數(shù)據(jù)技術(shù)導(dǎo)論》完整版課件(全)
- 人教統(tǒng)編版高中語(yǔ)文必修下冊(cè)第六單元(單元總結(jié))
評(píng)論
0/150
提交評(píng)論