版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
§5Java圖形用戶界面設(shè)計§5.1實驗目的、內(nèi)容及性質(zhì)掌握Java的GUI設(shè)計技術(shù),掌握AWT和Swing的應用技巧。實驗性質(zhì):驗證、必做實驗學時:2學時§5.2問題及思考最常見的AWT以及Swing控件用法。幾個常見布局總結(jié)區(qū)分容器控件和一般非容器控件Java事件幾種關(guān)鍵組成局部以及事件處理流程§5.3實驗指導Swing例如/*需要哪些組件,如何布局?*/importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassMyFrmextendsJFrame{//從JFrame繼承/*聲明界面需要使用的控件*/ JLabellbl_name=newJLabel("用戶名"); JLabellbl_pwd=newJLabel("密碼"); JTextFieldtxt_name=newJTextField(); JPasswordFieldtxt_pwd=newJPasswordField(); JButtonbtn_OK=newJButton("登陸"); JButtonbtn_Cancel=newJButton("取消"); /*在構(gòu)造函數(shù)中將控件放置在JFrame上*/ publicMyFrm(){ /*獲取當前Frame的內(nèi)容面板*/JPaneljp=(JPanel)this.getContentPane(); /*設(shè)置內(nèi)容面板的布局Layout*/ jp.setLayout(newGridLayout(3,2)); jp.add(lbl_name);jp.add(txt_name); jp.add(lbl_pwd);jp.add(txt_pwd); jp.add(btn_OK);jp.add(btn_Cancel); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } publicstaticvoidmain(Stringarg[]){ /*純Java樣式顯示窗體*/ JFrame.setDefaultLookAndFeelDecorated(true); /*實例化當前窗體類*/ MyFrmfrm=newMyFrm(); frm.setSize(200,200); frm.setVisible(true); }}2、常用布局1)、流布局:FlowLayout從左到右,自上而下方式在容器中排列,控件的大小不會隨容器大小變化.容器.setLayout(newFlowLayout(FlowLayout.LEFT));2)、網(wǎng)格布局:GridLayout按照指定行數(shù)與列數(shù),將容器分成大小相等的單元格每個單元格放置一個控件.不能將控件放在指定單元格容器.setLayout(newGridLayout(3,4,10,15));3)、邊界布局:BorderLayout將容器分成東、西、南、北、中五個局部容器.setLayout(newBorderLayout());窗口的內(nèi)容面板默認布局就是邊界布局。容器.add(控件,BorderLayout.NORTH);4)、混合布局:使用JPanel,將多個布局組合在一起使用JPaneljp=(JPanel)this.getContentPane();for(inti=0;i<btn.length;i++)btn[i]=newJButton("btn"+i); JPaneljp1=newJPanel();//默認布局為FlowLayout jp1.setLayout(newGridLayout(2,2)); for(inti=0;i<4;i++) jp1.add(btn[i]); JPaneljp2=newJPanel();//默認布局為FlowLayoutfor(inti=0;i<4;i++) jp2.add(btn[i+4]);5)、絕對布局null:以坐標定位容器.setLayout(null);每個控件在放置在容器之前,必須設(shè)置其邊界setBounds(x,y,width,height);btn.setBounds(10,100,30,60);3、Swing例如Grid布局importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassGridLayoutDemoextendsJFrame{privateJButtonbuttons[];privateStringnames[]={"one","two","three","four","five","six"};publicGridLayoutDemo(){super("GridLayoutDemo");JPanelcontainer=(JPanel)this.getContentPane();container.setLayout(newGridLayout(3,2));//createandaddbuttonsbuttons=newJButton[names.length];for(intcount=0;count<names.length;count++){buttons[count]=newJButton(names[count]);container.add(buttons[count]);}this.setSize(300,150);this.setVisible(true);}publicstaticvoidmain(Stringargs[]){GridLayoutDemoapplication=newGridLayoutDemo();}}//endclassGridLayoutDemo4、常用事件根本組成:1)、事件源EventSource:能夠觸發(fā)事件控件如:JButton,JTextField,JFrame,JComboBox,....2)、事件Event:ActionEvent,KeyEvent,WindowEvent,TextEvent,...3)、事件偵聽者Listener(接口)ActionListener,WindowListener,...classAimplementsActionListener{publicvoidactionPerformed(ActionEvente){....}}Alis=newA();4)、事件處理函數(shù)publicvoidactionPerformed(ActionEvente){....}事件流程:事件源觸發(fā)事件-->事件源偵聽者接收事件-->自動調(diào)用相應事件處理函數(shù).編程模板:classMyFrmextendsJFrameimplementsActionListener{JButtonbtn=newJButton("OK");...publicMyFrm(){...btn.addActionListner(this);...}publicvoidactionPerformed(ActionEvente){....if(e.getSource()==btn){}}}Java事件處理例如:importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassMyFrmextendsJFrameimplementsActionListener{ /*界面中需要的組件作為屬性聲明*/ JTextFieldtxt=newJTextField(10); JLabellbl=newJLabel("姓名"); JButtonbtn=newJButton("查詢"); /*組件在構(gòu)造函數(shù)中放置在窗體JFrame上*/ publicMyFrm(){ /*獲取JFrame的內(nèi)容面板ContentPane,控件放在該面板上*/ JPaneljp=(JPanel)this.getContentPane(); /*設(shè)置面板布局Layout,如何放?*/ jp.setLayout(newFlowLayout()); jp.add(lbl); jp.add(txt); jp.add(btn);/*為事件源加一個偵聽者*/ btn.addActionListener(this); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }/*事件處理方法*/publicvoidactionPerformed(ActionEvente){ JOptionPane.showMessageDialog(this,"btn點擊");} publicstaticvoidmain(Stringarg[]){ JFrame.setDefaultLookAndFeelDecorated(true);//設(shè)置純Java樣式 MyFrmfrm=newMyFrm(); frm.setSize(400,300); frm.setVisible(true); }}注意:在做以下題目前仔細閱讀第一個例如,徹底弄懂Swing界面設(shè)計§5.4實踐編程1、調(diào)試運行Swing例如2、調(diào)試運行Java事件處理例如依據(jù)題1、2,編寫如下界面當用戶點擊〞ClickMe〞按鈕,顯示消息對話框,消息為〞ClickMe按鈕被點擊〞。packageEx5_3;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassMyFrmextendsJFrameimplementsActionListener{ JButtonbtn=newJButton("ClickMe");publicMyFrm(){ JPaneljp=(JPanel)this.getContentPane(); jp.setLayout(newFlowLayout()); jp.add(btn);btn.addActionListener(this);this.setTitle("ActionEvent");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }publicvoidactionPerformed(ActionEvente){ JOptionPane.showMessageDialog(this,"ClickMe按鈕被點擊"); }}packageEx5_3;importjavax.swing.*;importjava.awt.*;import.*;publicclassTest{publicstaticvoidmain(String[]args){ MyFrmfrm=newMyFrm(); frm.setSize(400,300); frm.setVisible(true); }}4、編寫一個程序?qū)崿F(xiàn)用戶登錄界面當用戶登錄按下確定鍵,判斷用戶是否錄入了用戶名與密碼,如果沒有按或用戶名不為admin密碼不為1234都需要提示錯誤。packageEx5_4;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassMyFrmextendsJFrameimplementsActionListener{ JLabellbl_name=newJLabel("用戶名"); JLabellbl_pwd=newJLabel("密碼"); JTextFieldtxt_name=newJTextField(); JPasswordFieldtxt_pwd=newJPasswordField(); JButtonbtn_OK=newJButton("登陸"); JButtonbtn_Cancel=newJButton("取消");publicMyFrm(){ JPaneljp=(JPanel)this.getContentPane(); jp.setLayout(newGridLayout(3,2,10,5)); jp.add(lbl_name);jp.add(txt_name); jp.add(lbl_pwd);jp.add(txt_pwd); jp.add(btn_OK);jp.add(btn_Cancel);this.setTitle("登陸");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);btn_OK.addActionListener(this); }publicvoidactionPerformed(ActionEvente){ Stringuname=txt_name.getText(); Stringupwd=txt_pwd.getText();if(uname.equals("")||upwd.equals("")) JOptionPane.showMessageDialog(this,"用戶名或密碼未輸入!");elseif(!uname.equals("admin")||!upwd.equals("1234")) JOptionPane.showMessageDialog(this,"用戶名或密碼輸入錯誤!");elseJOptionPane.showMessageDialog(this,"用戶名或密碼輸入正確!"); }}packageEx5_4;importjavax.swing.*;importjava.awt.*;import.*;publicclassTest{publicstaticvoidmain(String[]args){ JFrame.setDefaultLookAndFeelDecorated(true); MyFrmfrm=newMyFrm(); frm.setSize(400,200); frm.setVisible(true); }}5、利用適宜的布局和Swing控件完成下題按照界面使用相應控件與適宜的布局完成下題,要求按生成隨機數(shù)按紐產(chǎn)生三個隨機整數(shù)0到100之間,按計算平均數(shù)按紐計算平均值,如下圖,初始界面參考:intx=(Math.random()*41+60);產(chǎn)生隨機數(shù)txt1.setText(x+〞〞);將隨機數(shù)賦予文本框txt1packageEx5_5;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassMyFrmextendsJFrameimplementsActionListener{ JLabellbl=newJLabel("隨機數(shù)字一"); JLabellb2=newJLabel("隨機數(shù)字二"); JLabellb3=newJLabel("隨機數(shù)字三"); JLabellb4=newJLabel("三數(shù)平均值"); JTextFieldtxt1=newJTextField(); JTextFieldtxt2=newJTextField(); JTextFieldtxt3=newJTextField(); JTextFieldtxt4=newJTextField(); JButtonbtn_start=newJButton("生成隨機數(shù)"); JButtonbtn_average=newJButton("計算平均數(shù)");publicMyFrm(){ JPaneljp=(JPanel)this.getContentPane(); jp.setLayout(newGridLayout(5,2,10,5)); jp.add(lbl);jp.add(txt1); jp.add(lb2);jp.add(txt2); jp.add(lb3);jp.add(txt3); jp.add(lb4);jp.add(txt4); jp.add(btn_start);jp.add(btn_average);this.setTitle("三個隨機數(shù)字");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);btn_start.addActionListener(this);btn_average.addActionListener(this); }publicvoidactionPerformed(ActionEvente){if(e.getSource()==btn_start){intx=(int)(Math.random()*41+60);txt1.setText(x+"");inty=(int)(Math.random()*41+60);txt2.setText(y+"");intz=(int)(Math.random()*41+60);txt3.setText(z+""); }if(e.getSource()==btn_average){doublex=Double.valueOf(txt1.getText());doubley=Double.valueOf(txt2.getText());doublez=Double.valueOf(txt3.getText());doublet=(x+y+z)/3;txt4.setText(t+""); } }}packageEx5_5;importjavax.swing.*;importjava.awt.*;import.*;publicclassTest{publicstaticvoidmain(String[]args){ MyFrmfrm=newMyFrm(); frm.setSize(400,200); frm.setVisible(true); }}6.編寫程序?qū)崿F(xiàn)如下界面,實現(xiàn)事件如果按下座位i就在控制臺中顯示“座位i被選中〞例如按下“座位0“,那么輸出座位0被選中〞packageEx5_6;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassMyFrmextendsJFrameimplementsActionListener{ JButtonbtn0=newJButton("講臺"); JButtonbtn1=newJButton("座位1"); JButtonbtn2=newJButton("座位2"); JButtonbtn3=newJButton("座位3"); JButtonbtn4=newJButton("座位4"); JButtonbtn5=newJButton("座位5"); JButtonbtn6=newJButton("座位6");publicMyFrm(){ JPaneljp=(JPanel)this.getContentPane(); JPaneljp1=newJPanel(); jp1.setLayout(newGridLayout()); jp1.add(btn0); jp.add(jp1,BorderLayout.NORTH); JPaneljp2=newJPanel(); jp2.setLayout(newGridLayout(2,3)); jp2.add(btn1);jp2.add(btn2);jp2.add(btn3); jp2.add(btn4);jp2.add(btn5);jp2.add(btn6); jp.add(jp2,BorderLayout.CENTER);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);btn1.addActionListener(this);btn2.addActionListener(this);btn3.addActionListener(this);btn4.addActionListener(this);btn5.addActionListener(this);btn6.addActionListener(this); }publicvoidactionPerformed(ActionEvente){if(e.getSource()==btn1) System.out.println("座位1被選中");if(e.getSource()==btn2) System.out.println("座位2被選中");if(e.getSource()==btn3) System.out.println("座位3被選中");if(e.getSource()==btn4) System.out.println("座位4被選中");if(e.getSource()==btn5) System.out.println("座位5被選中");if(e.getSource()==btn6) System.out.println("座位6被選中"); }publicstaticvoidmain(String[]args){ MyFrmfrm=newMyFrm(); frm.setSize(1000,500); frm.setVisible(true); }}7完成以下窗體制作參考:這一題考慮使用組合布局,將上面控件放置在JPanel上,再將JPanel放到內(nèi)容面板的中間。下面四個按鈕先放在某JPanel再放置在內(nèi)容面板的South局部packageEx5_7;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassLoginFrmextendsJFrameimplementsActionListener{ JLabellb_name=newJLabel("姓名:"); JLabellb_sex=newJLabel("性別:"); JLabellb_profession=newJLabel("身份:"); JLabellb_unit=newJLabel("單位:"); JLabellb_IDnum=newJLabel("證件號碼:"); JLabellb_rDate=newJLabel("注冊日期:");JLabellb_eDate=newJLabel("有效日期:"); JTextFieldtxt_name=newJTextField();JComboBoxcmb_sex=newJComboBox();JComboBoxcmb_profession=newJComboBox();JComboBoxcmb_unit=newJComboBox(); JTextFieldtxt_IDnum=newJTextField(); JTextFieldtxt_rDate=newJTextField(); JTextFieldtxt_eDate=newJTextField(); JButtonbtn_ADD=newJButton("添加"); JButtonbtn_DEL=newJButton("刪除"); JButtonbtn_BACK=newJButton("撤銷"); JButtonbtn_ESC=newJButton("退出");publicLoginFrm(){ JPaneljp=(JPanel)this.getContentPane(); JPaneljp1=newJPanel(); jp1.setLayout(newGridLayout(7,2,5,10)); jp1.add(lb_name);jp1.add(txt_name); jp1.add(lb_sex);jp1.add(cmb_sex);cmb_sex.addItem("男");cmb_sex.addItem("女"); jp1.add(lb_profession);jp1.add(cmb_profession);cmb_profession.addItem("學生");cmb_profession.addItem("教師");cmb_profession.addItem("職工");cmb_profession.setEditable(true); jp1.add(lb_unit);jp1.add(cmb_unit);cmb_unit.addItem("計算機系");cmb_unit.addItem("工商管理系");cmb_unit.setEditable(true);cmb_profession.setEditable(true); jp1.add(lb_IDnum);jp1.add(txt_IDnum); jp1.add(lb_rDate);jp1.add(txt_rDate); jp1.add(lb_eDate);jp1.add(txt_eDate); jp.add(jp1,BorderLayout.CENTER); JPaneljp2=newJPanel(); jp2.setLayout(newGridLayout(1,4)); jp2.add(btn_ADD);jp2.add(btn_DEL);jp2.add(btn_BACK);jp2.add(btn_ESC); jp.add(jp2,BorderLayout.SOUTH);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setTitle("圖書證辦理");btn_ADD.addActionListener(this);btn_DEL.addActionListener(this);btn_BACK.addActionListener(this);btn_ESC.addActionListener(this); }publicvoidactionPerformed(ActionEvente){ }publicstaticvoidmain(String[]args){ JFrame.setDefaultLookAndFeelDecorated(true); LoginFrmfrm=newLoginFrm(); frm.setSize(500,400); frm.setVisible(true); }}8、完成以下窗體制作〔使用null布局〕packageEx5_8;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassLoginFrmextendsJFrameimplementsActionListener{ JLabellb_title=newJLabel("學生注冊查詢"); JLabellb_name=newJLabel("姓名"); JLabellb_snum=newJLabel("學號"); JLabellb_unit=newJLabel("系別"); JLabellb_major=newJLabel("專業(yè)"); JLabellb_address=newJLabel("地址"); JTextFieldtxt_name=newJTextField("jTextField1"); JTextFieldtxt_snum=newJTextField("jTextField1"); JTextFieldtxt_unit=newJTextField("jTextField1"); JTextFieldtxt_major=newJTextField("jTextField1"); JTextFieldtxt_address=newJTextField("jTextField1"); JButtonbtn_ADD=newJButton("添加"); JButtonbtn_INQ=newJButton("查詢"); JButtonbtn_BACK=newJButton("取消");publicLoginFrm(){ JPaneljp=(JPanel)this.getContentPane(); jp.setLayout(null); jp.add(lb_name);jp.add(lb_snum);jp.add(lb_address);jp.add(lb_major);jp.add(lb_title); jp.add(lb_unit);jp.add(txt_address);jp.add(txt_major);jp.add(txt_name);jp.add(txt_snum); jp.add(txt_unit);jp.add(btn_ADD);jp.add(btn_BACK);jp.add(btn_INQ);lb_title.setBounds(210,5,200,50);lb_snum.setBounds(80,80,100,20);txt_snum.setBounds(120,80,100,20);lb_name.setBounds(280,80,100,20);txt_name.setBounds(320,80,100,20);lb_unit.setBounds(80,120,100,20);txt_unit.setBounds(120,120,100,20);lb_major.setBounds(280,120,100,20);txt_major.setBounds(320,120,100,20);lb_address.setBounds(80,160,100,20);txt_address.setBounds(120,160,300,20);btn_ADD.setBounds(60,220,80,30);btn_INQ.setBounds(210,220,80,30);btn_BACK.setBounds(360,220,80,30);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);btn_ADD.addActionListener(this);btn_INQ.addActionListener(this);btn_BACK.addActionListener(this); }publicvoidactionPerformed(ActionEvente){ }publicstaticvoidmain(String[]args){ LoginFrmfrm=newLoginFrm(); frm.setSize(500,400); frm.setVisible(true); }}9、運用Swing控件完成下題packageEx5_9;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclas
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度網(wǎng)絡(luò)安全防護策略設(shè)計與實施合同2篇
- 2024無息借款合同模板:助力鄉(xiāng)村振興戰(zhàn)略3篇
- 2024年賽事專項贊助合同模板版B版
- 電梯加裝施工方案
- 2024年研究生插班生就讀權(quán)益書3篇
- 沉井現(xiàn)場預制施工方案
- 2025年技術(shù)專利權(quán)轉(zhuǎn)讓與產(chǎn)業(yè)鏈協(xié)同發(fā)展服務(wù)合同3篇
- 2024濕地公園水面腳踏船租賃服務(wù)合同
- 2024年隱私條款:聲頻數(shù)據(jù)保密協(xié)議2篇
- 旋挖鉆機鉆孔施工方案
- 湖南2025年湖南機電職業(yè)技術(shù)學院合同制教師招聘31人歷年參考題庫(頻考版)含答案解析
- 黑龍江省哈爾濱市第六中學2025屆高考數(shù)學三模試卷含解析
- 【MOOC】數(shù)字邏輯設(shè)計及應用-電子科技大學 中國大學慕課MOOC答案
- GB 30254-2024高壓三相籠型異步電動機能效限定值及能效等級
- 廠房(鋼結(jié)構(gòu)框架)工程施工組織設(shè)計施工組織設(shè)計DOC
- 人教版新目標九年級英語全冊教案
- 幼兒園教學課件——我是哥哥姐姐
- 國內(nèi)異形盾構(gòu)機分析課件
- 喚醒孩子內(nèi)驅(qū)力家校共育家庭教育PPT課件(帶內(nèi)容)
- 合成氣精脫硫催化劑的研究報告
- 滾裝客船貨物的積載綁扎系固分解課件
評論
0/150
提交評論