java編程 記事本 全部功能都實(shí)現(xiàn)
《java編程 記事本 全部功能都實(shí)現(xiàn)》由會(huì)員分享,可在線閱讀,更多相關(guān)《java編程 記事本 全部功能都實(shí)現(xiàn)(16頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、兩個(gè)放到同個(gè)包中,一起運(yùn)行 1.記事本.java import javax.swing.text.BadLocationException; public class 記事本 { public static void main(String args[]){ Window window1=new Window(); window1.setTitle("記事本"); window1.setVisible(true); } } 2. Window.java import javax.swing.*; import javax
2、.swing.JOptionPane; import java.io.*; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Font; import java.awt.Frame; import java.awt.GraphicsEnvironment; import java.awt.event.*; import java.awt.*; import java.awt.print.*; import java.util.*;
3、 import java.lang.Object; import java.lang.Throwable; import java.lang.Exception; import javax.swing.text.BadLocationException; import javax.swing.JFileChooser; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.filechooser.FileNam
4、eExtensionFilter; public class Window extends JFrame implements ActionListener{ JMenuBar menubar; JMenu menu,menu1,menu2,itemLine,menu3,menu4; JSplitPane splitPane; JMenuItem itemNew,itemOpen,itemSave,itemSaveAs,itemPrint,itemExit; JMenuItem itemCopy,itemCut,itemPaste,itemDelete; JMenuI
5、tem itemFont,line1,line2,itemhelp,itemabout; JTextArea text,text1; JLabel lblStatus; JTextField field; KeyHandler kHandler=new KeyHandler(); JPopupMenu popupMenu; JToolBar statusBar; JCheckBoxMenuItem itemstate; Window(){ init(); intGUI(); setBounds(500,150,500,500); se
6、tDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } void intGUI(){ text=new JTextArea(); add(new JScrollPane(text),BorderLayout.CENTER); text.addKeyListener(kHandler); lblStatus=new JLabel("未修改"); } void init(){ //建立一個(gè)菜單 menubar=new JMenuBar(); //建立文件菜單項(xiàng) menu=ne
7、w JMenu("文件(F)"); menubar.add(menu); setJMenuBar(menubar); itemNew=new JMenuItem("新建"); itemOpen=new JMenuItem("打開"); itemSave=new JMenuItem("保存"); itemSaveAs=new JMenuItem("另存為"); itemPrint=new JMenuItem("打印 "); itemExit=new JMenuItem("退出"); menu.add(itemNew); menu.a
8、dd(itemOpen); menu.add(itemSave); menu.add(itemSaveAs); menu.add(itemPrint); menu.add(itemExit); itemNew.addActionListener(this); itemNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK)); itemOpen.addActionListener(this); itemOpen.setAccelerator(KeyS
9、troke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK)); itemSave.addActionListener(this); itemSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); itemSaveAs.addActionListener(this); itemPrint.addActionListener(this); itemPrint.setAccelerator(KeyStroke.get
10、KeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK)); itemExit.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { if(lblStatus.getText().equals("已修改")){ int confirm=JOptionPane.showConfirmDialog(null, "文件已修改,要保存嗎?"); if(confirm==JO
11、ptionPane.OK_OPTION) save(); else if(confirm==JOptionPane.CANCEL_OPTION) return; else if(confirm==JOptionPane.CLOSED_OPTION) return; } System.exit(0); } }); itemExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CT
12、RL_MASK)); menu1=new JMenu("編輯(E)"); //建立編輯菜單項(xiàng) menubar.add(menu1); setJMenuBar(menubar); itemCopy=new JMenuItem("復(fù)制"); itemCut=new JMenuItem("剪切"); itemPaste=new JMenuItem("粘貼"); itemDelete=new JMenuItem("刪除"); menu1.add(itemCopy); menu1.add(itemCut); menu1.add
13、(itemPaste); menu1.add(itemDelete); itemCopy.addActionListener(this); itemCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK)); itemCut.addActionListener(this); itemCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK)); itemPaste.
14、addActionListener(this); itemPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK)); itemDelete.addActionListener(this); itemDelete.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0)); menu2=new JMenu("格式(O)"); //建立格式菜單項(xiàng) menubar.add(menu2); s
15、etJMenuBar(menubar); itemLine=new JMenu("自動(dòng)換行"); //建立二級(jí)菜單項(xiàng) line1=new JMenuItem("選擇自動(dòng)換行"); line2=new JMenuItem("取消自動(dòng)換行"); itemLine.add(line1); itemLine.add(line2); menu2.add(itemLine); line1.addActionListener(this); line2.add
16、ActionListener(this); itemFont=new JMenuItem("字體"); menu2.add(itemFont); itemFont.addActionListener(this); menu3=new JMenu("查看(V)"); //建立查看菜單項(xiàng) menubar.add(menu3); setJMenuBar(menubar); itemstate=new JCheckBoxMenuItem("狀態(tài)欄"); //設(shè)置選勾菜單項(xiàng) menu3.a
17、dd(itemstate); itemstate.addActionListener(this); menu4=new JMenu("幫助(H)"); //建立幫助菜單項(xiàng) menubar.add(menu4); setJMenuBar(menubar); itemhelp=new JMenuItem("查看幫助"); menu4.add(itemhelp); itemhelp.addActionListener(this); itemabout=new JMenuItem("關(guān)于記事本"); menu4.add(
18、itemabout); itemabout.addActionListener(this); } public void actionPerformed(ActionEvent e){ //選擇 if(e.getSource()==itemCopy) text.copy(); else if(e.getSource()==itemCut) text.cut(); else if(e.getSource()==itemPaste) text.paste(); else if(e.getSource()==itemN
19、ew) inew(); else if(e.getSource()==itemSave) save(); else if(e.getSource()==itemOpen) open(); else if(e.getSource()==itemSaveAs) saveas(); else if(e.getSource()==itemPrint) print(); else if(e.getSource()==itemDelete) delete(); else if(e.getSource()==line1)
20、 text.setLineWrap(true); //激活自動(dòng)換行功能 else if(e.getSource()==line2) text.setLineWrap(false); else if(e.getSource()==itemFont) font(); else if(e.getSource()==itemstate) { if(itemstate.getState()) state(); else statusBar.setVisibl
21、e(false); //狀態(tài)欄不可見 } else if(e.getSource()==itemhelp) itemhelp(); else if(e.getSource()==itemabout) itemabout(); } void itemhelp(){ String message = "1.記事本軟件界面很簡(jiǎn)潔,使用方法簡(jiǎn)單,但是也僅擁有著基本文字編輯的功能。\n不能對(duì)文字進(jìn)行排版和樣式編輯。" +"\n2.軟件最上方的是標(biāo)題欄,下面的是菜單欄(點(diǎn)擊不同按鈕會(huì)出現(xiàn)不同的
22、下拉菜單),中間白色空\n白區(qū)域?yàn)榫庉媴^(qū)域,下方的是狀態(tài)欄,右邊是滾動(dòng)條。" + "\n3.下拉菜單說明:" + "\n(1)文件" + "\n新建:新建一個(gè)空白的文檔。[如果正在編輯中的文檔被修改過,會(huì)提醒是否保存。]" + "\n打開:打開一個(gè)已知的文本文檔。[如果正在編輯中的文檔被修改過,會(huì)提醒是否保存。]" + "\n保存:保存現(xiàn)在編輯中的文檔。[如果沒有保存過會(huì)提示保存的位置,如果保存過則會(huì)自動(dòng)覆寫上已經(jīng)保存的文件。]" + "\n另存為:將現(xiàn)在編輯中的文件存到別的地方。[如果文件保存過則需要保存到別的地方或者改名保\n存到同一位置,
23、如果文件沒有保存過則功能同 保存。]" + "\n打?。簩F(xiàn)在編輯中的文件輸出到打印終端進(jìn)行打印。" + "\n退出:退出記事本軟件" + "\n(2)編輯" + "\n剪切:將選中的文字剪貼到剪貼板中" + "\n復(fù)制:將選中的文字復(fù)制到剪貼板中" + "\n粘貼:將剪貼板中的文字粘貼到記事本的光標(biāo)處" + "\n刪除:刪除選中的文字。撤銷:撤銷上一步操作" + "\n(3)格式" + "\n自動(dòng)換行:當(dāng)文字到達(dá)最右邊的時(shí)候,自動(dòng)切換到下一行" + "\n字體:文字的顯示設(shè)置,可設(shè)置 字體、字形、大小,并提供預(yù)覽
24、" + "\n(4)查看" + "\n狀態(tài)欄:當(dāng)前光標(biāo)的所在的行數(shù)列數(shù),顯示時(shí)間以及文字總數(shù),需要重點(diǎn)擊狀態(tài)欄才顯示最新消息" ; JOptionPane.showMessageDialog(this,message,"查看幫助",JOptionPane.PLAIN_MESSAGE); } void itemabout(){ String message = "\n名稱:vivian記事本" +"\n版本:1.0\n作者:mengmeng" + "\n\n感謝您的使用\n "; JOptionPane.sho
25、wMessageDialog(this,message,"關(guān)于記事本",JOptionPane.PLAIN_MESSAGE); } JLabel statusLabel1,statusLabel2,statusLabel3; JMenuBar MenuBar=new JMenuBar(); Container container=getContentPane(); void state(){ GregorianCalendar time=new GregorianCalendar(); int hour=time.get(Calendar.HOUR_
26、OF_DAY); int min=time.get(Calendar.MINUTE); int second=time.get(Calendar.SECOND); statusBar=new JToolBar(); int curLn=1; //設(shè)置行數(shù)列數(shù) int curCol=1; int caretPos = this.text.getCaretPosition(); int curSel = 0; try { // 獲取指定偏移量處的行號(hào),返回行號(hào)的取值范圍:x>
27、=0 && x<文本域總行數(shù) curLn = text.getLineOfOffset(caretPos) + 1; // 獲取指定行起始處的偏移量,指定行號(hào)的取值范圍:x>=0 && x<文本域總行數(shù) curCol+= caretPos - this.text.getLineStartOffset(curLn - 1); } catch (BadLocationException x) { x.printStackTrace(); } String strSel = text.getSelec
28、tedText(); if (strSel != null) { curSel = strSel.length(); } /* * 顯示狀態(tài)欄 */ statusBar.setLayout(new FlowLayout(FlowLayout.LEFT)); statusLabel1=new JLabel("字?jǐn)?shù)總數(shù): " + this.text.getText().length()); statusLabel2=new JLabel(" 當(dāng)前時(shí)間: "+hour+":"+min +
29、":"+second); statusLabel3=new JLabel("當(dāng)前光標(biāo)所在行數(shù):"+curLn+"所在行數(shù):"+curCol); statusBar.add(statusLabel1); statusBar.add(statusLabel2); statusBar.add(statusLabel3); container.add(statusBar,BorderLayout.SOUTH); statusBar.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CL
30、OSE); Clock clock =new Clock(); clock.start();} class Clock extends Thread { //模擬的時(shí)鐘 public void run() { while(true){ GregorianCalendar time=new GregorianCalendar(); int hour=time.get(Calendar.HOUR_OF_DAY); int min=time.get(Calendar.MINUTE); int secon
31、d=time.get(Calendar.SECOND); statusLabel2.setText(" 當(dāng)前時(shí)間:"+hour+":"+min +":"+second); try{Thread.sleep(900);}catch (InterruptedException exception){} } } } void font(){ //實(shí)現(xiàn)字體調(diào)整 GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsE
32、nvironment(); JList fontNames = new JList(ge.getAvailableFontFamilyNames()); int response = JOptionPane.showConfirmDialog(null, new JScrollPane(fontNames)); Object selectedFont = fontNames.getSelectedValue(); if (response == JOptionPane.YES_OPTION && select
33、edFont != null) System.out.println("選擇了 " + selectedFont); else System.out.println("取消了或沒作出選擇"); } void delete(){ //實(shí)現(xiàn)刪除功能 text.cut(); } void print(){ //實(shí)現(xiàn)打印功能 String printStr = text.getText().trim(); // 獲取
34、需要打印的目標(biāo)文本 if (printStr != null && printStr.length() > 0) // 當(dāng)打印內(nèi)容不為空時(shí) { // PAGES = getPagesCount(printStr); // 獲取打印總頁數(shù) PrinterJob myPrtJob = PrinterJob.getPrinterJob(); // 獲取默認(rèn)打印作業(yè) PageFormat pageFormat = myPrtJob.defaultPage(); // 獲取默認(rèn)打印頁面格式
35、 //myPrtJob.setPrintable(this, pageFormat); // 設(shè)置打印工作 if (myPrtJob.printDialog()) // 顯示打印對(duì)話框 { try { myPrtJob.print(); // 進(jìn)行每一頁的具體打印操作 } catch(PrinterException pe)
36、 { pe.printStackTrace(); } } } else { // 如果打印內(nèi)容為空時(shí),提示用戶打印將取消 JOptionPane.showConfirmDialog (null, "對(duì)不起,文本為空,打印取消!", "Empty", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING
37、_MESSAGE); } } void save(){ //實(shí)現(xiàn)保存功能 PrintWriter w=null; FileNameExtensionFilter filter=new FileNameExtensionFilter("*.txt", "txt"); JFileChooser Chooser=new JFileChooser(); Chooser.setFileFilter(filter); if(lblStatus.getText().equals("已修改")){ Choo
38、ser.setSelectedFile(new File(getName())); int result=Chooser.showSaveDialog(null); if (result==JFileChooser.APPROVE_OPTION) { File file=Chooser.getSelectedFile(); System.out.println(file.getPath()); if (!file.getName().endsWith(".txt")) { file=new File(file.getPath()+".t
39、xt"); System.out.println(file.getPath()); } try{ w=new PrintWriter(new BufferedWriter(new FileWriter(file))); String ss[]=text.getText().split("\n"); for(String st:ss) w.println(st); }catch(FileNotFoundException e){ e.printStackTrace(); }catch(IOExcepti
40、on e){ e.printStackTrace(); }finally{ w.close(); } } } } void open(){ //實(shí)現(xiàn)打開功能 inew(); FileNameExtensionFilter filter=new FileNameExtensionFilter("*.txt", "txt"); JFileChooser chooser=new JFileChooser(); chooser.setFileFilter(filter); int s=choos
41、er.showOpenDialog(null); String str=""; if(s==JFileChooser.APPROVE_OPTION){ File file=chooser.getSelectedFile(); BufferedReader r=null; file.getName().endsWith(".txt"); try{ r=new BufferedReader(new FileReader(file)); while(true){ str=r.readLine(); if(str=
42、=null) break; text.append(str+"\n"); } }catch(FileNotFoundException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); }finally{ try{r.close();} catch(IOException e){e.printStackTrace();} } Window.this.setTitle(file.getNa
43、me()); } } void saveas(){ //實(shí)現(xiàn)另存為功能 PrintWriter w=null; FileNameExtensionFilter filter=new FileNameExtensionFilter("*.txt", "txt"); JFileChooser Chooser=new JFileChooser(); Chooser.setFileFilter(filter); int result=Chooser.showSaveDialog(null); if (result==JFileChooser.APPR
44、OVE_OPTION) { File file=Chooser.getSelectedFile(); System.out.println(file.getPath()); if (!file.getName().endsWith(".txt")) { file=new File(file.getPath()+".txt"); System.out.println(file.getPath()); } try{ w=new PrintWriter(new BufferedWriter(new FileWriter(file)));
45、String ss[]=text.getText().split("\n"); for(String st:ss) w.println(st); }catch(FileNotFoundException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); }finally{ w.close(); } } } public void inew(){ //實(shí)現(xiàn)新建功能 if(lblStatus.get
46、Text().equals("已修改")){ int confirm=JOptionPane.showConfirmDialog(null, "文件已修改,要保存嗎?"); if(confirm==JOptionPane.OK_OPTION) save(); else if(confirm==JOptionPane.CANCEL_OPTION) return; else if(confirm==JOptionPane.CLOSED_OPTION) return; } text.setText(""); itemPa
47、ste.setEnabled(false); lblStatus.setText("未修改"); } class KeyHandler extends KeyAdapter{ //定義鍵盤事件監(jiān)聽器內(nèi)部類 public void keyTyped(KeyEvent e){ if(e.getSource()==text) lblStatus.setText("已修改"); super.keyTyped(e); } } class MouseHandler extends MouseAdapter{ //定義鼠標(biāo)事件監(jiān)聽器內(nèi)
48、部類 public void mouseReleased(MouseEvent e){ if(e.getButton()==MouseEvent.BUTTON3&&e.getSource()==text){ popupMenu.show(text,e.getX(),e.getY()); } super.mouseReleased(e); } } } 運(yùn)行界面如下: 文件下拉框: (1)打開界面 (2)保存界面 (3)打印界面 編輯下拉框: 格式下拉框: 幫助下拉框: 查看下拉框:
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中西方家庭教育的對(duì)比ppt課件
- 《運(yùn)籌學(xué)教程》第五版運(yùn)籌學(xué)6對(duì)策論矩陣對(duì)策課件
- (部編版)統(tǒng)編版四年級(jí)語文下冊(cè)第2課《鄉(xiāng)下人家》ppt課件
- 全等三角形1--公開課一等獎(jiǎng)ppt課件
- 《會(huì)跳舞樹葉娃娃》課件
- 9兒童詩兩首_人教版五年級(jí)的語文下冊(cè)課件
- 綠色植物是食物之源(我的課件)0
- 河南專版2022春八年級(jí)語文下冊(cè)第四單元16慶祝奧林匹克運(yùn)動(dòng)復(fù)興25周年習(xí)題課件新人教版
- 全國(guó)xx杯說課大賽機(jī)械類一等獎(jiǎng)作品:鉗工車模的制作說課ppt課件
- 六年級(jí)下冊(cè)數(shù)學(xué)ppt課件-總復(fù)習(xí)(1)數(shù)的認(rèn)識(shí)-整數(shù)∣北師大版
- 牛頓第二定律優(yōu)秀完整公開課ppt課件
- 調(diào)脂與卒中防治課件
- 點(diǎn)到平面的距離課件
- 聚焦新醫(yī)改形勢(shì)下的醫(yī)院發(fā)展戰(zhàn)略
- 四肢血管超聲基礎(chǔ)