版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)六Java圖形用戶界面1.實(shí)驗(yàn)?zāi)康模?)掌握?qǐng)D形用戶界面基本組件。(2)了解如何使用布局管理器對(duì)組件進(jìn)行管理。(3)掌握J(rèn)ava事件處理機(jī)制。2.實(shí)驗(yàn)內(nèi)容實(shí)驗(yàn)題1:編寫一個(gè)模擬計(jì)算器的程序,使用面板和網(wǎng)格布局,添加一個(gè)文本框,10個(gè)數(shù)字按鈕(0-9),4個(gè)加減乘除按鈕,一個(gè)等號(hào)按鈕,一個(gè)清除按鈕,要求將計(jì)算公式和結(jié)果顯示在文本框中。Calculator.java:packagecal;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.*;publicclassCalculator{ Stringtext_temp=newString(""); JFramef=newJFrame("Calculator"); JTextFieldtext=newJTextField(); classMyEventimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ if(e.getActionCommand().equals("C")) text_temp=""; elseif(e.getActionCommand().equals("=")) text_temp=text_temp+"="+Postfix.evaluateInfix(Postfix.converToPostfix(text_temp)); elseif(e.getActionCommand().equals("<")){ if(text_temp.length()>0) text_temp=text_temp.substring(0,text_temp.length()-1); } else text_temp=text_temp+e.getActionCommand(); text.setText(text_temp); } } privateString[][]but_Names={{"1","4","7","0"},{"2","5","8","("} ,{"3","6","9",")"},{"*","-","^","<"},{"/","+","C","="}}; privateJButton[][]but=newJButton[5][4]; publicCalculator(){ f.setBounds(100,100,350,350); Containercon=newContainer(); con=f.getContentPane(); JPaneltextPan=newJPanel(); text.setEditable(false); text.setColumns(28); text.setHorizontalAlignment(JTextField.RIGHT); textPan.add(text); con.add(textPan,BorderLayout.NORTH); finalGridLayoutgrid=newGridLayout(4,5); grid.setVgap(10); grid.setHgap(10); JPanelbut_Pan=newJPanel(grid); for(intcol=0;col<4;col++) for(introw=0;row<but_Names.length;row++){ but[row][col]=newJButton(but_Names[row][col]); but[row][col].setFont(newjava.awt.Font("隸書",20,20)); but[row][col].addActionListener(newMyEvent()); but_Pan.add(but[row][col]); } con.add(but_Pan,BorderLayout.CENTER); JLabelletfLabel=newJLabel(); JLabelrightLabel=newJLabel(); letfLabel.setPreferredSize(newDimension(9,0)); rightLabel.setPreferredSize(newDimension(9,0)); JMenuBarmenuBar=newJMenuBar(); JMenudoMenu=newJMenu("操作"); JMenuItemmenudo=newJMenuItem("操作提示"); menudo.addActionListener(newActionListener(){ @Override publicvoidactionPerformed(ActionEvente){ JOptionPane.showOptionDialog(null,"友情提示:\n"+"每操作完一次后都要按C鍵清空!\n","操作提示", JOptionPane.DEFAULT_OPTION,JOptionPane.INFORMATION_MESSAGE,null,null,null); } }); doMenu.add(menudo); JMenuaboutMenu=newJMenu("關(guān)于"); JMenuItemmenuAbout=newJMenuItem("關(guān)于Calculator"); aboutMenu.add(menuAbout); menuBar.add(doMenu); menuBar.add(aboutMenu); f.setJMenuBar(menuBar); con.add(letfLabel,BorderLayout.WEST); con.add(rightLabel,BorderLayout.EAST); f.setLocation(300,100); f.setVisible(true); } publicstaticvoidmain(String[]args){ newCalculator(); }}Postfix.java:packagecal;/*表達(dá)式的求值*其中包括了括號(hào)、加、減、乘、除、power這幾種運(yùn)算方式*/importjava.util.Stack;publicclassPostfix{ publicstaticStringconverToPostfix(Stringinfix){ StringBufferpostfix=newStringBuffer(); Stack<Character>operatorStack=newStack<Character>(); intcharacterCount=infix.length(); chartopOperator; for(intindex=0;index<characterCount;index++){ booleandone=false; charnextCharactor=infix.charAt(index); if(isVariable(nextCharactor)){ while(isVariable(nextCharactor)){ postfix=postfix.append(nextCharactor); index++; if(index<characterCount) nextCharactor=infix.charAt(index); else break; } postfix=postfix.append('#'); index--; } else{ switch(nextCharactor){ case'^': operatorStack.push(nextCharactor); break; case'+': case'-': case'*': case'/': while(!done&&!operatorStack.isEmpty()){ topOperator=operatorStack.peek(); if(getPrecedence(nextCharactor)<=getPrecedence(topOperator)){ postfix=postfix.append(topOperator); operatorStack.pop(); } else done=true; } operatorStack.push(nextCharactor); break; case'(': operatorStack.push(nextCharactor); break; case')': topOperator=operatorStack.pop(); while(topOperator!='('){ postfix=postfix.append(topOperator); topOperator=operatorStack.pop(); } break; default: break; } } } while(!operatorStack.isEmpty()){ topOperator=operatorStack.pop(); postfix=postfix.append(topOperator); } returnpostfix.toString(); } publicstaticintgetPrecedence(charoperator){ switch(operator){ case'(':case')':return0; case'+':case'-':return1; case'*':case'/':return2; case'^':return3; } return-1; } publicstaticbooleanisVariable(charcharacter){ returnCharacter.isDigit(character); } publicstaticfloatevaluateInfix(Stringinfix){ Stack<Float>valueStack=newStack<Float>(); intlength=infix.length(); intstep=0; while(step<length){ charnextCharactor=infix.charAt(step); switch(nextCharactor){ case'^': case'+': case'-': case'*': case'/': floatoperandTwo=valueStack.pop(); floatoperandOne=valueStack.pop(); Floatresult; if(nextCharactor=='^') result=(float)Math.pow(operandOne,operandTwo); elseif(nextCharactor=='+') result=operandOne+operandTwo; elseif(nextCharactor=='-'){ result=operandOne-operandTwo; } elseif(nextCharactor=='*') result=operandOne*operandTwo; else result=operandOne/operandTwo; valueStack.push(result); break; default: Stringtmp=newString(); tmp=""; while(isVariable(nextCharactor)){ tmp=tmp+nextCharactor; step++; if(step<length) nextCharactor=infix.charAt(step); else break; } inttmp_Result=Integer.parseInt(tmp); valueStack.push((float)tmp_Result); break; } step++; } returnvalueStack.peek(); }}實(shí)驗(yàn)題2:用一個(gè)窗口,該窗口為BorderLayout布局。窗口的中心添加一個(gè)Panel容器:pCenter,pCenter的布局是7行7列的GridLayout布局,pCenter的中放置49個(gè)標(biāo)簽,用來(lái)顯示日歷。窗口北面添加一個(gè)Panel容器pNorth,其布局是FlowLayout布局,pNorth放置兩個(gè)按鈕:nextMonth和previousMonth按鈕,單擊nextMonth,可以顯示當(dāng)前月的下一個(gè)月的日歷;單擊previousMonth按鈕,可以顯示當(dāng)前月的上一個(gè)月的日歷。窗口的南面添加一個(gè)Panel容器pSouth,其布局是FlowLayout布局,pSouth中放置一個(gè)標(biāo)簽用來(lái)顯示一些信息。Calendar_Main.java:packageCalendar;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.*;publicclasscalendar_Main{ classMyEventimplementsActionListener{ @Override publicvoidactionPerformed(ActionEvente){ intmonth_Temp=month; intyear_Temp=year; intnum; if(e.getActionCommand()=="上月"){ if(month==1){ month=12; year--; } else month--; num=Year.days(year,month); flag=7-(num-flag)%7; } elseif(e.getActionCommand()=="下月"){ if(month==12){ month=1; year++; } else month++; num=Year.days(year_Temp,month_Temp); flag=(num+flag-7)%7; } num=Year.days(year,month); intj=1; for(inti=1;i<7;i++) for(intp=0;p<7;p++) label[i][p].setText(""); for(inti=flag;i<7;i++) label[1][i].setText(""+j++); inttemp=(num+flag-7)/7; introw=2; for(;row<temp+2;row++) for(inti1=0;i1<7;i1++){ label[row][i1].setText(""+j); j++; } temp=(num+flag-7)%7; for(inti1=0;i1<temp;i1++,j++) label[row][i1].setText(""+j); info.setText("日歷:"+year+"年"+month+"月"); } } privateintyear=2007; privateintmonth=10; privateintflag=1; privateJFramef=newJFrame("calendar"); privateJLabelinfo=newJLabel("日歷:"+year+"年"+month+"月"); privateJLabel[][]label=newJLabel[7][7]; publiccalendar_Main(){ JPanelpCenter=newJPanel(); pCenter.setLayout(newGridLayout(7,7)); label[0][0]=newJLabel("日",JLabel.CENTER); label[0][0].setBorder(BorderFactory.createTitledBorder("")); pCenter.add(label[0][0]); label[0][1]=newJLabel("一",JLabel.CENTER); label[0][1].setBorder(BorderFactory.createTitledBorder("")); pCenter.add(label[0][1]); label[0][2]=newJLabel("二",JLabel.CENTER); label[0][2].setBorder(BorderFactory.createTitledBorder("")); pCenter.add(label[0][2]); label[0][3]=newJLabel("三",JLabel.CENTER); label[0][3].setBorder(BorderFactory.createTitledBorder("")); pCenter.add(label[0][3]); label[0][4]=newJLabel("四",JLabel.CENTER); label[0][4].setBorder(BorderFactory.createTitledBorder("")); pCenter.add(label[0][4]); label[0][5]=newJLabel("五",JLabel.CENTER); label[0][5].setBorder(BorderFactory.createTitledBorder("")); pCenter.add(label[0][5]); label[0][6]=newJLabel("六",JLabel.CENTER); label[0][6].setBorder(BorderFactory.createTitledBorder("")); pCenter.add(label[0][6]); for(inti=1;i<7;i++) for(intj=0;j<7;j++){ label[i][j]=newJLabel(); label[i][j].setHorizontalAlignment(JLabel.CENTER); pCenter.add(label[i][j]); } intj=1; for(inti=flag;i<7;i++,j++) label[1][i].setText(""+j); for(inti=0;i<3;i++) for(intp=0;p<7;p++){ label[i+2][p].setText(""+j); j++; } for(inti=0;i<4;i++,j++) label[5][i].setText(""+j); f.add(pCenter,BorderLayout.CENTER); JPanelpNorth=newJPanel(); pNorth.setLayout(newFlowLayout()); JButtonpreviousMonth=newJButton("上月"); Fontfont=newFont("隸書",15,15); previousMonth.setFont(font); pNorth.add(previousMonth); previousMonth.addActionListener(newMyEvent()); JButtonnextMonth=newJButton("下月"); nextMonth.setFont(font); pNorth.add(nextMonth); f.add(pNorth,BorderLayout.NORTH); nextMonth.addActionListener(newMyEvent()); JPanelpSouth=newJPanel(); pSouth.setLayout(newFlowLayout()); info.setFont(font); pSouth.add(info); f.add(pSouth,BorderLayout.SOUTH); f.setLocation(200,100); f.setSize(300,300); f.setVisible(true); } publicstaticvoidmain(String[]args){ newcalendar_Main(); }}Year.java:packageCalendar;publicclassYear{ privatestaticintday[][]={{31,29,31,30,31,30,31,31,30,31,30,31}, {31,28,31,30,31,30,31,31,30,31,30,31}}; publicstaticintisLeap(intyear){ if(year%400==0||(year%100!=0&&year%4==0)) return0; else return1; } publicstaticintdays(intyear,intmonth){ returnday[isLeap(year)][month-1]; }}實(shí)驗(yàn)題3實(shí)現(xiàn)如圖6.2所示的布局方式功能:前兩個(gè)文本框輸入整型數(shù)據(jù)。第三個(gè)文本框存放前兩個(gè)文本框數(shù)據(jù)之和。要求如下:第一個(gè)文本框的數(shù)據(jù)是[100,200],如果超出該范圍彈出對(duì)話框提示用戶。彈出提示對(duì)話框的時(shí)刻是光標(biāo)離開(kāi)第一個(gè)文本框時(shí)。packageSum;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclasssum_Main{ classMyEventextendsFocusAdapter{ JTextFieldtmp=null; @Override publicvoidfocusLost(FocusEvente){ if(e.getSource()==add1){ tmp=(JTextField)e.getSource(); num1=Integer.parseInt(tmp.getText()); if(num1<100||num1>200) JOptionPane.showOptionDialog(null,"數(shù)據(jù)范圍[100,200],請(qǐng)重新輸入.....\n","友情提示", JOptionPane.DEFAULT_OPTION,JOptionPane.INFORMATION_MESSAGE,null,null,null); } elseif(e.getSource()==add2){ tmp=(JTextField)e.getSource(); num2=Integer.parseInt(tmp.getText()); inttemp; temp=num1+num2; sum.setText(String.valueOf(temp)); } else{} } } privateJFramef=newJFrame("SUM"); privateJTextFieldadd1=newJTextField("0"); privateJTextFieldadd2=newJTextField("0"); privateJTextFieldsum=newJTextField
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度高校教師高級(jí)職稱聘用協(xié)議5篇
- 2025年二手車買賣數(shù)據(jù)安全及隱私保護(hù)協(xié)議3篇
- 2025年度二零二五年度體育用品店租賃及銷售合同范本4篇
- 2025版美容美發(fā)店員工福利待遇與晉升管理合同4篇
- 對(duì)公金融產(chǎn)品的多場(chǎng)景創(chuàng)新研究
- 2025年度校園車位租賃及管理服務(wù)合同樣本3篇
- 2024水電工程設(shè)計(jì)與施工一體化合同范本3篇
- 2025年度專業(yè)廚房設(shè)備維修保養(yǎng)服務(wù)合同11篇
- 2025年度鋁扣板裝飾工程材料供應(yīng)合同范本3篇
- 個(gè)人借款用于二零二四年度創(chuàng)業(yè)投資合同3篇
- 工會(huì)換屆公示文件模板
- 江蘇省南京市協(xié)同體七校2024-2025學(xué)年高三上學(xué)期期中聯(lián)合考試英語(yǔ)試題答案
- 青島版二年級(jí)下冊(cè)三位數(shù)加減三位數(shù)豎式計(jì)算題200道及答案
- GB/T 12723-2024單位產(chǎn)品能源消耗限額編制通則
- GB/T 16288-2024塑料制品的標(biāo)志
- 麻風(fēng)病防治知識(shí)課件
- 干部職級(jí)晉升積分制管理辦法
- TSG ZF003-2011《爆破片裝置安全技術(shù)監(jiān)察規(guī)程》
- 2024年代理記賬工作總結(jié)6篇
- 電氣工程預(yù)算實(shí)例:清單與計(jì)價(jià)樣本
- VOC廢氣治理工程中電化學(xué)氧化技術(shù)的研究與應(yīng)用
評(píng)論
0/150
提交評(píng)論