李后浪實(shí)驗(yàn)四用戶圖形界面GUI_第1頁
李后浪實(shí)驗(yàn)四用戶圖形界面GUI_第2頁
李后浪實(shí)驗(yàn)四用戶圖形界面GUI_第3頁
李后浪實(shí)驗(yàn)四用戶圖形界面GUI_第4頁
李后浪實(shí)驗(yàn)四用戶圖形界面GUI_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、實(shí)驗(yàn)四 用戶圖形界面GUI實(shí)驗(yàn)課程名:Java程序設(shè)計(jì)專業(yè)班級: 12網(wǎng)工2班 學(xué)號: 201240420224 姓名: 李后浪 實(shí)驗(yàn)時(shí)間: 2014.5.19-5.30 實(shí)驗(yàn)地點(diǎn): K4-307 指導(dǎo)教師: 馮 珊 一、實(shí)驗(yàn)?zāi)康暮鸵髮W(xué)習(xí)處理ActionEvent事件;學(xué)習(xí)處理ItemEvent事件和paint方法;學(xué)習(xí)使用布局類。二、實(shí)驗(yàn)內(nèi)容 任務(wù)1 算術(shù)測試。² 實(shí)驗(yàn)要求:編寫一個算術(shù)測試小軟件,用來訓(xùn)練小學(xué)生的算術(shù)能力。程序由3個類組成,其中Teacher類對象負(fù)責(zé)給出算術(shù)題目,并判斷回答者的答案是否正確;ComputerFrame類對象負(fù)責(zé)為算術(shù)題目提供視圖,比如

2、用戶可以通過ComputerFrame類對象提供的GUI界面看到題目,并通過該GUI界面給出題目的答案;MainClass是軟件的主類。1、源代碼:Teacher.javapublic class Teacher int numberOne,numberTwo; String operator="" boolean right; public int giveNumberOne(int n) numberOne=(int)(Math.random()*n)+1; return numberOne; public int giveNumberTwo(int n) number

3、Two=(int)(Math.random()*n)+1; return numberTwo; public String giveOperator() double d=Math.random(); if(d>=0.5) operator="+" else operator="-" return operator; public boolean getRight(int answer) if(operator.equals("+") if(answer=numberOne+numberTwo) right=true; else

4、 right=false; else if(operator.equals("-") if(answer=numberOne-numberTwo) right=true; else right=false; return right; ComputerFrame.javaimport java.awt.*;import java.awt.event.*;public class ComputerFrame extends Frame implements ActionListener TextField textOne,textTwo,textResult; Button

5、getProblem,giveAnwser; Label operatorLabel,message; Teacher teacher; ComputerFrame(String s) super(s); teacher=new Teacher(); setLayout(new FlowLayout(); textOne=new TextField(10); /創(chuàng)建textOne,其可見字符長是10 textTwo=new TextField(10); /創(chuàng)建textTwo,其可見字符長是10 textResult=new TextField(10); /創(chuàng)建textResult,其可見字符長

6、是10 operatorLabel=new Label("+"); message=new Label("你還沒有回答呢"); getProblem=new Button("獲取題目"); giveAnwser=new Button("確認(rèn)答案"); add(getProblem); add(textOne); add(operatorLabel); add(textTwo); add(new Label("="); add(textResult); add(giveAnwser); add(m

7、essage); textResult.requestFocus(); textOne.setEditable(false); textTwo.setEditable(false); getProblem.addActionListener(this);/將當(dāng)前窗口注冊為getProblem的ActionEvent事件監(jiān)視器 giveAnwser.addActionListener(this);/將當(dāng)前窗口注冊為giveAnwser的ActionEvent事件監(jiān)視器 textResult.addActionListener(this);/將當(dāng)前窗口注冊為textResult的ActionEve

8、nt事件監(jiān)視器 setBounds(100,100,450,100); setVisible(true); validate(); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); public void actionPerformed(ActionEvent e) if(e.getSource() = getProblem) /判斷事件源是否是getProblem int number1=teacher.giveNumberOne(100); in

9、t number2=teacher.giveNumberTwo(100); String operator=teacher.giveOperator(); textOne.setText(""+number1); textTwo.setText(""+number2); operatorLabel.setText(operator); message.setText("請回答");textResult.setText(null); if(e.getSource() = giveAnwser) /判斷事件源是否是giveAnwser S

10、tring answer=textResult.getText(); try int result=Integer.parseInt(answer); if(teacher.getRight(result)=true) message.setText("你回答正確"); else message.setText("你回答錯誤"); catch(NumberFormatException ex) message.setText("請輸入數(shù)字字符"); textResult.requestFocus(); validate(); Main

11、Class.java public class MainClass public static void main(String args) ComputerFrame frame; frame=new ComputerFrame("算術(shù)測試"); /創(chuàng)建窗口,其標(biāo)題為:算術(shù)測試 2、運(yùn)行結(jié)果:3、實(shí)驗(yàn)結(jié)果與分析:(明確地寫出最后結(jié)果,并對自己得出的結(jié)果進(jìn)行具體、定量的結(jié)果分析,說明其可靠性;杜絕只羅列不分析)該程序由3個類組成,其中Teacher類對象負(fù)責(zé)給出算術(shù)題目,并判斷回答者的答案是否正確;ComputerFrame類對象負(fù)責(zé)為算術(shù)題目提供視圖,比如用戶可以通過Co

12、mputerFrame類對象提供的GUI界面看到題目,并通過該GUI界面給出題目的答案;MainClass是軟件的主類。任務(wù)2 信號燈。 ² 實(shí)驗(yàn)要求:編寫一個帶有窗口的應(yīng)用程序。在窗口的北面添加一個下拉列表,該下拉列表有“”、“”和“”三個選項(xiàng)。在窗口的中心添加一個畫布,當(dāng)用戶在下拉列表選擇某項(xiàng)后,畫布上繪制相應(yīng)的信號燈。1、源代碼:SignalCanvas.javaimport java.awt.*;public class SignalCanvas extends Canvas int red,green,yellow,x,y,r; SignalCanvas() setBack

13、ground(Color.white); public void setRed(int r) red=r; public void setGreen(int g) green=g; public void setYellow(int y) yellow=y; public void setPosition(int x,int y) this.x=x; this.y=y; public void setRadius(int r) this.r=r; public void paint(Graphics g) if(red=1) g.setColor(Color.red); else if(gre

14、en=1) g.setColor(Color.green); else if(yellow=1) g.setColor(Color.yellow); g.fillOval(x,y,2*r,2*r); SignalFrame.javaimport java.awt.*;import java.applet.*;import java.awt.event.*;public class SignalFrame extends Frame implements ItemListener Choice choice; SignalCanvas signal=null; String itemRed=&q

15、uot;紅燈",itemYellow="黃燈",itemGreen="綠燈" public SignalFrame() choice=new Choice(); /創(chuàng)建choice choice.add(itemRed); /創(chuàng)建choice添加itemRed choice.add(itemYellow); /創(chuàng)建choice添加itemYellow choice.add(itemGreen); /創(chuàng)建choice添加itemGreen choice.addItemListener(this); /將當(dāng)前窗口注冊為choice的ItemEven

16、t事件監(jiān)視器 add(choice,BorderLayout.NORTH); try Class cs=Class.forName("SignalCanvas"); signal=(SignalCanvas)cs.newInstance(); add(signal,BorderLayout.CENTER); catch(Exception e) add(new Label("您還沒有編寫SignalCanvas類"),BorderLayout.CENTER); setBounds(100,100,360,300); setVisible(true); v

17、alidate(); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); public void itemStateChanged(ItemEvent e) String item= choice.getSelectedItem(); / choice返回被選中的條目 int w=signal.getBounds().width; int h=signal.getBounds().height; int m=Math.min(w,h); signal.

18、setRadius(m/6); if(item.equals(itemRed) if(signal!=null) signal.setRed(1); signal.setYellow(0); signal.setGreen(0); signal.setPosition(w/3,0); signal.repaint(); else if(item.equals(itemYellow) if(signal!=null) signal.setRed(0); signal.setYellow(1); signal.setGreen(0); signal.setPosition(w/3,h/3); si

19、gnal.repaint(); else if(item.equals(itemGreen) if(signal!=null) signal.setRed(0); signal.setYellow(0); signal.setGreen(1); signal.setPosition(w/3,2*h/3); signal.repaint(); SignalMainClass.java public class SignalMainClass public static void main(String args) SignalFrame frame; frame=new SignalFrame(

20、) ; frame.setTitle("信號燈"); 2、運(yùn)行結(jié)果:3、實(shí)驗(yàn)結(jié)果與分析:該程序是一個帶有窗口的應(yīng)用程序。在窗口的北面添加了一個下拉列表,該下拉列表有“紅燈”、“黃燈”和“綠燈”三個選項(xiàng)。在窗口的中心添加一個畫布,當(dāng)用戶在下拉列表選擇某項(xiàng)后,畫布上繪制相應(yīng)的信號燈。任務(wù)3 布局與日歷。² 實(shí)驗(yàn)要求:編寫一個應(yīng)用程序,有一個窗口,該窗口為BorderLayout布局。窗口的中心添加一個Panel容器:pCenter,pCenter的布局是7行7列的GriderLayout布局,pCenter中放置49個標(biāo)簽,用來顯示日歷。窗口的北面添加一個Panel容

21、器pNorth,其布局是FlowLayout布局,pNorth放置兩個按鈕:nextMonth和previousMonth,單擊nextMonth按鈕,可以顯示當(dāng)前月的下一月的日歷;單擊previousMonth按鈕,可以顯示當(dāng)前月的上一月的日歷。窗口的南面添加一個Panel容器pSouth,其布局是FlowLayout布局,pSouth中放置一個標(biāo)簽用來顯示一些信息。1、源代碼:CalendarBean.javaimport java.util.Calendar;public class CalendarBean String day; int year=2005,month=0; publ

22、ic void setYear(int year) this.year=year; public int getYear() return year; public void setMonth(int month) this.month=month; public int getMonth() return month; public String getCalendar() String a=new String42; Calendar 日歷=Calendar.getInstance(); 日歷.set(year,month-1,1); int 星期幾=日歷.get(Calendar.DAY

23、_OF_WEEK)-1; int day=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(int i=星期幾,n=1;i<星期幾+day;i+) ai=String.valueOf(n) ; n+; return a; Calenda

24、rFrame.javaimport java.util.*;import java.awt.*;import java.awt.event.*;import java.applet.*;public class CalendarFrame extends Frame implements ActionListener Label labelDay=new Label42; Button titleName=new Button7; String name="日","一","二","三", "四"

25、,"五","六" Button nextMonth,previousMonth; int year=2006,month=10; CalendarBean calendar; Label showMessage=new Label("",Label.CENTER); public CalendarFrame() Panel pCenter=new Panel(); pCenter.setLayout(new GridLayout(7,7); /將pCenter的布局設(shè)置為7行7列的GridLayout 布局。 for(int i=0;

26、i<7;i+) titleNamei=new Button(namei); pCenter.add(titleNamei);/pCenter添加組件titleNamei。 for(int i=0;i<42;i+) labelDayi=new Label("",Label.CENTER); pCenter.add(labelDayi);/pCenter添加組件labelDayi。 calendar=new CalendarBean(); calendar.setYear(year); calendar.setMonth(month); String day=cal

27、endar.getCalendar(); for(int i=0;i<42;i+) labelDayi.setText(dayi); nextMonth=new Button("下月"); previousMonth=new Button("上月"); nextMonth.addActionListener(this); previousMonth.addActionListener(this); Panel pNorth=new Panel(), pSouth=new Panel(); pNorth.add(previousMonth); pNo

28、rth.add(nextMonth); pSouth.add(showMessage); showMessage.setText("日歷:"+calendar.getYear()+"年"+ calendar.getMonth()+"月" ); ScrollPane scrollPane=new ScrollPane(); scrollPane.add(pCenter); this.add("Center",pCenter);/ 窗口添加scrollPane在中心區(qū)域 this.add("North&quo

29、t;,pNorth);/ 窗口添加pNorth 在北面區(qū)域 this.add("South",pSouth );/ 窗口添加pSouth 在南區(qū)域。 public void actionPerformed(ActionEvent e) if(e.getSource()=nextMonth) month=month+1; if(month>12) month=1; calendar.setMonth(month); String day=calendar.getCalendar(); for(int i=0;i<42;i+) labelDayi.setText(dayi); else if(e.getSource()=previousMonth) month=month-1; if(month<1) month=12; c

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論