Java語(yǔ)言程序設(shè)計(jì)教案56學(xué)時(shí)第9章_第1頁(yè)
Java語(yǔ)言程序設(shè)計(jì)教案56學(xué)時(shí)第9章_第2頁(yè)
Java語(yǔ)言程序設(shè)計(jì)教案56學(xué)時(shí)第9章_第3頁(yè)
Java語(yǔ)言程序設(shè)計(jì)教案56學(xué)時(shí)第9章_第4頁(yè)
Java語(yǔ)言程序設(shè)計(jì)教案56學(xué)時(shí)第9章_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

進(jìn)度計(jì)

學(xué)時(shí)教學(xué)方法與手段

授課內(nèi)容劃

分配

課堂講授(學(xué)時(shí))上機(jī)實(shí)踐(學(xué)時(shí))(周次)

Java語(yǔ)后入IJ

標(biāo)識(shí)符、關(guān)鍵字和數(shù)據(jù)類(lèi)型6421?2

運(yùn)算符、表達(dá)式和語(yǔ)句

類(lèi)與對(duì)象141042?5

子類(lèi)與繼承6425-7

接口與實(shí)現(xiàn)4227-8

內(nèi)部類(lèi)與異常類(lèi)2208

常用實(shí)用類(lèi)6429-10

組件及事件處理64210-11

輸入、輸出流22012

JDBC與MySQL數(shù)據(jù)庫(kù)42212-13

Java多線(xiàn)程機(jī)制22013

Java網(wǎng)絡(luò)的基本知識(shí)22014

總結(jié)22014

總學(xué)時(shí)564016

各章教學(xué)實(shí)施計(jì)劃

章節(jié)題目第9章組件及事件處理學(xué)時(shí)

2

9.1節(jié)-9.4.2節(jié)

教學(xué)目的、要求(分了解、理解、掌握三個(gè)層次):

1、了解JavaSwing概述。

2、掌握常用組(JFrame類(lèi)、菜單條、菜單、菜單項(xiàng))件與布局。

3、掌握事件處理的模式。

4、掌握ActionEvent事件、ItemEvent事件的處理。

教學(xué)內(nèi)容(包括基本內(nèi)容、重點(diǎn)、難點(diǎn)):

基本內(nèi)容:

?JavaSwing概述。

?常用組(JFrame類(lèi)、菜單條、菜單、菜單項(xiàng))件與布局。

?事件處理的模式。

?ActionEvent事件、ItemEvent事件的處理。

重點(diǎn):窗口JFrame常用方法、常用組件與布局、事件處理模式。

難點(diǎn):事件處理模式(9.4.2)。

討論、思考題、作業(yè):

習(xí)題92(1),(3)

預(yù)習(xí)第9章9.4.3—9.12節(jié)

參考書(shū)目(含參考書(shū)、文獻(xiàn)等)具體內(nèi)容:

參考書(shū)對(duì)應(yīng)章節(jié)

課堂教學(xué)實(shí)施計(jì)劃

教學(xué)過(guò)程設(shè)計(jì):復(fù)習(xí)________一分鐘;授新課95一分鐘

第15課

討論.5一分鐘;其它_________一分鐘

授課類(lèi)型(請(qǐng)打J):理論課J討論課口實(shí)驗(yàn)課口習(xí)題課口其它口

教學(xué)方式(請(qǐng)打J):講授J討論口示教口指導(dǎo)口其它口

教學(xué)手段(請(qǐng)打J):多媒體模型口實(shí)物口掛圖口音像口其它J

主要內(nèi)容

基本內(nèi)容:

?JavaSwing概述。

?常用組(JFrame類(lèi)、菜單條、菜單、菜單項(xiàng))件與布局。

?事件處理的模式。

?ActionEvent事件、ItemEvent事件的處理。

重點(diǎn):窗口JFrame常用方法、常用組件與布局、事件處理模式。

難點(diǎn):事件處理模式(942)。

第9章組件及事件處理

§9.1JavaSwing概述

通過(guò)圖形用戶(hù)界面(GUI:GraphicsUserInterface),用戶(hù)和程序之間可以方便地進(jìn)行交

互。Java的Swing工具包中包含了許多類(lèi)來(lái)支持GUI設(shè)計(jì)。如:按鈕、菜單、列表、文本框等

組件類(lèi),同時(shí)它還包含窗口、面板等容器類(lèi)。

javax.swing包提供了功能更為強(qiáng)大的用來(lái)設(shè)計(jì)GUI的類(lèi)。

在學(xué)習(xí)GUI編程時(shí),必須要很好的掌握兩個(gè)概念:容器類(lèi)和組件類(lèi)。

javax.swing包中JComponent類(lèi)是java,awt包中Container類(lèi)的一個(gè)直接子類(lèi)、是

java,awt包中Component類(lèi)的一個(gè)間接子類(lèi),學(xué)習(xí)GUI編程主要是學(xué)習(xí)掌握使用Component類(lèi)

的一些重要的子類(lèi)及其使用方法。

以下是GUI編程經(jīng)常提到的基本知識(shí)點(diǎn)。

Java把Component類(lèi)的子類(lèi)或間接子類(lèi)創(chuàng)建的對(duì)象稱(chēng)為一個(gè)組件.

Java把Container的子類(lèi)或間接子類(lèi)創(chuàng)建的對(duì)象稱(chēng)為一個(gè)容器.

可以向容器添加組件。Container類(lèi)提供了一個(gè)public方法:add(),一個(gè)容器可以調(diào)用

這個(gè)方法將組件添加到該容器中。

容器調(diào)用removeAll。方法可以移掉容器中的全部組件;調(diào)用remove(Componentc)方法可

以移掉容器中參數(shù)c指定的組件。

注意到容器本身也是一個(gè)組件,因此可以把一個(gè)容器添加到另一個(gè)容器中實(shí)現(xiàn)容器的嵌套。

每當(dāng)容器添加新的組件或移掉組件時(shí),應(yīng)當(dāng)讓容器調(diào)用validate。方法,以保證容器中的

組件能正確顯示出來(lái)

如:

JFramef=newJFrame();

JButtonbutton=newJButton("確定”)

f.add(button);

f.remove(button);

§9.2窗口

Java提供的JFrame類(lèi)的實(shí)例是一個(gè)底層容器,即通常所稱(chēng)的窗口。其他組件必須被添加

到底層容器中,以便借助這個(gè)地層容器和操作系統(tǒng)進(jìn)行信息交互。

JFrame類(lèi)是Container類(lèi)的間接子類(lèi)。當(dāng)需要一個(gè)窗口時(shí),可使用JFrame或其子類(lèi)創(chuàng)建

一個(gè)對(duì)象。

窗口也是一個(gè)容器,可以向窗口添加組件。需要注意的是,窗口默認(rèn)地被系統(tǒng)添加到顯示

器屏幕上,因此不允許將一個(gè)窗口添加到另一個(gè)容器中。

§9.2.1JFrame常用方法

JFrame構(gòu)造方法:

JFrame()創(chuàng)建一個(gè)無(wú)標(biāo)題的窗口。

JFrame(Strings)創(chuàng)建標(biāo)題為s的窗口。

常用方法:

publicvoidsetBounds(inta,intb,intwidth,intheight設(shè)置窗口的初始位置是

(a,b),即距屏幕左面a個(gè)像素、距屏幕上方b個(gè)像素;窗口的寬是width,高是height。

publicvoidsetSize(intwidth,intheight)設(shè)置窗口的大小。

publicvoidsetLocation(intx,inty)設(shè)置窗口的位置,默認(rèn)位置是(0,0)。

publicvoidsetVisible(booleanb)設(shè)置窗口是否可見(jiàn),窗口默認(rèn)是不可見(jiàn)的。

publicvoidsetResizable(booleanb)設(shè)置窗口是否可調(diào)整大小,默認(rèn)可調(diào)整大小。

publicvoiddispose()撤消當(dāng)前窗口,并釋放當(dāng)前窗口所使用的資源。

等。

例子1

Example9_l.java

importjavax.swing,

importjava.awt.*;

publicclassExample9_l{

publicstaticvoidmain(Stringargs[]){

JFramewindowl=newJFram一(”第一個(gè)窗口”);

JFramewindow2=newJFram一(”第二個(gè)窗口”);

Containercon=windowl.getContentPane();

con.setBackground(Color.yellow);//設(shè)置窗口的背景色

windowl.setBounds(60,100,188,108);//設(shè)置窗口在屏幕上的位置及大小

window2.setBounds(260,100,188,108);

windowl.setVisible(true);

windowl.setDefaultCloseOperation(JFrame.D工SPOSE_ON_CLOSE);

//釋放當(dāng)前窗口

window2.setVisible(true);

window2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退

出程序

)

}

§9.2.2菜單條、菜單、菜單項(xiàng)

菜單條、菜單、菜單項(xiàng)是窗口常用的組件,菜單放在菜單條里,菜單項(xiàng)放在菜單里。

1.菜單條

2.菜單

3.菜單項(xiàng)

4.嵌入子菜單

5.菜單上的圖標(biāo)

例子2在主類(lèi)的main方法中用JFrame的子類(lèi)創(chuàng)建一個(gè)含有菜單的窗口,效果如圖9.3所

Zj\o

Example9_2.java

publicclassExample9_2{

publicstaticvoidmain(Stringargs[]){

WindowMenuwin=newWindowMenu(”帶菜單的窗口”,20,30,200,190);

)

)

WindowMenu.java

importjavax.swing.

importjava.awt.event.InputEvent;

importjava.awt.event.KeyEvent;

importstaticjavax.swing?JFrame.*;

publicclassWindowMenuextendsJFrame{//JFrame的子類(lèi)

JMenuBarmenubar;

JMenumenu,subMenu;

JMenuItemiteml,item2;

publicWindowMenu(){}

publicWindowMenu(Strings,intx,intyzintw,inth){

init(s);

setLocation(x,y);

setSize(w,h);

setVisible(true);

setDefaultCloseOperation(DISPOSE_ON_CLOSE);

)

voidinit(Strings){

setTitle(s);

menubar=newJMenuBar();

menu=newJM一rrn(“菜單”);

subMenu=newJMenu("軟件項(xiàng)目;

iteml=newJMenu工tem("Java話(huà)題”,newImageIcon("a.giff,));

item2=newJMenu工tem(“動(dòng)畫(huà)話(huà)題",newImageicon("b.gifn));

iteml?setAccelerator(Keystroke.getKeyStroke(1A1));

item2.setAccelerator(Keystroke.getKeyStroke(KeyEvent.VK_SZ

InputEvent.CTRL_MASK));

menu.add(iteml);

menu.addSeparator();

menu.acid(item2);

menu.add(subMenu);

subMenu.add(newJMenuItem(“汽車(chē)銷(xiāo)售系統(tǒng)”,newImageicon("c.gifn)));

subMenu.add(newJMenuItem("農(nóng)場(chǎng)信息系統(tǒng)”,newImageicon(Hd.gifn)));

menubar.add(menu);

setJMenuBar(menubar);

)

)

§9.3常用組件與布局

可以使用JComponent的子類(lèi)JTextField創(chuàng)建各種組件。利用組件可以完成應(yīng)用程序與用

戶(hù)的交互及事件處理等。

也可以在命令行窗口反編譯組件即時(shí)查看組件所具有的屬性及常用方法,例如:

C:\>javapjavax.swing.JComponent

也可以查看類(lèi)庫(kù)幫助文檔.例如下載Java類(lèi)庫(kù)幫助文檔:jdk-6-doc.zip。

§9.3.1常用組件

1.文本框:由JComponent的子類(lèi)JTextField創(chuàng)建文本框。

2.文本區(qū):由JComponent的子類(lèi)JTexArea創(chuàng)建文本區(qū)。

3.按鈕:由JComponent的子類(lèi)JButton類(lèi)用來(lái)創(chuàng)建按鈕。

4.標(biāo)簽:由JComponent的子類(lèi)JLabel類(lèi)用來(lái)創(chuàng)建標(biāo)簽。

5.選擇框:由JComponent的子類(lèi)JCheckBox類(lèi)用來(lái)創(chuàng)建選擇框

6.單選按鈕:由JComponent的子類(lèi)JRadioButton類(lèi)用來(lái)創(chuàng)建單項(xiàng)選擇框。

7.下拉列表:由JComponent的子類(lèi)JComboBox類(lèi)用來(lái)創(chuàng)建下拉列表。

8.密碼框:由JComponent的子類(lèi)JPasswordField創(chuàng)建密碼框.

例子3

Example9_3.java

publicclassExample9_3{

publicstaticvoidmain(Stringargs[]){

ComponentInWindowwin=newComponentlnWindow();

win,setBounds(100,100,310,260);

win.setTitle("常用組件”);

)

}

ComponentlnWindow.java

importjava.awt.*;

importjavax.swing.*;

publicclassComponentlnWindowextendsJFrame{

JCheckBoxcheckBoxlzcheckBox2;//選擇框

JRadioButtonradioM,radioF;//單選框

ButtonGroupgroup;

JComboBox<String>comBox;//下拉列表

publicComponentlnWindow(){

init();

setVisible(true);

setDefaultCloseOperation(JFrame?EXIT_ON_CLOSE);

)

voidinit(){

setLayout(newFlowLayout());

comBox=newJComboBox<String>();

checkBoxl=newJCheckBox(“喜歡音樂(lè)”);

checkBox2=newJCh一ckBox(“喜歡旅游”);

group=newButtonGroup();

radioM=newJRadioButton(nM;

radioF=newJRadioButton(“女”);

group.add(radioM);

group.add(radioF);//歸組才能實(shí)現(xiàn)單選

add(checkBoxl);

add(checkBox2);

add(radioM);

add(radioF);

comBox.add工tem(“音樂(lè)天地”);

comBox.add工tem(“武術(shù)天地”);

add(comBox);

§9.3.2常用容器

JComponent是Container的子類(lèi),因此JComponent子類(lèi)創(chuàng)建的組件也都是容器。容器經(jīng)

常用來(lái)添加組件。JFrame是底層容器,本節(jié)提到的容器被習(xí)慣地稱(chēng)做中間容器,中間容器必須

被添加到底層容器中才能發(fā)揮作用。

1.JPanel面板

2.JTabbedPane選項(xiàng)卡窗格

3.滾動(dòng)窗格JScrollPane

4.拆分窗格JSplitPane

5.JLayeredPane分層窗格

§9.3.3常用布局

當(dāng)把組件添加到容器中時(shí),希望控制組件在容器中的位置,這就需要學(xué)習(xí)布局設(shè)計(jì)的知識(shí)。

我們將分別介紹java,awt包中的FlowLayout、BorderLayout>CardLayout>GridLayout

布局類(lèi)和java,swing,border包中的BoxLayout布局類(lèi)。

容器可以使用方法:setLayout(布局對(duì)象);來(lái)設(shè)置自己的布局,控制組件在容器中的位置

FlowLayout布局,是JPanel型容器的默認(rèn)布局。(重點(diǎn)介紹)

BorderLayout布局(簡(jiǎn)單介紹)

CardLayout布局(簡(jiǎn)單介紹)

GridLayout布局(建議學(xué)生自主學(xué)習(xí))

null布局(簡(jiǎn)單介紹)

BoxLayout布局(建議學(xué)生自主學(xué)習(xí))

例子4

Example9_4.java

publicclassExample9_4{

publicstaticvoidmain(Stringargs[]){

newShowLayout();

}

ShowLayout.java

importjava.awt.*;

importjavax.swing.*;

publicclassShowLayoutextendsJFrame{

PanelGridLayoutpannelGrid;//網(wǎng)格布局的面板

PanelNullLayoutpanelNull;//空布局的面板

JTabbedPanep;//選項(xiàng)卡窗格

ShowLayout。{

pannelGrid=newPanelGridLayout();

panelNull=newPanelNullLayout();

p=newJTabbedPane();

p.add(”網(wǎng)格布局的面板”,pannelGrid);

p.add(“空布局的面板“,panelNull);

add(p,BorderLayout.CENTER);

add(newJButton(“窗體是BorderLayout布局”),BorderLayout.NORTH);

add(newJButton(“南”),BorderLayout.SOUTH);

add(newJButton("西"),BorderLayout.WEST);

add(newJButton("東”),BorderLayout.EAST);

setBounds(10,10,570,390);

setVisible(true);

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

validate();

}

PanelGridLayout.java

importjava.awt.*;

importjavax.swing.*;

publicclassPanelGridLayoutextendsJPanel{

PanelGridLayout(){

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);

else

label[i][j].setBackground(Color.white);

adddabel[i][j]);

)

)

}

}

PanelNullLayout.java

importjavax.swing.*;

publicclassPanelNullLayoutextendsJPanel{

JButtonbutton;

JTextFieldtext;

PanelNullLayout(){

setLayout(null);//空布局

button=newJButton("確定”);

text=newJTextField();

add(text);

add(button);

text?setBounds(100,30,90,30);

button.setBounds(190,30,66,30);

)

}

下面的例子5中,有兩個(gè)列型盒式容器boxVOne、boxVTwo和一個(gè)行型盒式容器boxH。將

boxV0ne>boxVTwo添加到boxH中,并在它們之間添加了水平支撐。

例子5

Example9_5.java

publicclassExample9_5{

publicstaticvoidmain(Stringargs[]){

WindowBoxLayoutwin=newWindowBoxLayout();

win.setBounds(100,100,310,260);

win.setTitle(”嵌套盒式布局容器”);

}

)

WindowBoxLayout.java

importjavax.swing.*;

publicclassWindowBoxLayoutextendsJFrame{

BoxboxH;//行式盒

BoxboxVOne,boxVTwo;//列式盒

publicWindowBoxLayout(){

setLayout(newjava.awt.FlowLayout());

init();

setVisible(true);

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

)——

voidinit(){

boxH=Box.createHorizontalBox();

boxV0ne=Box.createVerticalBox();

boxVTwo=Box.createVerticalBox();

boxVOne.add(newJLabel("姓名:M));

boxVOne.add(newJLabel("職業(yè):”));

boxVTwo.add(newJTextField(10));

boxVTwo.add(newJTextField(10));

boxH?add(boxVOne);

boxH.add(Box.createHorizontalStrut(10));

boxH?add(boxVTwo);

add(boxH);

}

)

§9.4處理事件(重點(diǎn))

學(xué)習(xí)組件除了要熟悉組件的屬性和功能外,一個(gè)更重要的方面是學(xué)習(xí)怎樣處理組件上發(fā)生

的界面事件。當(dāng)用戶(hù)在文本框中鍵入文本后按回車(chē)鍵、單擊按鈕、在一個(gè)下拉式列表中選擇一

個(gè)條目等操作時(shí),都發(fā)生界面事件。

程序有時(shí)需對(duì)發(fā)生的事件作出反應(yīng),來(lái)實(shí)現(xiàn)特定的任務(wù),例如,用戶(hù)單擊一個(gè)名字叫“確

定”或名字叫“取消”的按鈕,程序可能需要作出不同的處理。

§9.4.1事件處理模式

在學(xué)習(xí)處理事件時(shí),必須很好地掌握事件源、監(jiān)視器、處理事件的接口這三個(gè)概念。

1.事件源

2.監(jiān)視器

3.處理事件的接口

§9.4.2ActionEvent事件(重點(diǎn),難點(diǎn))

1.ActionEvent事件源

文本框、按鈕、菜單項(xiàng)、密碼框和單選按鈕都可以觸發(fā)ActionEvent事件,即都可以成為

ActionEvent事件的事件源。

2.注冊(cè)監(jiān)視器

Java規(guī)定能觸發(fā)ActionEvent事件的組件使用方法addActionListener(ActionListener

listen)將實(shí)現(xiàn)ActionListener接口的類(lèi)的實(shí)例注冊(cè)為事件源的監(jiān)視器。

3.ActionListener接口

方法publicvoidactionPerformed(ActionEvente)。

4.ActionEvent類(lèi)中的方法

ActionEvent類(lèi)有如下常用的方法:

publicObjectgetSource()

publicStringgetActionCommand()ActionEvent

下面的例子6處理文本框上觸發(fā)的ActionEvent事件。在文本框text中輸入字符串回車(chē),

監(jiān)視器負(fù)責(zé)計(jì)算字符串的長(zhǎng)度,并在命令行窗口顯示字符串的長(zhǎng)度。

例子6

Example9_6.java

publicclassExample9_6{

publicstaticvoidmain(Stringargs[]){

WindowActionEventwin=newWindowActionEvent();

win.setTitle("處理ActionEvent事件”);

win.setBounds(100,100,310,260);

)

)

WindowActionEvent.java

importjava.awt.

importjavax.swing.

importjava.awt.event.*;

publicclassWindowActionEventextendsJFrame{

JTextFieldtext;

ActionListenerlistener;//listener是監(jiān)視器

publicWindowActionEvent(){

setLayout(newFlowLayout());

text=newJTextField(10);

add(text);

listener=newReaderListen();//創(chuàng)建監(jiān)視器

text.addActionListener(listener);//text將listener注冊(cè)為自己的監(jiān)視器

setVisible(true);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

)

}

ReaderListen.java

importjava.awt.event.*;

publicclassReaderListenimplementsActionListener{//負(fù)責(zé)創(chuàng)建監(jiān)視器的類(lèi)

publicvoidactionPerformed(ActionEvente){

Stringstr=e.getActionCommand();//獲取封裝在事件中的“命令"字符串

System.out.printIn(str+n:"+str.length());

)

)

下面例子7中的監(jiān)視器PoliceListen與例子6中的ReaderListen略有不同,PoliceListen

類(lèi)實(shí)現(xiàn)了ActionListerner接口的子接口MyComniand-Listener(我們自己寫(xiě)的一個(gè)接口)。

例子7

Example9_7.java

publicclassExample9_7{

publicstaticvoidmain(Stringargs[]){

WindowActionEventwin=newWindowActionEvent();

PoliceListenpolice=newPoliceListen();//創(chuàng)建監(jiān)視器

win.setMyCommandListener(police);//窗口組合監(jiān)視器

win.setBounds(100,100,460,360);

win.setTitle("處理ActionEvent事件");

}

}

WindowActionEvent.java

importjava.awt.*;

importjavax.swing.

publicclassWindowActionEventextendsJFrame{

JTextFieldinputText;

JTextAreatextshow;

JButtonbutton;

MyCommandListenerlistener;

publicWindowActionEvent(){

init();

setVisible(true);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

)

voidinit(){

setLayout(newFlowLayout());

inputText=newJTextField(10);

button=newJButton(“確定”);

textshow=newJTextArea(9,30);

add(inputText);

add(button);

add(newJScrollPane(textshow));

)

voidsetMyCommandListener(MyCommandListenerlistener){

this.listener=listener;

listener.setJTextField(inputText);

listener.setJTextArea(textshow);

inputText.addActionListener(listener);

//inputText是事件源,listener是監(jiān)視器

button.addActionListener(listener);

//button是事件源,listener是監(jiān)視器

)

}

MyCommandListener.java

importjavax.swing.*;

importjava.awt.event.*;

publicinterfaceMyCommandListenerextendsActionListener{//子接口多給出了2個(gè)方法

publicvoidsetJTextField(JTextFieldtext);

publicvoidsetJTextArea(JTextAreaarea);

)

PoliceListen.java

importjava.awt.event.*;

importjavax.swing.*;

publicclassPoliceListenimplementsMyCommandListener{//負(fù)責(zé)創(chuàng)建監(jiān)視器的類(lèi)

JTextFieldtextinput;

JTextAreatextShow;

publicvoidsetJTextField(JTextFieldtext){

textinput=text;

)

publicvoidsetJTextArea(JTextAreaarea){

textshow=area;

}

publicvoidactionPerformed(ActionEvente){

Stringstr=textInput.getText();

textshow.append(str+”的長(zhǎng)度:n+str.length()+”\n");

}

}

本次課總結(jié)

(1)掌握怎樣將其他組件嵌套到JFrame窗體中。

(2)掌握各種組件的特點(diǎn)和使用方法。

(3)本章重點(diǎn)掌握組件上的事件處理,Java處理事件的模式是:事件源、監(jiān)視器、處理

事件的接口。

作業(yè)

習(xí)題92(1),(3)

預(yù)習(xí)第9章94.3—9.4.10節(jié)

本次課結(jié)束

各章教學(xué)實(shí)施計(jì)劃

章節(jié)題目第9章組件及事件處理

學(xué)時(shí)2

9.4.3節(jié)一9.12節(jié)

教學(xué)目的、要求(分了解、理解、掌握三個(gè)層次):

1、掌握事件處理的模式。

2、使用MVC結(jié)構(gòu)。

3、掌握對(duì)話(huà)框。

4、了解樹(shù)組件與表格組件、按鈕綁定到鍵盤(pán)。

5、打印組件、發(fā)布GUI程序。

教學(xué)內(nèi)容(包括基本內(nèi)容、重點(diǎn)、難點(diǎn)):

基本內(nèi)容:

?處理事件

?使用MVC結(jié)構(gòu)

?對(duì)話(huà)框

?樹(shù)組件與表格組件

?按鈕綁定到鍵盤(pán)

?發(fā)布GUI程序

重點(diǎn):事件處理模式。

難點(diǎn):匿名類(lèi)實(shí)例或窗口做監(jiān)視器(9.4.9)0

討論、思考題、作業(yè):

習(xí)題91(1)-(6)2(2)3⑴-(3)

課后調(diào)試?yán)?9一例子25代碼

預(yù)習(xí)第10章

參考書(shū)目(含參考書(shū)、文獻(xiàn)等)具體內(nèi)容:

參考書(shū)對(duì)應(yīng)章節(jié)

課堂教學(xué)實(shí)施計(jì)劃

教學(xué)過(guò)程設(shè)計(jì):復(fù)習(xí).5一分鐘;授新t果90一分鐘

第16課

討論.5一分鐘;其它一一分鐘

授課類(lèi)型(請(qǐng)打J):理論課J討論課口實(shí)驗(yàn)課口習(xí)題課口其它口

教學(xué)方式(請(qǐng)打J):講授J討論口示教口指導(dǎo)口其它口

教學(xué)手段(請(qǐng)打J):多媒體模型口實(shí)物口掛圖口音像口其它J

主要內(nèi)容

基本內(nèi)容:

?處理事件

?使用MVC結(jié)構(gòu)

?對(duì)話(huà)框

?樹(shù)組件與表格組件

?按鈕綁定到鍵盤(pán)

?發(fā)布GUI程序

重點(diǎn):事件處理模式。

難點(diǎn):匿名類(lèi)實(shí)例或窗口做監(jiān)視器(9.4.9)。

§9.4.3ItemEvent事件(重點(diǎn)講解,使學(xué)生進(jìn)一步理解事件處理)

1.ItemEvent事件源

選擇框、下拉列表都可以觸發(fā)ItemEvent事件。

2.注冊(cè)監(jiān)視器

3.ItemListener接口

方法publicvoiditemStateChanged(ItemEvente)。

例子8

Example9_8.java

publicclassExample9_8{

publicstaticvoidmain(Stringargs[]){

WindowOperationwin=newWindowOperation();

win.setBounds(100,100,390,360);

win.setTitle("簡(jiǎn)單計(jì)算器”);

}

}

WindowOperation.java

importjava.awt.*;

importjavax.swing.*;

importjava.io.*;

publicclassWindowoperationextendsJFrame{

JTextFieldinputNumberOne,inputNumberTwo;

JComboBoxchoiceFuhao;

JTextAreatextshow;

JButtonbutton;

OperatorListeneroperator;//監(jiān)視ItemEvent事件的監(jiān)視器

ComputerListenercomputer;//監(jiān)視ActionEvent事件的監(jiān)視器

publicWindowOperation(){

init();

setVisible(true);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

voidinit(){

setLayout(newFlowLayout());

inputNumberOne=newJTextField(5);

inputNumberTwo=newJTextField(5);

choiceFuhao=newJComboBox();

button=newJButton(“計(jì)算”);

choiceFuhao.add工tem("選擇運(yùn)算符號(hào):");

String[]a={”+“,“一“,“”,“/“};

for(inti=0;i<a.length;i++){

choiceFuhao.additem(a[i]);

)

textshow=newJTextArea(9Z30);

operator=newOperatorListener();

computer=newComputerListener();

operator.setJComboBox(choiceFuhao);

operator.setWorkTogether(computer);

computer.setJTextFieldOne(inputNumberOne);

computer.setJTextFieldTwo(inputNumberTwo);

computer.setJTextArea(textshow);

choiceFuhao.addltemListener(operator);

//choiceFuhao是事件源,operator是監(jiān)視器

button?addActionListener(computer);//button是事件源,computer是監(jiān)視器

add(inputNumberOne);

add(choiceFuhao);

add(inputNumberTwo);

add(button);

add(newJScrollPane(textShow));

)

}

OperatorListener.]ava

importjava.awt.event.*;

importjavax.swing.*;

publicclassOperatorListenerimplementsItemListener{

JComboBoxchoice;

ComputerListenerworkTogether;

publicvoidsetJComboBox(JComboBoxbox){

choice=box;

)

publicvoidsetWorkTogether(ComputerListenercomputer){

workTogether=computer;

)

publicvoiditemStateChanged(ItemEvente){

Stringfuhao=choice.getSelectedltem().toStringO;

workTogether.setFuhao(fuhao);

)

)

ComputerListener.java

importjava.awt.event.*;

importjavax.swing.*;

publicclassComputerListenerimplementsActionListener{

JTextFieldinputNumberOne,inputNumberTwo;

JTextAreatextshow;

Stringfuhao;

publicvoidsetJTextFieldOne(JTextFieldt){

inputNumberOne=t;

}

publicvoidsetJTextFieldTwo(JTextFieldt){

inputNumberTwo=t;

}

publicvoidsetJTextArea(JTextAreaarea){

textshow=area;

}

publicvoidsetFuhao(Strings){

fuhao=s;

)

publicvoidactionPerformed(ActionEvente){

try{

doublenumberl=Double.parseDouble(inputNumberOne.getText());

doublenumber2=Double.parseDouble(inputNumberTwo.getText());

doubleresult=0;

if(fuhao.equals("+")){

result=numberl+number2;

)

elseif(fuhao.equals(H-n)){

result=number1-number2;

)

elseif(fuhao.equals(n*n)){

result=numberl*number2;

)

elseif(fuhao.equals(n/u)){

result=number1/number2;

)

textshow.append(numberl+Hn4-fuhao+,f"+number2+"=n+result+

H\nn);

)

catch(Exceptionexp){

textshow.append(H\n請(qǐng)輸入數(shù)字字符\n”);

}

}

)

§9.4.4DocumentEvent事件(在9.4.3的基礎(chǔ)上簡(jiǎn)單講解)

1.DocumentEvent事件源

2.注冊(cè)監(jiān)視器

3.DocumentListener接口

DocumentListener接口在javax.swing,event包中,該接口中有三個(gè)方法:

publicvoidchangedUpdate(DocumentEvente)

publicvoidremoveUpdate(DocumentEvente)

publicvoidinsertUpdate(DocumentEvente)

例子9

Example9_9.java

publicclassExample9_9{

publicstaticvoidmain(Stringargs[]){

WindowDocumentwin=newWindowDocument();

win.setBounds(100,100,590z500);

win.setTitle(“排序單詞”);

WindowDocument.java

importjava.awt.*;

importjavax.swing.event.*;

importjavax.swing.*;

importjava.awt.event,

publicclassWindowDocumentextendsJFrame{

JTextAreainputText,showText;

JMenuBarmenubar;

JMenumenu;

JMenuItemitemCopy,itemCut,itemPaste;

TextListenertextChangeListener;//inputText的監(jiān)視器

HandleListenerhandleListener;//itemCopy,itamCut,itemPaste的監(jiān)視器

WindowDocument(){

init();

setLayout(newFlowLayout());

setVisible(true);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

)

voidinit(){

inputText=newJTextArea(15,20);

showText=newJTextArea(15z20);

showText.setLineWrap(true);//文本自動(dòng)回行

showText.setWrapStyleWord(true);//文本區(qū)以單詞為界自動(dòng)換行

menubar=newJMenu

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論