(教案)Java程序設(shè)計精編教程(第3版)-教案48學(xué)時-第11章_第1頁
(教案)Java程序設(shè)計精編教程(第3版)-教案48學(xué)時-第11章_第2頁
(教案)Java程序設(shè)計精編教程(第3版)-教案48學(xué)時-第11章_第3頁
(教案)Java程序設(shè)計精編教程(第3版)-教案48學(xué)時-第11章_第4頁
(教案)Java程序設(shè)計精編教程(第3版)-教案48學(xué)時-第11章_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PAGEPAGE23授課內(nèi)容學(xué)時分配教學(xué)方法與手段進度計劃(周次)課堂講授(學(xué)時)上機實踐(學(xué)時)Java入門2201Java應(yīng)用程序的基本結(jié)構(gòu)4221-2標識符與簡單的數(shù)據(jù)類型運算符、表達式與語句2202類與對象8623~4子類與繼承4405接口與實現(xiàn)4226內(nèi)部類與異常類2207常用實用類4407-8輸入、輸出流2208組件及事件處理6429-10Java多線程機制44010-11Java網(wǎng)絡(luò)編程22011JDBC數(shù)據(jù)庫操作42212總學(xué)時=SUM(ABOVE)48=SUM(ABOVE)38=SUM(ABOVE)10

各章教學(xué)實施計劃章節(jié)題目第11章組件及事件處理11.1節(jié)-11.4.2節(jié)學(xué)時2教學(xué)目的、要求(分了解、理解、掌握三個層次):1、了解JavaSwing概述。2、掌握常用組(JFrame類、菜單條、菜單、菜單項)件與布局。3、掌握事件處理的模式。4、掌握ActionEvent事件的處理。教學(xué)內(nèi)容(包括基本內(nèi)容、重點、難點):JavaSwing概述。常用組(JFrame類、菜單條、菜單、菜單項)件與布局。事件處理的模式。ActionEvent事件的處理。重點:窗口JFrame常用方法、常用組件與布局、事件處理模式。難點:事件處理模式(11.4.2)。討論、思考題、作業(yè):P251習題111題-4題預(yù)習第11章11.4.3-11.7節(jié)參考書目(含參考書、文獻等)具體內(nèi)容:參考書對應(yīng)章節(jié)

課堂教學(xué)實施計劃第14課教學(xué)過程設(shè)計:復(fù)習分鐘;授新課95分鐘討論5分鐘;其它分鐘授課類型(請打√):理論課√討論課□實驗課□習題課□其它□教學(xué)方式(請打√):講授√討論□示教□指導(dǎo)□其它□教學(xué)手段(請打√):多媒體模型□實物□掛圖□音像□其它√主要內(nèi)容JavaSwing概述。常用組(JFrame類、菜單條、菜單、菜單項)件與布局。事件處理的模式。ActionEvent事件的處理。重點:窗口JFrame常用方法、常用組件與布局、事件處理模式。難點:事件處理模式(11.4.2)?!?1.1JavaSwing概述通過圖形用戶界面(GUI:GraphicsUserInterface),用戶和程序之間可以方便地進行交互。Java的Swing工具包中包含了許多類來支持GUI設(shè)計。如:按鈕、菜單、列表、文本框等組件類,同時它還包含窗口、面板等容器類。javax.swing包提供了功能更為強大的用來設(shè)計GUI的類。在學(xué)習GUI編程時,必須要很好的掌握兩個概念:容器類和組件類。javax.swing包中JComponent類是java.awt包中Container類的一個直接子類、是java.awt包中Component類的一個間接子類,學(xué)習GUI編程主要是學(xué)習掌握使用Component類的一些重要的子類及其使用方法。以下是GUI編程經(jīng)常提到的基本知識點。Java把Component類的子類或間接子類創(chuàng)建的對象稱為一個組件.Java把Container的子類或間接子類創(chuàng)建的對象稱為一個容器.可以向容器添加組件。Container類提供了一個public方法:add(),一個容器可以調(diào)用這個方法將組件添加到該容器中。容器調(diào)用removeAll()方法可以移掉容器中的全部組件;調(diào)用remove(Componentc)方法可以移掉容器中參數(shù)c指定的組件。注意到容器本身也是一個組件,因此可以把一個容器添加到另一個容器中實現(xiàn)容器的嵌套?!?1.2窗口Java提供的JFrame類的實例是一個底層容器,即通常所稱的窗口。其他組件必須被添加到底層容器中,以便借助這個地層容器和操作系統(tǒng)進行信息交互。JFrame類是Container類的間接子類。當需要一個窗口時,可使用JFrame或其子類創(chuàng)建一個對象。窗口也是一個容器,可以向窗口添加組件。需要注意的是,窗口默認地被系統(tǒng)添加到顯示器屏幕上,因此不允許將一個窗口添加到另一個容器中。§11.2.1JFrame常用方法JFrame構(gòu)造方法:JFrame()創(chuàng)建一個無標題的窗口。JFrame(Strings)創(chuàng)建標題為s的窗口。常用方法:publicvoidsetBounds(inta,intb,intwidth,intheight設(shè)置窗口的初始位置是(a,b),即距屏幕左面a個像素、距屏幕上方b個像素;窗口的寬是width,高是height。publicvoidsetSize(intwidth,intheight)設(shè)置窗口的大小。publicvoidsetLocation(intx,inty)設(shè)置窗口的位置,默認位置是(0,0)。publicvoidsetVisible(booleanb)設(shè)置窗口是否可見,窗口默認是不可見的。publicvoidsetResizable(booleanb)設(shè)置窗口是否可調(diào)整大小,默認可調(diào)整大小。publicvoiddispose()撤消當前窗口,并釋放當前窗口所使用的資源。等。例子1Example11_1.javaimportjavax.swing.*;importjava.awt.*;publicclassExample11_1{publicstaticvoidmain(Stringargs[]){JFramewindow1=newJFrame("第一個窗口");JFramewindow2=newJFrame("第二個窗口");Containercon=window1.getContentPane();con.setBackground(Color.yellow);//設(shè)置窗口的背景色window1.setBounds(60,100,188,108);window2.setBounds(260,100,188,108);window1.setVisible(true);window1.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);window2.setVisible(true);window2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}§11.2.2菜單條、菜單、菜單項菜單條、菜單、菜單項是窗口常用的組件,菜單放在菜單條里,菜單項放在菜單里。1.菜單條2.菜單3.菜單項4.嵌入子菜單5.菜單上的圖標例子2Example11_2.javapublicclassExample11_2{publicstaticvoidmain(Stringargs[]){WindowMenuwin=newWindowMenu("帶菜單的窗口",20,30,200,190);}}WindowMenu.javaimportjavax.swing.*;importjava.awt.event.InputEvent;importjava.awt.event.KeyEvent;importstaticjavax.swing.JFrame.*;publicclassWindowMenuextendsJFrame{JMenuBarmenubar;JMenumenu,subMenu;JMenuItemitem1,item2;publicWindowMenu(){}publicWindowMenu(Strings,intx,inty,intw,inth){init(s);setLocation(x,y);setSize(w,h);setVisible(true);setDefaultCloseOperation(DISPOSE_ON_CLOSE);}voidinit(Strings){setTitle(s);menubar=newJMenuBar();menu=newJMenu("菜單");subMenu=newJMenu("軟件項目");item1=newJMenuItem("Java話題",newImageIcon("a.gif"));item2=newJMenuItem("動畫話題",newImageIcon("b.gif"));item1.setAccelerator(KeyStroke.getKeyStroke('A'));item2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));menu.add(item1);menu.addSeparator();menu.add(item2);menu.add(subMenu);//把subMenu菜單做為menu的一個菜單項subMenu.add(newJMenuItem("汽車銷售系統(tǒng)",newImageIcon("c.gif")));subMenu.add(newJMenuItem("農(nóng)場信息系統(tǒng)",newImageIcon("d.gif")));menubar.add(menu);setJMenuBar(menubar);}}§11.3常用組件與布局可以使用JComponent的子類JTextField創(chuàng)建各種組件。利用組件可以完成應(yīng)用程序與用戶的交互及事件處理等。§11.3.1常用組件1.文本框:由JComponent的子類JTextField創(chuàng)建文本框。2.文本區(qū):由JComponent的子類JTexArea創(chuàng)建文本區(qū)。3.按鈕:由JComponent的子類JButton類用來創(chuàng)建按鈕。4.標簽:由JComponent的子類JLabel類用來創(chuàng)建標簽。5.選擇框:由JComponent的子類JCheckBox類用來創(chuàng)建選擇框6.單選按鈕:由JComponent的子類JRadioButton類用來創(chuàng)建單項選擇框。7.下拉列表:由JComponent的子類JComboBox類用來創(chuàng)建下拉列表。8.密碼框:由JComponent的子類JPasswordField創(chuàng)建密碼框.例子3Example11_3.javapublicclassExample11_3{publicstaticvoidmain(Stringargs[]){ComponentInWindowwin=newComponentInWindow();win.setBounds(100,100,310,260);win.setTitle("常用組件");}}ComponentInWindow.javaimportjava.awt.*;importjavax.swing.*;publicclassComponentInWindowextendsJFrame{JTextFieldtext;JButtonbutton;JCheckBoxcheckBox1,checkBox2,checkBox3;JRadioButtonradio1,radio2;ButtonGroupgroup;JComboBoxcomBox;JTextAreaarea;publicComponentInWindow(){init();setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}voidinit(){setLayout(newFlowLayout());add(newJLabel("文本框:"));text=newJTextField(10);add(text);add(newJLabel("按鈕:"));button=newJButton("確定");add(button);add(newJLabel("選擇框:"));checkBox1=newJCheckBox("喜歡音樂");checkBox2=newJCheckBox("喜歡旅游");checkBox3=newJCheckBox("喜歡籃球");add(checkBox1);add(checkBox2);add(checkBox3);add(newJLabel("單選按鈕:"));group=newButtonGroup();radio1=newJRadioButton("男");radio2=newJRadioButton("女");group.add(radio1);group.add(radio2);add(radio1);add(radio2);add(newJLabel("下拉列表:"));comBox=newJComboBox();comBox.addItem("音樂天地");comBox.addItem("武術(shù)天地");comBox.addItem("象棋樂園");add(comBox);add(newJLabel("文本區(qū):"));area=newJTextArea(6,12);add(newJScrollPane(area));}}§11.3.2常用容器JComponent是Container的子類,因此JComponent子類創(chuàng)建的組件也都是容器。相對于JFrame底層容器,本節(jié)提到的容器被習慣地稱做中間容器,中間容器必須被添加到底層容器中才能發(fā)揮作用。1.JPanel面板2.滾動窗格JScrollPane3.拆分窗格JSplitPane4.JLayeredPane分層窗格§11.3.3常用布局當把組件添加到容器中時,希望控制組件在容器中的位置,這就需要學(xué)習布局設(shè)計的知識。我們將分別介紹java.awt包中的FlowLayout、BorderLayout、CardLayout、GridLayout布局類。容器可以使用方法:setLayout(布局對象);來設(shè)置自己的布局,控制組件在容器中的位置1FlowLayout布局,是JPanel型容器的默認布局。(重點介紹)1)創(chuàng)建布局對象FlowLayoutflow=newFlowLayout();2)容器con使用布局對象con.setLayout(flow);3)con可以使用Container類提供的add方法將組件順序地添加到容器中;FlowLayout布局對象調(diào)用相應(yīng)的方法可以重新設(shè)置布局的對齊方式等.2BorderLayout布局(簡單介紹)BorderLayout布局是Window型容器的默認布局。使用BorderLayout布局的容器con,可以使用add方法將一個組件b添加到中心區(qū)域:con.add(b,BorderLayout.CENTER);或con.add(BorderLayour.CENTER,b);3CardLayout布局(簡單介紹)使用CardLayout的一般步驟如下:1)創(chuàng)建CardLayout對象CardLayoutcard=newCardLayout();2)為容器設(shè)置布局con.setLayout(card);3)容器調(diào)用add(Strings,Componentb)將組件b加入容器,并給出了顯示該組件的代號s。4)布局對象card用CardLayout類提供的show()方法,顯示容器con中組件代號為s的組件:card.show(con,s);4GridLayout布局(建議學(xué)生自主學(xué)習)11.3.4選項卡窗格1)用JTabbedPane創(chuàng)建選項卡窗格,例如:JTabbedPanecard=newJTabbedPane(JTabbedPane.LEFT);選項卡窗格是輕容器,默認布局是CardLayout布局。(2)向選項卡窗格添加組件使用add(Stringtext,Componentc);方法將組件c添加到JTabbedPane窗格中,并指定和組件c對應(yīng)的選項卡的文本提示是text。例子4Example11_4.javaimportjavax.swing.*;importjava.awt.*;classExample11_4extendsJFrame{JTabbedPanep;publicExample11_4(){setBounds(100,100,500,300);setVisible(true);p=newJTabbedPane(JTabbedPane.LEFT);p.add("觀看FlowLayout",newFlowLayoutJPanel());p.add("觀看GridLayout",newGridLayoutJPanel());p.add("觀看BorderLayout",newBorderLayoutJPanel());p.validate();add(p,BorderLayout.CENTER);validate();setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);}publicstaticvoidmain(Stringargs[]){newExample11_4();}}FlowLayoutJPanel.javaimportjavax.swing.*;importjava.awt.*;publicclassFlowLayoutJPanelextendsJPanel{FlowLayoutJPanel(){add(newJLabel("FlowLayout布局的面板"));add(newJButton(newImageIcon("dog.jpg")));add(newJScrollPane(newJTextArea(12,15)));}}GridLayoutJPanel.javaimportjavax.swing.*;importjava.awt.*;publicclassGridLayoutJPanelextendsJPanel{GridLayoutJPanel(){GridLayoutgrid=newGridLayout(12,12);//網(wǎng)格布局setLayout(grid);Labellabel[][]=newLabel[12][12];for(inti=0;i<12;i++){for(intj=0;j<12;j++){label[i][j]=newLabel();if((i+j)%2==0)label[i][j].setBackground(Color.black);elselabel[i][j].setBackground(Color.white);add(label[i][j]);}}}}BorderLayoutJPanel.javaimportjavax.swing.*;importjava.awt.*;classBorderLayoutJPanelextendsJPanel{JButtonbSouth,bNorth,bEast,bWest;JTextAreabCenter;BorderLayoutJPanel(){setLayout(newBorderLayout());bSouth=newJButton("南");bNorth=newJButton("北");bEast=newJButton("東");bWest=newJButton("西");bCenter=newJTextArea("中心");add(bNorth,BorderLayout.NORTH);add(bSouth,BorderLayout.SOUTH);add(bEast,BorderLayout.EAST);add(bWest,BorderLayout.WEST);add(bCenter,BorderLayout.CENTER);validate();}}5null空布局(建議學(xué)生自主學(xué)習)§11.4處理事件(重點、難點)學(xué)習組件除了要熟悉組件的屬性和功能外,一個更重要的方面是學(xué)習怎樣處理組件上發(fā)生的界面事件。當用戶在文本框中鍵入文本后按回車鍵、單擊按鈕、在一個下拉式列表中選擇一個條目等操作時,都發(fā)生界面事件。程序有時需對發(fā)生的事件作出反應(yīng),來實現(xiàn)特定的任務(wù),例如,用戶單擊一個名字叫“確定”或名字叫“取消”的按鈕,程序可能需要作出不同的處理?!?1.4.1事件處理模式在學(xué)習處理事件時,必須很好地掌握事件源、監(jiān)視器、處理事件的接口這三個概念。1.事件源2.監(jiān)視器3.處理事件的接口§11.4.2ActionEvent事件(重點,難點)1.ActionEvent事件源文本框、按鈕、菜單項、密碼框和單選按鈕都可以觸發(fā)ActionEvent事件,即都可以成為ActionEvent事件的事件源。2.注冊監(jiān)視器Java規(guī)定能觸發(fā)ActionEvent事件的組件使用方法addActionListener(ActionListenerlisten)將實現(xiàn)ActionListener接口的類的實例注冊為事件源的監(jiān)視器。3.ActionListener接口方法publicvoidactionPerformed(ActionEvente)。4.ActionEvent類中的方法ActionEvent類有如下常用的方法:publicObjectgetSource()publicStringgetActionCommand()ActionEvent例子5Example11_5.javapublicclassExample11_5{publicstaticvoidmain(Stringargs[]){WindowActionEventwin=newWindowActionEvent();win.setBounds(100,100,310,260);win.setTitle("處理ActionEvent事件");}}WindowActionEvent.javaimportjava.awt.*;importjavax.swing.*;publicclassWindowActionEventextendsJFrame{JTextFieldtext;ReaderListenlistener;publicWindowActionEvent(){init();setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}voidinit(){setLayout(newFlowLayout());text=newJTextField(10);listener=newReaderListen();text.addActionListener(listener);//text是事件源,listener是監(jiān)視器add(text);}}ReaderListen.javaimportjava.awt.event.*;publicclassReaderListenimplementsActionListener{publicvoidactionPerformed(ActionEvente){Stringstr=e.getActionCommand();System.out.println(str+"的長度:"+str.length());}}例子6Example11_6.javapublicclassExample11_6{publicstaticvoidmain(Stringargs[]){WindowActionEventwin=newWindowActionEvent();win.setBounds(100,100,460,360);win.setTitle("處理ActionEvent事件");}}WindowActionEvent.javaimportjava.awt.*;importjavax.swing.*;publicclassWindowActionEventextendsJFrame{JTextFieldinputText;JTextAreatextShow;JButtonbutton;PoliceListenlistener;publicWindowActionEvent(){init();setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}voidinit(){setLayout(newFlowLayout());inputText=newJTextField(10);button=newJButton("讀取");textShow=newJTextArea(5,18);listener=newPoliceListen();listener.setJTextField(inputText);listener.setJTextArea(textShow);inputText.addActionListener(listener);//inputText是事件源,listener是監(jiān)視器button.addActionListener(listener);//button是事件源,listener是監(jiān)視器add(inputText);add(button);add(newJScrollPane(textShow));}}PoliceListen.javaimportjava.awt.event.*;importjavax.swing.*;publicclassPoliceListenimplementsActionListener{JTextFieldtextInput;JTextAreatextShow;publicvoidsetJTextField(JTextFieldtext){textInput=text;}publicvoidsetJTextArea(JTextAreaarea){textShow=area;}publicvoidactionPerformed(ActionEvente){Stringstr=textInput.getText();textShow.append(str+"的長度:"+str.length()+"\n");}}本次課總結(jié)(1)掌握怎樣將其他組件嵌套到JFrame窗體中。(2)掌握各種組件的特點和使用方法。(3)本章重點掌握組件上的事件處理,Java處理事件的模式是:事件源、監(jiān)視器、處理事件的接口。作業(yè)P251習題111題-4題預(yù)習第11章11.4.3-11.7節(jié)本次課結(jié)束

各章教學(xué)實施計劃章節(jié)題目第11章組件及事件處理11.4.3-11.7節(jié)學(xué)時2教學(xué)目的、要求(分了解、理解、掌握三個層次):1、掌握事件處理的模式。2、使用MVC結(jié)構(gòu)。3、掌握對話框。4、了解樹組件與表格組件、按鈕綁定到鍵盤。5、打印組件、發(fā)布GUI程序。教學(xué)內(nèi)容(包括基本內(nèi)容、重點、難點):處理事件使用MVC結(jié)構(gòu)對話框發(fā)布GUI程序重點:事件處理模式(以ItemEvent事件為例)。難點:匿名類實例或窗口做監(jiān)視器(11.4.8)。討論、思考題、作業(yè):P251習題115題預(yù)習第12章12.1-12.4節(jié)參考書目(含參考書、文獻等)具體內(nèi)容:參考書對應(yīng)章節(jié)

課堂教學(xué)實施計劃第15課教學(xué)過程設(shè)計:復(fù)習5分鐘;授新課90分鐘討論5分鐘;其它分鐘授課類型(請打√):理論課√討論課□實驗課□習題課□其它□教學(xué)方式(請打√):講授√討論□示教□指導(dǎo)□其它□教學(xué)手段(請打√):多媒體模型□實物□掛圖□音像□其它√主要內(nèi)容處理事件使用MVC結(jié)構(gòu)對話框發(fā)布GUI程序重點:事件處理模式(以ItemEvent事件為例)。難點:匿名類實例或窗口做監(jiān)視器(11.4.8)。§11.4.3ItemEvent事件(重點講解,使學(xué)生進一步理解事件處理)1.ItemEvent事件源選擇框、下拉列表都可以觸發(fā)ItemEvent事件。2.注冊監(jiān)視器3.ItemListener接口方法publicvoiditemStateChanged(ItemEvente)。例子7Example11_7.javapublicclassExample11_7{publicstaticvoidmain(Stringargs[]){WindowItemEventwin=newWindowItemEvent();win.setBounds(100,100,460,360);win.setTitle("處理ItemEvent事件");}}WindowItemEvent.javaimportjava.awt.*;importjavax.swing.*;importjava.io.*;publicclassWindowItemEventextendsJFrame{JComboBoxchoice;JTextAreatextShow;PoliceListenlistener;publicWindowItemEvent(){init();setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}voidinit(){setLayout(newFlowLayout());choice=newJComboBox();choice.addItem("請選擇文件:");Filedir=newFile(".");FileAcceptfileAccept=newFileAccept();fileAccept.setExtendName("java");String[]fileName=dir.list(fileAccept);for(Stringname:fileName){choice.addItem(name);}textShow=newJTextArea(9,30);listener=newPoliceListen();listener.setJComboBox(choice);listener.setJTextArea(textShow);choice.addItemListener(listener);//choice是事件源,listener是監(jiān)視器add(choice);add(newJScrollPane(textShow));}classFileAcceptimplementsFilenameFilter{//內(nèi)部類privateStringextendName;publicvoidsetExtendName(Strings){extendName="."+s;}publicbooleanaccept(Filedir,Stringname){returnname.endsWith(extendName);}}}PoliceListen.javaimportjava.awt.event.*;importjava.io.*;importjavax.swing.*;publicclassPoliceListenimplementsItemListener{JComboBoxchoice;JTextAreatextShow;publicvoidsetJComboBox(JComboBoxbox){choice=box;}publicvoidsetJTextArea(JTextAreaarea){textShow=area;}publicvoiditemStateChanged(ItemEvente){textShow.setText(null);try{StringfileName=choice.getSelectedItem().toString();Filefile=newFile(fileName);FileReaderinOne=newFileReader(file);BufferedReaderinTwo=newBufferedReader(inOne);Strings=null;while((s=inTwo.readLine())!=null){textShow.append(s+"\n");}inOne.close();inTwo.close();}catch(Exceptionee){textShow.append(ee.toString());}}}§11.4.4DocumentEvent事件(在11.4.3的基礎(chǔ)上簡單講解)1.DocumentEvent事件源2.注冊監(jiān)視器3.DocumentListener接口DocumentListener接口在javax.swing.event包中,該接口中有三個方法:publicvoidchangedUpdate(DocumentEvente)publicvoidremoveUpdate(DocumentEvente)publicvoidinsertUpdate(DocumentEvente)例子8Example11_8.javapublicclassExample11_8{publicstaticvoidmain(Stringargs[]){WindowDocumentwin=newWindowDocument();win.setBounds(10,10,460,360);win.setTitle("處理DocumentEvent事件");}}WindowTextSort.javaimportjava.awt.*;importjavax.swing.event.*;importjavax.swing.*;publicclassWindowDocumentextendsJFrame{JTextAreainputText,showText;PoliceListenlisten;WindowDocument(){init();setLayout(newFlowLayout());setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}voidinit(){inputText=newJTextArea(6,8);showText=newJTextArea(6,8);add(newJScrollPane(inputText));add(newJScrollPane(showText));listen=newPoliceListen();listen.setInputText(inputText);listen.setShowText(showText);(inputText.getDocument()).addDocumentListener(listen);//向文檔注冊監(jiān)視器}}PoliceListen.javaimportjava.awt.event.*;importjava.io.*;importjavax.swing.event.*;importjavax.swing.*;importjava.util.*;publicclassPoliceListenimplementsDocumentListener{JTextAreainputText,showText;publicvoidsetInputText(JTextAreatext){inputText=text;}publicvoidsetShowText(JTextAreatext){showText=text;}publicvoidchangedUpdate(DocumentEvente){Stringstr=inputText.getText();//空格、數(shù)字和符號(!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~)組成的正則表達式:Stringregex="[\\s\\d\\p{Punct}]+";Stringwords[]=str.split(regex);Arrays.sort(words);//按字典序從小到大排序showText.setText(null);for(Strings:words)showText.append(s+",");}publicvoidremoveUpdate(DocumentEvente){changedUpdate(e);}publicvoidinsertUpdate(DocumentEvente){changedUpdate(e);}}§11.4.5MouseEvent事件——§11.4.9事件總結(jié)按48學(xué)時的計劃安排,這部分內(nèi)容由學(xué)生自主學(xué)習。在前面的基礎(chǔ)上,是可以完成的?!?1.5使用MVC結(jié)構(gòu)(簡單介紹)(這是一個需要學(xué)習、體驗、理解、提高的過程,不能全部在課堂解決的。)模型-視圖-控制器(Model-View-Controller),簡稱為MVC。MVC是一種先進的設(shè)計結(jié)構(gòu),其目的是以會話形式提供方便的GUI支持。MVC是一種通過三個不同部分構(gòu)造一個軟件或組件的理想辦法:模型(model)用于存儲數(shù)據(jù)的對象。視圖(view)為模型提供數(shù)據(jù)顯示的對象??刂破?controller)處理用戶的交互操作,對于用戶的操作作出響應(yīng),讓模型和視圖進行必要的交互,即通過視圖修改、獲取模型中的數(shù)據(jù);當模型中的數(shù)據(jù)變化時,讓視圖更新顯示。例子13Example11_13.javapublicclassExample11_13{publicstaticvoidmain(Stringargs[]){WindowTrianglewin=newWindowTriangle();win.setTitle("使用MVC結(jié)構(gòu)");win.setBounds(100,100,420,260);}}WindowTriangle.javaimportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassWindowTriangleextendsJFrameimplementsActionListener{Triangletriangle;//數(shù)據(jù)對象JTextFieldtextA,textB,textC;//數(shù)據(jù)對象的視圖JTextAreashowArea;//數(shù)據(jù)對象的視圖JButtoncontrolButton;//控制器對象WindowTriangle(){init();setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}voidinit(){triangle=newTriangle();textA=newJTextField(5);textB=newJTextField(5);textC=newJTextField(5);showArea=newJTextArea();controlButton=newJButton("計算面積");JPanelpNorth=newJPanel();pNorth.add(newJLabel("邊A:"));pNorth.add(textA);pNorth.add(newJLabel("邊B:"));pNorth.add(textB);pNorth.add(newJLabel("邊C"));pNorth.add(textC);pNorth.add(controlButton);controlButton.addActionListener(this);add(pNorth,BorderLayout.NORTH);add(newJScrollPane(showArea),BorderLayout.CENTER);}publicvoidactionPerformed(ActionEvente){try{doublea=Double.parseDouble(textA.getText().trim());doubleb=Double.parseDouble(textB.getText().trim());doublec=Double.parseDouble(textC.getText().trim());triangle.setA(a);//更新數(shù)據(jù)triangle.setB(b);triangle.setC(c);Stringarea=triangle.getArea();showArea.append("三角形"+a+","+b+","+c+"的面積:");showArea.append(area+"\n");//更新視圖}catch(Exceptionex){showArea.append("\n"+ex+"\n");}}}Triangle.javapublicclassTriangle{doublesideA,sideB,sideC,area;booleanisTriange;publicStringgetArea(){if(isTriange){doublep=(sideA+sideB+sideC)/2.0;area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));returnString.valueOf(area);}else{return"無法計算面積";}}publicvoidsetA(doublea){sideA=a;if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideC+sideB>sideA)isTriange=true;elseisTriange=false;}publicvoidsetB(doubleb){sideB=b;if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideC+sideB>sideA)isTriange=true;elseisTriange=false;}publicvoidsetC(doublec){sideC=c;if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideC+sideB>sideA)

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論