




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第七章Swing-I回顧Swing組件中的頂層容器包括哪些?Swing組件的結(jié)構(gòu)?2JFrame、JAppletJFrameContentpaneJPanelJButtonJLabelSwing層次結(jié)構(gòu)3目標掌握SwingGUI組件JLabel、JTextField、JTextArea、JPasswordField、JButton理解事件監(jiān)聽器理解內(nèi)部類和匿名類4GUI設(shè)計步驟(swing)1、創(chuàng)建頂層容器;2、如果是容器JFrame、Japplet、Jdialog,向這些容器中添加組件時必須添加到容器的ContentPane部分(內(nèi)容窗格)。內(nèi)容窗格的默認布局管理器是BorderLayout3、設(shè)置布局管理器4、將swing組件添加到ContentPane中。5JLabel類標簽是用戶不能修改只能查看其內(nèi)容的一種文本顯示區(qū)域,它的作用就是在窗口中進行信息提示或說明。標簽上可以放置字符串、圖形,然后在窗口上顯示該標簽6例:設(shè)計一程序,在用戶圖形界面中用標簽方法實現(xiàn)文字和圖形的提示信息,提示信息“今日有雨”。Classcode\MyJLabel.javaJFramef=newJFrame("標簽");ContainercontentPane=f.getContentPane();
Iconicon=newImageIcon(".\\classcode\\connected_networks.jpg");JLabellabel=newJLabel("今日有雨",icon,JLabel.CENTER);//水平:設(shè)置字符放在標簽圖像的中間。label.setHorizontalTextPosition(JLabel.CENTER);//垂直:設(shè)置字符放在標簽圖像的上面label.setVerticalTextPosition(JLabel.TOP);
contentPane.add(label);//標簽放到內(nèi)容面板上f.pack();f.setSize(300,400);f.setVisible(true);7文字輸入組件的使用在Swing中與文字輸入有關(guān)的組件有:JTextField 該組件為單行文本編輯器JPasswordField 該組件為多行文本編輯器JTextArea 該組件為多行文本編輯器JEditorPane 該組件可顯示多種文件格式JTextPane 該組件可設(shè)置文件各種樣式8例7-11ch7\classcodepublicTextFieldTest(Stringstr){super(str);ContainercontentPane=getContentPane();
contentPane.setLayout(newBorderLayout(10,10))
//北邊:2×2網(wǎng)格布局,放置兩個標簽、一個密碼框和一個文本框
JPanelpNorth=newJPanel(newGridLayout(2,2));//創(chuàng)建密碼提示標簽:第2個參數(shù)指明標簽上文字的位置passwordLabel=newJLabel("請輸入密碼",SwingConstants.RIGHT);
pNorth.add(passwordLabel);//添加標簽到pNorth面板中
passwordField=newJPasswordField(10);//創(chuàng)建密碼輸入框passwordField.addActionListener(this);//對密碼框增加監(jiān)聽
pNorth.add(passwordField);//添加密碼輸入框到pNorth面板中//創(chuàng)建姓名輸入提示標簽:第2個參數(shù)指明標簽上文字的位置textfieldLabel=newJLabel("請輸入姓名",SwingConstants.RIGHT);
pNorth.add(textfieldLabel);textfield=newJTextField(10);//創(chuàng)建文本輸入框
pNorth.add(textfield);//添加文本輸入框到pNorth面板中textfield.addActionListener(this);//對文本框增加監(jiān)聽
contentPane.add(pNorth,BorderLayout.NORTH);//pNorth面板在窗口北邊
}9//中間:1×2網(wǎng)格布局,放置一個標簽和一個文本區(qū)
JPanelpCenter=newJPanel(newGridLayout(1,2));
//標簽放在中間的左邊textAreaLabel=newJLabel();textAreaLabel.setText("有圖標的標簽");//設(shè)置標簽文字textAreaLabel.setIcon(newImageIcon("classcode\\pic14\\1.jpg"));//設(shè)置標簽圖標//設(shè)置標簽上文字的位置:居中(CENTER)、圖像底部(BOTTOM)textAreaLabel.setHorizontalTextPosition(SwingConstants.CENTER);textAreaLabel.setVerticalTextPosition(SwingConstants.BOTTOM);//設(shè)置鼠標放在標簽上時,出現(xiàn)的提示文字textAreaLabel.setToolTipText("密碼正確后,標簽文字和圖標會改變");
pCenter.add(textAreaLabel);//文本區(qū)---放在中間的右邊,第2、3個參數(shù)指定文本的行數(shù)、列數(shù)textArea=newJTextArea("10行12列的文本區(qū),帶滾動條",10,12);textArea.setLineWrap(true);//文本自動換行//使用javax.swing.JScrollPane類給文本區(qū)增加滾動條
pCenter.add(newJScrollPane(textArea));//有滾動條的文本區(qū)
contentPane.add(pCenter,BorderLayout.CENTER);
pack();setVisible(true);10
publicvoidactionPerformed(ActionEvente){//在密碼框或文本框中回車后,都將執(zhí)行if中的語句if(e.getSource()==textfield||e.getSource()==passwordField){//方法getPassword()得到密碼框的內(nèi)容,返回字符數(shù)組charch[]=passwordField.getPassword();//得到密碼框輸入的密碼Strings1=newString(ch);//密碼字符串Strings2=textfield.getText();//得到文本框輸入的姓名//判斷密碼和姓名是否正確if(s1.equals("111111")&s2.equals("張三")){//修改標簽圖標為張三的圖片textAreaLabel.setIcon(newImageIcon("classcode\\pic14\\2.jpg"));textAreaLabel.setText("張三");textArea.append("\n張三,歡迎你!");//向文本區(qū)追加內(nèi)容}else{//密碼和姓名不正確,則文本區(qū)追加提示內(nèi)容、標簽圖標修改textArea.append("\n密碼和姓名不對,請重新輸入!");textAreaLabel.setText("有圖標的標簽");textAreaLabel.setIcon(newImageIcon("classcode\\pic14\\1.jpg"));}}}11例:設(shè)計一程序,要求在圖形用戶界面中輸入產(chǎn)品的說明書,輸入內(nèi)容有產(chǎn)品名稱、產(chǎn)品規(guī)格、產(chǎn)品編號、產(chǎn)品說明。Classcode\MyJTextArea.java12JFramef=newJFrame("JTextArea例題");//創(chuàng)建JFrame窗口容器類對象f。ContainercontentPane=f.getContentPane();//創(chuàng)建內(nèi)容面板對象實例contentPane.setLayout(newBorderLayout());//設(shè)置內(nèi)容面板采用邊界布局管理器
JPanelp1=newJPanel();//創(chuàng)建面板容器實例。p1.setLayout(newGridBagLayout());//設(shè)置面板采用網(wǎng)袋布局管理器GridBagConstraintsgbc=newGridBagConstraints();//創(chuàng)建網(wǎng)袋格布局對象gbc。gbc.anchor=GridBagConstraints.WEST;//確定網(wǎng)袋格布局管理器對象gbc的位置gbc.insets=newInsets(2,2,2,2);//gbc與邊界的距離(上,左,下,右)p1.setBorder(BorderFactory.createTitledBorder("建構(gòu)一般的JTextArea")); //設(shè)置邊界框和說明文字JLabell1=newJLabel("產(chǎn)品名稱:");//創(chuàng)建4個標簽實例JLabell2=newJLabel("產(chǎn)號編號:");JLabell3=newJLabel("產(chǎn)品規(guī)格:");JLabell4=newJLabel("產(chǎn)品說明:");JTextAreat1=newJTextArea(2,8);//創(chuàng)建4個文本域?qū)嵗齁TextAreat2=newJTextArea(10,2);JTextAreat3=newJTextArea("TravelMate372系列",3,10);JTextAreat4=newJTextArea("采用因特爾迅馳移動技術(shù)",5,10);t1.setText(“宏基筆記本電腦1212121212121”);//向文本域t1寫入文字數(shù)據(jù)t2.append("A19345-by3874534-34345");//在文本域t2中已有文字后寫入該字符串,t4.setLineWrap(true);//激活自動換行功能13/*29-36行將4個標簽和4個文本域按指定的位置加到面板容器中。*/gbc.gridy=1;gbc.gridx=0;p1.add(l1,gbc);gbc.gridx=1;p1.add(t1,gbc);
gbc.gridy=2;gbc.gridx=0;p1.add(l2,gbc);gbc.gridx=1;p1.add(t2,gbc);
gbc.gridy=3;gbc.gridx=0;p1.add(l3,gbc);gbc.gridx=1;p1.add(t3,gbc);
gbc.gridy=4;gbc.gridx=0;p1.add(l4,gbc);gbc.gridx=1;p1.add(t4,gbc);contentPane.add(p1);//把面板容器加到內(nèi)容面板里。
f.show();//使窗口中的組件可見f.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){ System.exit(0);}})14事件處理程序3-1!用戶交互事件單擊鼠標按下/釋放鼠標按鈕對象狀態(tài)改變調(diào)用事件處理確定發(fā)生的事件的類型確定生成的事件的組件編寫合適的代碼處理事件15
源對象監(jiān)聽器事件
傳播事件的實例方法傳遞途徑代理事件模型Swing中的GUI組件適配器對象事件處理程序3-216
源對象監(jiān)聽器事件
傳播事件實例方法傳遞途徑代理事件模型Swing中的GUI組件適配器對象事件處理程序3-3Event類接口ActionEventActionListenerAdjustmentEventAdjustmentListenerComponentEventComponentListenerFocusEventFocusListenerItemEventItemListenerWindowEventWindowListenerTextEventTextListenerMouseEventMouseListener,MouseMotionListenerKeyEventKeyListener17事件處理模型Java最新的事件處理方法:委托事件模型當事件來源對象因用戶的操作(鼠標或鍵盤),系統(tǒng)會自動觸發(fā)此事件類對象E,并通知所授權(quán)的事件監(jiān)聽者A(若來源對象已向A注冊),事件監(jiān)聽者A中有處理各種事件的方法(事件處理者1~n)便會處理此事件E的各種狀況。18(1)Java的事件處理模式是委托事件模型:組件本身并不負責事件的處理。將各種事件的處理委托給其他的對象——監(jiān)聽器。(2)實現(xiàn)接口、增加監(jiān)聽,及命名規(guī)范:事件名稱——XxxxxEvent 例如,ActionEvent,KeyEvent處理事件的接口——XxxxxListener接口中包含很多沒有具體實現(xiàn)的處理事件的抽象方法。增加監(jiān)聽——addXxxxxListener() 組件的addXxxxxListener()方法將組件注冊給事件的處理者。(3)事件處理編程編寫對應(yīng)接口中的方法的方法體,完成程序所指定的功能。19事件源:產(chǎn)生事件的組件,如JButton組件能引發(fā)的事件:java.awt.event處理組件事件的對象:接口,如xxxListerner:
組件對象.addXxxListener(newCharType());
事件層次結(jié)構(gòu)20事件類說明事件源ActionEvent
通常按下按鈕,雙擊列表項或選中一個菜單項時,就會生成此事件。Button、List、MenuItem、TextFieldAdjustmentEvent操縱滾動條時會生成此事件。ScrollbarComponentEvent當一個組件移動、隱藏、調(diào)整大小或成為可見時會生成此事件。ComponentItemEvent單擊復選框或列表項時,或者當一個選擇框或一個可選菜單的項被選擇或取消時生成此事件。Checkbox、CheckboxMenuItem、Choice、ListFocusEvent組件獲得或失去鍵盤焦點時會生成此事件。Component事件21事件類說明事件源KeyEvent
接收到鍵盤輸入時會生成此事件。ComponentMouseEvent拖動、移動、單擊、按下或釋放鼠標或在鼠標進入或退出一個組件時,會生成此事件。ComponentContainerEvent將組件添加至容器或從中刪除時會生成此事件。ContainerTextEvent在文本區(qū)或文本域的文本改變時會生成此事件。TextField、TextAreaWindowEvent當一個窗口激活、關(guān)閉、失效、恢復、最小化、打開或退出時會生成此事件。Window22
源對象監(jiān)聽器事件
傳播事件實例方法傳遞途徑代理事件模型Swing中的GUI組件適配器對象事件處理程序3-3Event類接口ActionEventActionListenerAdjustmentEventAdjustmentListenerComponentEventComponentListenerFocusEventFocusListenerItemEventItemListenerWindowEventWindowListenerTextEventTextListenerMouseEventMouseListener,MouseMotionListenerKeyEventKeyListener23接口Java在Java.awt.event包中提供了許多處理各種事件源事件的接口
按鈕組件:要為該按鈕組件實現(xiàn)事件監(jiān)聽對象接口:publicclassmymousimplementsActionListener{………}窗口事件:要為該窗口組件實現(xiàn)監(jiān)聽對象接口:publicclassmywindowimplementsWindowListener{………}JCheckBox、JcomboBox、JcheckBoxMenuItem組件事件:要為該窗口組件實現(xiàn)監(jiān)聽對象接口:publicclassmycheckBoximplementsItemListener{………..}JSlider、JProgress、JTabbedPane等組件事件:要為該窗口組件實現(xiàn)監(jiān)聽對象接口:
publicclassmyJmplementsChangeListener{……}2425事件處理方法實現(xiàn)事件監(jiān)聽器接口法:確定事件源:即可能產(chǎn)生事件的組件;處理事件的接口:必須在程序中定義類來實現(xiàn)這些接口,重寫接口中的所有方法。給組件注冊監(jiān)聽器,使用下列方法:
addxxxListener(事件監(jiān)聽器對象);
26典型事件處理鼠標、鍵盤事件的處理:例:classcode\MouseKeyEventDemo.java按鈕事件的處理:例:classcode\JButtonDemo.java&p254例7.7(ColorTest),7.10,7.12(匿名內(nèi)部類)密碼框和文本框的回車動作引發(fā)事件:例:7.11(TextFieldTest)關(guān)閉窗口事件的處理:例:classcode\MyFrameExit.java27按鈕事件的處理:例:classcode\JButtonDemo.java
classJButtonDemoextendsJFrameimplementsActionListenerJButtonDemo(){button1=newJButton("日期[d]");
button1.addActionListener(this);//注冊事件監(jiān)聽器 Containercontentpane=getContentPane(); contentpane.add(text,BorderLayout.SOUTH);contentpane.add(button1,BorderLayout.WEST);}
publicvoidactionPerformed(ActionEvente){ if(e.getSource()==button1){ text.setText("你好!"); } elseif(e.getSource()==button2){ } elseSystem.exit(0);} publicstaticvoidmain(Stringargs[]){ JFrameframe=newJButtonDemo(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300,400); frame.setVisible(true); }}28鍵盤事件的監(jiān)聽器類addKeyListener(newCharType());
publicclassCharTypeimplementsKeyListener{ publicvoidkeyPressed(KeyEvente){……}//大括號中為處理事件的代碼 publicvoidkeyReleased(KeyEvente){}//未用到此方法,所以方法體為空 publicvoidkeyTyped(KeyEvente){}}
29鼠標、鍵盤事件的處理:例:classcode\MouseKeyEventDemo.java301.java.awt.event包文本框回車、按鈕點擊、計時器(javax.swing.Timer)、菜單項(javax.swing.JMenuItem)
引發(fā)動作事件:java.awt.event.ActionEvent處理事件的接口:java.awt.event.ActionListener接口中的方法:publicvoidactionPerformed(ActionEventevent)31單選按鈕(JRadioButton)、多選按鈕(JCheckBox)、下拉列表(JComboBox)
引發(fā)選項事件:java.awt.event.ItemEvent處理事件的接口:java.awt.event.ItemListener接口中的方法:publicvoiditemStateChanged(ItemEventevent)32鍵盤
引發(fā)鍵盤事件:java.awt.event.KeyEvent處理事件的接口:java.awt.event.KeyListener接口中的方法: publicvoidkeyPressed(KeyEvente);壓下
publicvoidkeyReleased(KeyEvente);釋放 publicvoidkeyTyped(KeyEvente);敲擊33鼠標引發(fā)鼠標事件:java.awt.event.MouseEvent處理事件的接口:java.awt.event.MouseListener和MouseMotionListenerMouseListener接口中的方法:publicvoidmousePressed(MouseEvente);按下鼠標鍵時執(zhí)行的方法publicvoidmouseClicked(MouseEvente);敲擊鼠標鍵時執(zhí)行的方法publicvoidmouseReleased(MouseEvente);釋放鼠標鍵時執(zhí)行的方法publicvoidmouseEntered(MouseEvente);鼠標進入publicvoidmouseExited(MouseEvente);鼠標退出MouseMotionListener接口中的方法:publicvoidmouseDragged(MouseEvente);按下鼠標鍵拖動publicvoidmouseMoved(MouseEvente);不按下鼠標鍵移動鼠標34事件適配器使用實現(xiàn)事件監(jiān)聽器接口的方法處理事件時,必須重寫監(jiān)聽器接口中的所有方法,盡管有些方法不會用到。事件適配器類:
實現(xiàn)了監(jiān)聽器接口中的所有方法,因此只需要重寫所需要的方法即可。例:classcode\MyFrameExit_ada.java,MyFlowLayout.javaaddKeyListener(newCharType());
為事件源注冊事件監(jiān)聽器的方法同上。publicclassCharTypeextendsKeyAda
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 化妝學校合同范本
- 包車居間服務(wù)合同范本
- 鄉(xiāng)村園林出售合同范本
- 別墅大門購買合同范本
- 醫(yī)療旅行合同范本
- 倉庫分租協(xié)議合同范例
- 分包非標工程合同范本
- 勞動配送合同范本
- 上牌購車合同范本
- 公寓欄桿維修合同范本
- 披薩制作流程
- 2024 河北公務(wù)員考試(筆試、省直、A類、C類)4套真題及答案
- 廈門2025年福建廈門市公安文職人員服務(wù)中心招聘17人筆試歷年參考題庫附帶答案詳解
- 2025年高三歷史教學工作計劃
- 《職業(yè)性肌肉骨骼疾患的工效學預防指南 》
- 不同產(chǎn)地筠連紅茶風味化學成分差異分析
- DB50 577-2015 汽車整車制造表面涂裝大氣污染物排放標準
- 生態(tài)安全課件
- 消防風道風管施工方案
- 大學英語(西安歐亞學院)知到智慧樹章節(jié)測試課后答案2024年秋西安歐亞學院
- 人教版高中英語挖掘文本深度學習-選修四-UNIT-2-(答案版)
評論
0/150
提交評論