第17章簡易記事本-工具欄與菜單_第1頁
第17章簡易記事本-工具欄與菜單_第2頁
第17章簡易記事本-工具欄與菜單_第3頁
第17章簡易記事本-工具欄與菜單_第4頁
第17章簡易記事本-工具欄與菜單_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第17章簡易記事本

——工具欄與菜單能力目標:學(xué)會使用工具欄、菜單欄和彈出(快捷)菜單。能運用工具欄、菜單、文件對話框和文件讀寫流等編寫簡易記事本程序。內(nèi)容介紹17.1任務(wù)預(yù)覽17.2JToolBar工具欄17.3菜單17.4JPopupMenu彈出菜單17.5簡易記事本17.6本章小結(jié)17.7實訓(xùn)17:簡易記事本17.1任務(wù)預(yù)覽本章實訓(xùn)程序運行結(jié)果:

17.2JToolBar工具欄工具欄屬于容器,一般安置在邊框布局的窗框上部。程序運行后用鼠標把工具欄拖到左邊、右邊、下部或中部。工具欄類JToolBar的構(gòu)造方法有4個:(1)JToolBar():構(gòu)造一個工具欄,默認為HORIZONTAL水平方向。(2)JToolBar(intorientation):構(gòu)造指定方向的工具欄。(3)JToolBar(Stringname):構(gòu)造指定名稱的工具欄。名稱用作浮動式工具欄的標題。(4)JToolBar(Stringname,intorientation)JToolBar最常用方法:繼承Container類的add(Componentcomp)方法,添加按鈕等組件到工具欄?!纠?7-1】編程,在窗框的上部放工具欄,上面放3個帶圖標的按鈕。窗框中部放置帶滾動窗格的文本區(qū)。classFrame1extendsJFrame{JToolBartoolBar=newJToolBar();ImageIconiconCut=newImageIcon("cut.gif");ImageIconiconCopy=…("copy.gif");ImageIconiconPaste=…("paste.gif");JButtonbuttonCut=newJButton("剪切",iconCut);JButtonbuttonCopy=…("復(fù)制",iconCopy);JButtonbuttonPaste=…("粘貼",iconPaste);JTextAreatextArea=newJTextArea();JScrollPanescrollPane=newJScrollPane(textArea);

續(xù)例17-1 publicFrame1(){ this.setTitle("帶工具欄的窗框"); this.setBounds(100,200,240,220); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); initialize();this.setVisible(true); } privatevoidinitialize(){ toolBar.add(buttonCut);… this.add(toolBar,BorderLayout.NORTH); this.add(scrollPane,BorderLayout.CENTER); }}publicclassExample1{ publicstaticvoidmain(String[]args){ newFrame1(); }}17.3菜單菜單有兩大類:菜單欄和彈出菜單。菜單欄JMenuBar:也叫主菜單,由若干個菜單“按鈕”排成一行構(gòu)成。單擊菜單“按鈕”JMenu,則會出現(xiàn)一個下拉菜單(列表)下拉菜單由多個菜單項(菜單命令)JMenuItem組成。菜單和菜單項都可設(shè)置鍵盤助記符(Mnemonic),運行時可使用鍵盤組合鍵“Alt+助記符”激活或執(zhí)行菜單。助記符帶下劃線顯示。還可對菜單項設(shè)置快捷鍵(英文是Accelerator,故也叫“加速器”),例如“退出”菜單中的Ctrl+E。菜單欄、菜單和菜單項都是組件,每個組件都是類的對象?!纠?7-2】在例17-1程序基礎(chǔ)上,增加菜單欄。classFrame2extendsFrame1{ JMenuBarmenuBar=newJMenuBar(); JMenumenuFile=newJMenu("文件(F)"); JMenumenuEdit=newJMenu("編輯"); JMenumenuHelp=newJMenu("幫助(H)"); JMenuItemmenuItemFileNew=newJMenuItem("新建"); JMenuItemmenuItemFileOpen=newJMenuItem("打開"); JMenuItemmenuItemFileSaveAs=newJMenuItem("另存為"); JMenuItemmenuItemFileExit=newJMenuItem("退出(X)"); JCheckBoxMenuItemcheckBoxMenuItemEditAutoWrap= newJCheckBoxMenuItem("自動換行"); JMenuItemmenuItemEditCut=newJMenuItem("剪切");

續(xù)例17-2 JMenuItemmenuItemEditCopy=newJMenuItem("復(fù)制"); JMenuItemmenuItemEditPaste=newJMenuItem("粘貼"); JMenuItemmenuItemHelpAbout=newJMenuItem("關(guān)于(A)"); publicFrame2(){ this.setTitle("帶菜單欄的窗框"); initialize();this.setVisible(true); } privatevoidinitialize(){ menuFile.setMnemonic(KeyEvent.VK_F);//菜單助記符F鍵 menuHelp.setMnemonic(KeyEvent.VK_H); menuItemFileExit.setMnemonic(KeyEvent.VK_X); menuItemHelpAbout.setMnemonic(KeyEvent.VK_A); //設(shè)置“退出”菜單項加速器(即快捷鍵)Ctrl+E: menuItemFileExit.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_E,KeyEvent.CTRL_DOWN_MASK,true));續(xù)例17-2 menuFile.add(menuItemFileNew);//添加“文件”菜單項 menuFile.add(menuItemFileOpen); menuFile.add(menuItemFileSaveAs); menuFile.addSeparator();//添加菜單項分隔符 menuFile.add(menuItemFileExit); menuEdit.add(checkBoxMenuItemEditAutoWrap); menuEdit.addSeparator(); menuEdit.add(menuItemEditCut); menuEdit.add(menuItemEditCopy); menuEdit.add(menuItemEditPaste); menuHelp.add(menuItemHelpAbout); menuBar.add(menuFile);//添加菜單欄菜單 menuBar.add(menuEdit); menuBar.add(menuHelp); this.setJMenuBar(menuBar);//窗框設(shè)置菜單欄 //“退出”菜單項添加動作事件監(jiān)聽器: menuItemFileExit.addActionListener(newActionListener(){…System.exit(0);}});}}…17.3.1JMenuBar菜單欄菜單欄是由菜單組成的條狀容器組件,上面可放多個菜單或菜單項。菜單欄類JMenuBar的常用方法:(1)JMenuBar():構(gòu)造一個菜單欄。(2)JMenuadd(JMenuc):在菜單欄中添加菜單。(3)Componentadd(Componentcomp,intindex):這是從Container類繼承而來的方法,功能是將組件(菜單或菜單項等)添加到菜單欄指定的位置。索引位置從0開始,如果是-1,則添加到最后位置。17.3.2JMenu菜單菜單也是個容器,在上面放置菜單項或其它菜單。菜單欄上的菜單,運行時被選中,將出現(xiàn)“下拉菜單”。JMenu繼承JMenuItem,即菜單是特殊的菜單項。JMenu的常用方法:(1)JMenu(Strings):構(gòu)造指定文本的菜單。(2)JMenuItemadd(JMenuItemmenuItem):添加菜單項。(3)JMenuIteminsert(JMenuItemmi,intpos):插入菜單項。(4)voidaddSeparator():在菜單中添加分隔符。分隔符是JSeparator類的組件,用于菜單或工具欄作分隔。(5)Componentadd(Componentc):添加組件到菜單。在菜單menuFile中添加分隔符,有兩種方法:menuFile.addSeparator();menuFile.add(newJSeparator());續(xù)17.3.2(6)voidremove(JMenuItemitem)(7)voidremove(intpos)(8)voidsetMnemonic(intmnemonic):在菜單中設(shè)置鍵盤助記符。鍵盤助記符是鍵盤事件類KeyEvent的靜態(tài)常量字段,有VK_0、VK_1、…、VK_9、VK_A、VK_B、…、VK_Z等,用于表示鍵盤上的按鍵。設(shè)置了鍵盤助記符的菜單,程序運行時按Alt加上對應(yīng)的按鍵激活。設(shè)置了助記符的菜單,在菜單的文本中可放置助記符字符,例如“文件(F)”,程序運行時,助記符“F”加下劃線顯示。注意:KeyEvent常量字段中的VK表示“虛擬鍵”,這是與平臺無關(guān)的一種按鍵表示法。虛擬鍵的作用是報告按下了鍵盤上的哪個鍵。17.3.3JMenuItem菜單項菜單項是菜單列表中的菜單命令。JMenuItem常用方法:(1)JMenuItem(Stringtext)(2)JMenuItem(Iconicon):構(gòu)造帶指定圖標的菜單項。(3)JMenuItem(Stringtext,Iconicon)(4)JMenuItem(Stringtext,intmnemonic):構(gòu)造帶文本和助記符的菜單項。菜單項與菜單一樣,可以指定鍵盤助記符。菜單項還可設(shè)置鍵盤快捷鍵,通常以“Ctrl+按鍵”形式執(zhí)行。(5)voidsetAccelerator(KeyStrokekeyStroke):設(shè)置加速器(快捷鍵),運行時不必顯示菜單的層次結(jié)構(gòu),能直接執(zhí)行菜單項。參數(shù)是鍵擊類KeyStroke,該類只能使用靜態(tài)方法getKeyStroke產(chǎn)生對象。如: menuItemFileExit.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_E,KeyEvent.CTRL_DOWN_MASK,true));KeyStroke類的getKeyStroke方法有3個參數(shù),第一個表示X鍵,第二個表示Ctrl鍵,第三個參數(shù)true表示按鍵釋放的情況下執(zhí)行。6)voidaddActionListener(ActionListenerllstener):添加動作事件監(jiān)聽器。17.4JPopupMenu彈出菜單彈出菜單(快捷菜單):也由多個菜單項組成。彈出菜單與組件密切相關(guān),不同組件彈出菜單一般相同。彈出菜單必須編寫鼠標事件代碼。要執(zhí)行菜單項操作,還有添加菜單項的動作事件監(jiān)聽器?!纠?7-3】在例17-2程序基礎(chǔ)上,增加文本區(qū)的彈出菜單。classFrame3extendsFrame2{//繼承例17-2的Frame2 JPopupMenupopupMenu=newJPopupMenu(); JMenuItempopupMenuItemCut=newJMenuItem("剪切"); JMenuItempopupMenuItemCopy=newJMenuItem("復(fù)制"); JMenuItempopupMenuItemPaste=newJMenuItem("粘貼");續(xù)例17-3 publicFrame3(){ this.setTitle("增加了彈出菜單"); initialize(); this.setVisible(true); } privatevoidinitialize(){ popupMenu.add(popupMenuItemCut); popupMenu.add(popupMenuItemCopy); popupMenu.add(popupMenuItemPaste); //文本區(qū)添加鼠標事件監(jiān)聽器: textArea.addMouseListener(newMouseAdapter(){ publicvoidmouseReleased(MouseEvente){ if(e.isPopupTrigger()){ popupMenu.show(textArea,e.getX(),e.getY()); } }});}}…JPopupMenu常用方法(1)JPopupMenu()(2)JMenuItemadd(JMenuItemmenuItem)(3)voidinsert(Componentcomponent,intindex)(4)voidaddSeparator()(5)voidremove(intpos):移除指定索引位置的組件。(6)voidshow(Componentinvoker,intx,inty):在組件調(diào)用者的坐標空間中顯示彈出菜單。如: popupMenu.show(textArea,e.getX(),e.getY());其中e為鼠標事件對象,e.getX()、e.getY()方法返回鼠標事件的x、y坐標。注:無論下拉菜單還是彈出菜單,均允許出現(xiàn)多層(多級)菜單。17.5簡易記事本【例17-4】在例17-3程序基礎(chǔ)上,編寫菜單項和工具欄按鈕的動作事件處理代碼,完成簡易記事本的功能。

續(xù)例17-4importjavax.swing.*;importjava.awt.event.*;importjava.io.*;importjavax.swing.filechooser.FileNameExtensionFilter;classFrame4extendsFrame3{//繼承例17-3的Frame3 JFileChooserfileChooser=newJFileChooser(); FileNameExtensionFilterfileFilter=//文件擴展名過濾器 newFileNameExtensionFilter("文本文件","txt"); Filefile;

publicFrame4(){ this.setTitle("簡易記事本"); this.setBounds(100,200,350,300); initialize(); this.setVisible(true); } privatevoidinitialize(){ //工具欄按鈕添加動作事件監(jiān)聽(處理)器: buttonCut.addActionListener(newActionHandler()); buttonCopy.addActionListener(newActionHandler()); buttonPaste.addActionListener(newActionHandler()); //菜單項添加動作事件監(jiān)聽(處理)器: menuItemFileNew.addActionListener(newActionHandler()); menuItemFileOpen.addActionListener(…); … //彈出菜單項添加動作事件監(jiān)聽(處理)器: popupMenuItemCut.addActionListener(newActionHandler()); popupMenuItemCopy.addActionListener(…); popupMenuItemPaste.addActionListener(…); fileChooser.setFileFilter(fileFilter);//文件對話框擴展名過濾 }續(xù)例17-4 //菜單項和按鈕的動作事件監(jiān)聽處理類(內(nèi)部類): classActionHandlerimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ if(e.getSource()==buttonCut ||e.getSource()==menuItemEditCut ||e.getSource()==popupMenuItemCut){ textArea.cut(); }elseif(e.getSource()==buttonCopy||…){ textArea.copy(); } … elseif(e.getSource()==menuItemFileNew){ newFile();//調(diào)用新建文件方法 }elseif(e.getSource()==menuItemFileOpen){ openFile();//調(diào)用打開文件方法 }elseif(e.getSource()==menuItemFileSaveAs){ saveAsFile(); //調(diào)用保存文件方法 }續(xù)例17-4 elseif(e.getSource()==checkBoxMenuItemEditAutoWrap){ if(checkBoxMenuItemEditAutoWrap.isSelected()){ textArea.setLineWrap(true);//設(shè)置文本區(qū)自動換行 }else{textArea.setLineWrap(false);}//取消文本區(qū)自動換行 }elseif(e.getSource()==menuItemHelpAbout){ JOptionPane.showMessageDialog(null,“程序設(shè)計…");}}} voidnewFile(){//新建文件方法 if(!textArea.getText().equals("")){ saveFile(); //調(diào)用保存文件方法 } textArea.setText(null);//清空文本區(qū) file=null; this.setTitle("簡易記事本"); }續(xù)例17-4 voidopenFile(){//打開文件方法 if(!textArea.getText().equals("")){ saveFile(); //調(diào)用保存文件方法 } intreturnVal=fileChooser.showOpenDialog(this); if(returnVal==JFileChooser.APPROVE_OPTION){ file=fileChooser.getSelectedFile(); try{ FileReaderfileReader=newFileReader(file); textArea.read(fileReader,null); this.setTitle(file.getName()+"—簡易記事本"); fileReader.close();//關(guān)閉流 } catch(IOExceptione){ JOptionPane.showMessageDialog(this,"異常:“…); } }}續(xù)例17-4 voidsaveFile(){ //保存文件方法 if(file!=null&&file.exists()){//若文件已打開(存在) try{ FileWriterfileWriter=newFileWriter(file); textArea.write(fileWriter); fileWriter.close();//關(guān)閉流 } catch(IOExceptione){ JOptionPane.showMessageDialog(this,"異常:“…); } } else

溫馨提示

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

評論

0/150

提交評論