基于Java实现记事本功能
本文实例为大家分享了Java实现记事本的具体代码,供大家参考,具体内容如下
编写一个具有菜单以及编辑、查找、替换、复制、粘贴功能,且具有新建、打开和保存文件功能的记事本(MyNotepad)。
packagech7; importjava.io.BufferedReader; importjava.io.BufferedWriter; importjava.io.File; importjava.io.FileReader; importjava.io.FileWriter; importjava.io.IOException; importjava.io.PrintWriter; importjava.util.Optional; importjavafx.scene.control.TextField; importjavafx.application.Application; importjavafx.event.ActionEvent; importjavafx.geometry.Insets; importjavafx.scene.Scene; importjavafx.scene.control.Alert; importjavafx.scene.control.Alert.AlertType; importjavafx.scene.control.Button; importjavafx.scene.control.ButtonBar; importjavafx.scene.control.ButtonType; importjavafx.scene.control.Label; importjavafx.scene.control.Menu; importjavafx.scene.control.MenuBar; importjavafx.scene.control.MenuItem; importjavafx.scene.control.SeparatorMenuItem; importjavafx.scene.control.TextArea; importjavafx.scene.input.Clipboard; importjavafx.scene.input.ClipboardContent; importjavafx.scene.input.DataFormat; importjavafx.scene.input.KeyCombination; importjavafx.scene.layout.BorderPane; importjavafx.scene.layout.HBox; importjavafx.scene.layout.VBox; importjavafx.stage.FileChooser; importjavafx.stage.FileChooser.ExtensionFilter; importjavafx.stage.Stage; importjavafx.stage.WindowEvent; //编写一个具有菜单以及编辑、查找、替换、复制、粘贴功能,且具有新建、打开和保存文件功能的记事本(MyNotepad)。 publicclassMyNotePadextendsApplication{ publicstaticTextAreatextArea;//文本框的范围 publicstaticvoidmain(String[]args){ launch(args); } @Override publicvoidstart(StageprimaryStage)throwsException{ //文件选取器 finalFileChooserfileChooser=newFileChooser(); fileChooser.getExtensionFilters().addAll(newExtensionFilter("TextFiles","*.txt"),//加入格式 newExtensionFilter("JavaSourseFiles","*.java")); //创建MenuBar MenuBarmenuBar=newMenuBar();// menuBar.setStyle("-fx-background-color:lightgray"); /************************************ *创建Menu,文件菜单条 ************************************/ MenumenuFile=newMenu("文件(F)"); //1.新建 MenuItemmenuNew=newMenuItem("新建"); menuNew.setAccelerator(KeyCombination.valueOf("Ctrl+N")); menuNew.setOnAction((finalActionEvente)-> { Alertalert=newAlert(Alert.AlertType.CONFIRMATION);//创建一个消息对话框,仅仅提供确定按钮 alert.setHeaderText("新建文件");//设置对话框的头部文本 //设置对话框的内容文本 alert.setContentText("确定新建文件吗??"); //alert.show();//显示对话框 OptionalbuttonType=alert.showAndWait(); //判断返回的按钮类型是确定还是取消,再据此分别进一步处理 if(buttonType.get().getButtonData().equals(ButtonBar.ButtonData.OK_DONE)){//单击了确定按钮OK_DONE textArea.setText("");//清空文本框内 primaryStage.setTitle("新建文件"); } }); //2.打开 MenuItemmenuOpen=newMenuItem("打开(O)..."); //设置menuItem的快捷键 menuOpen.setAccelerator(KeyCombination.valueOf("Ctrl+O")); menuOpen.setOnAction((finalActionEvente)->{ Filefile=fileChooser.showOpenDialog(primaryStage); if(file!=null){ openFile(file); } }); //3.保存 MenuItemmenuSave=newMenuItem("保存(S)"); menuSave.setAccelerator(KeyCombination.valueOf("Ctrl+S")); menuSave.setOnAction((finalActionEvente)->{ FileChooser.ExtensionFilterextFilter=newFileChooser.ExtensionFilter("TXTfiles(*.txt)","*.txt"); Filefile=fileChooser.showSaveDialog(primaryStage); saveFile(file); if(file.getAbsolutePath()!=null){ System.out.print(file.getName()+"已经报存在:"+file);} else System.out.println("此文件未保存"); }); //4.另存 MenuItemmenuSaveAs=newMenuItem("另存(A)..."); menuSaveAs.setOnAction((finalActionEvente)->{ FileChooser.ExtensionFilterextFilter=newFileChooser.ExtensionFilter("TXTfiles(*.txt)","*.txt"); Filefile=fileChooser.showSaveDialog(primaryStage); saveFile(file); if(file.getAbsolutePath()!=null){ System.out.print(file.getName()+"已经另存在:"+file);} else System.out.println("此文件未保存"); }); //创建分割线 SeparatorMenuItemseparator1=newSeparatorMenuItem(); SeparatorMenuItemseparator2=newSeparatorMenuItem(); MenuItemmenuExit=newMenuItem("退出"); menuExit.setOnAction((ActionEvente)->{ Alertalert=newAlert(Alert.AlertType.CONFIRMATION);//创建一个确认对话框 //判断文本框是否为空 if(!textArea.getText().isEmpty()){ alert.setHeaderText("还有内容未保存,你确定要退出吗?");}//设置对话框的头部文本 else alert.setHeaderText("确定要退出吗?"); //设置对话框的内容文本 //alert.setContentText("确定要退出MyNotePad吗?"); //显示对话框,并等待按钮返回 Optional buttonType=alert.showAndWait(); //判断返回的按钮类型是确定还是取消,再据此分别进一步处理 if(buttonType.get().getButtonData().equals(ButtonBar.ButtonData.OK_DONE)){//单击了确定按钮OK_DONE System.exit(0); } }); //将MenuItem放在对应的Menu上e menuFile.getItems().addAll(menuNew,menuOpen,separator1,menuSave,menuSaveAs,separator2,menuExit);//将分割线加进来 /************************************ *创建Menu,编辑菜单条 ************************************/ MenumenuEdit=newMenu("编辑(E)"); / MenuItemmenuSelctAll=newMenuItem("全选(A)"); menuSelctAll.setAccelerator(KeyCombination.valueOf("Ctrl+A")); menuSelctAll.setOnAction((finalActionEvente)->{ selectAll(); }); MenuItemmenuCut=newMenuItem("剪切"); menuCut.setOnAction((finalActionEvente)->{ cutMethod(); }); menuCut.setAccelerator(KeyCombination.valueOf("Ctrl+X")); MenuItemmenuCopy=newMenuItem("复制(C)"); menuCopy.setOnAction((finalActionEvente)->{ copyMethod(); }); menuCopy.setAccelerator(KeyCombination.valueOf("Ctrl+C")); / MenuItemmenuPaste=newMenuItem("粘贴(P)"); menuPaste.setAccelerator(KeyCombination.valueOf("Ctrl+V")); menuPaste.setOnAction((finalActionEvente)->{ pasteMethod(); }); //创建分割线 SeparatorMenuItemseparator3=newSeparatorMenuItem(); //查找替换菜单项 MenuItemmenuFind=newMenuItem("查找(F)"); menuFind.setOnAction((finalActionEvente)->{ findMethod(); }); MenuItemmenuReplace=newMenuItem("替换(R)..."); menuReplace.setOnAction((finalActionEvente)->{ replaceMethod(); }); menuEdit.getItems().addAll(menuSelctAll,menuCut,menuCopy,menuPaste,separator3,menuFind,menuReplace); //创建帮助子菜单Menu MenumenuHelp=newMenu("帮助(H)"); MenuItemmenuGuide=newMenuItem("指南(D)"); menuGuide.setOnAction((ActionEvente)->{//设置按钮的单击事件 Alertalert=newAlert(Alert.AlertType.INFORMATION);//创建一个消息对话框 alert.setHeaderText("指南");//设置对话框的头部文本 //设置对话框的内容文本 alert.setContentText("指南正在努力编写中,敬请期待。。。"); alert.show();//显示对话框 }); MenuItemmenuAbout=newMenuItem("关于(A)"); menuAbout.setOnAction((ActionEvente)->{//设置按钮的单击事件 Alertalert=newAlert(Alert.AlertType.INFORMATION);//创建一个消息对话框 alert.setHeaderText("关于本软件");//设置对话框的头部文本 //设置对话框的内容文本 alert.setContentText("JAVA记事本版权所有@2035"); alert.show();//显示对话框 }); menuHelp.getItems().addAll(menuGuide,menuAbout); //MenuBar,装入各菜单条 menuBar.getMenus().addAll(menuFile,menuEdit,menuHelp); //创建MenuItem类 //还可以对MenuItem设置图标 //将menuBar加入到布局类mainPane上 //文本编辑组件 textArea=newTextArea(); //创建布局类,放置编辑区域 BorderPanemainPane=newBorderPane(); mainPane.setTop(menuBar); mainPane.setCenter(textArea); //创建场景图 //Scenescene=newScene(anchorPane); Scenescene=newScene(mainPane); primaryStage.setScene(scene); primaryStage.setHeight(800); primaryStage.setWidth(700); primaryStage.setTitle("无标题-记事本"); //用户点击关窗按钮时...... primaryStage.setOnCloseRequest((WindowEventevent)->{ //严格的话,需判断文件保存与否,或确认是否退出 Alertalert=newAlert(Alert.AlertType.INFORMATION);//创建一个确认对话框,提供一个确认图像,和确认取消按钮 alert.setHeaderText("确定要退出记事本吗?");//设置对话框的头部文本 //设置对话框的内容文本 //alert.setContentText("确定要退出MyNotePad吗?"); //显示对话框,并等待按钮返回 Optional buttonType=alert.showAndWait(); //判断返回的按钮类型是确定还是取消,再据此分别进一步处理 if(buttonType.get().getButtonData().equals(ButtonBar.ButtonData.OK_DONE)){//单击了确定按钮OK_DONE System.exit(0); }//不知道怎么用取消返回,所以改成了INFORMATION }); primaryStage.show(); } //打开 privatevoidopenFile(Filefile){ textArea.setText(""); try{ BufferedReaderin=newBufferedReader(newFileReader(file)); Stringline; while((line=in.readLine())!=null) textArea.appendText(line+"\n"); in.close(); textArea.positionCaret(0); }catch(IOExceptionioe){ System.err.println(ioe); } } //保存 publicvoidsaveFile(Filefile) { try{ PrintWriterprint=newPrintWriter(newBufferedWriter(newFileWriter(file))); print.write(textArea.getText()); print.flush(); print.close(); }catch(IOExceptionioe) { ioe.printStackTrace();; } } //复制 publicvoidcopyMethod() { //获取剪切板 Clipboardclipboard=Clipboard.getSystemClipboard(); ClipboardContentcontent=newClipboardContent();// //选取文本 Stringtemp=textArea.getSelectedText();//获得已经选取的内容 //将获取的内容放到系统剪切板 content.putString(temp); //把内容放在文本剪切板 clipboard.setContent(content); } //剪切 publicvoidcutMethod() { //获得系统剪切板 Clipboardclip=Clipboard.getSystemClipboard(); ClipboardContentcontent=newClipboardContent(); //获取选中 Stringtemp=textArea.getSelectedText(); //把选中放入剪切板 content.putString(temp); //放入文本剪贴板 clip.setContent(content); //选中内容用""代替 textArea.replaceSelection(""); } //粘贴 publicvoidpasteMethod() { Clipboardclip=Clipboard.getSystemClipboard(); ClipboardContentcontent=newClipboardContent(); Clipboardc=clip.getSystemClipboard(); if(c.hasContent(DataFormat.PLAIN_TEXT)); { Strings=c.getContent(DataFormat.PLAIN_TEXT).toString(); if(textArea.getSelectedText()!=null){//选中不为空 textArea.replaceSelection(s); } else{//如果鼠标为选中,从后边贴 intmouse=textArea.getCaretPosition();//插入符号在文本中当前位置 textArea.insertText(mouse,s); } } } //全选 publicvoidselectAll() { textArea.selectAll();//全选 } //查找,参照网页代码 intstartIndex=0; publicvoidfindMethod(){ HBoxh1=newHBox(); h1.setPadding(newInsets(20,5,20,5)); h1.setSpacing(5); Labellabel1=newLabel("查找内容(N):"); TextFieldtf1=newTextField(); h1.getChildren().addAll(label1,tf1); VBoxv1=newVBox(); v1.setPadding(newInsets(20,5,20,10)); Buttonbtn1=newButton("查找下一个"); v1.getChildren().add(btn1); HBoxfindRootNode=newHBox(); findRootNode.getChildren().addAll(h1,v1); StagefindStage=newStage(); Scenescene1=newScene(findRootNode,450,90); findStage.setTitle("查找"); findStage.setScene(scene1); findStage.setResizable(false);//固定窗口大小 findStage.show(); btn1.setOnAction((ActionEvente)->{ StringtextString=textArea.getText(); StringtfString=tf1.getText(); if(!tf1.getText().isEmpty()) { if(textString.contains(tfString)) { if(startIndex==-1){ Alertalert1=newAlert(AlertType.WARNING); alert1.titleProperty().set("提示"); alert1.headerTextProperty().set("我找不着"); alert1.show(); } startIndex=textArea.getText().indexOf(tf1.getText(),startIndex); if(startIndex>=0&&startIndex { StringtextString=textArea.getText();//获取记事本文本域的字符串 StringtfString=tf1.getText();//获取查找内容的字符串 if(!tf1.getText().isEmpty()){ if(textString.contains(tfString)){ if(startIndex==-1){//notfound Alertalert1=newAlert(AlertType.WARNING); alert1.titleProperty().set("提示"); alert1.headerTextProperty().set("已经找不到相关内容了!!!"); alert1.show(); } startIndex=textArea.getText().indexOf(tf1.getText(),startIndex); if(startIndex>=0&&startIndex { if(tf2.getText().isEmpty()){//替换内容为空时 Alertalert1=newAlert(AlertType.WARNING); alert1.titleProperty().set("出错了"); alert1.headerTextProperty().set("替换内容为空"); alert1.show(); }else{//替换内容不为空则替换 textArea.replaceSelection(tf2.getText()); } }); } if(!textString.contains(tfString)){ Alertalert1=newAlert(AlertType.WARNING); alert1.titleProperty().set("提示"); alert1.headerTextProperty().set("找不到相关内容了!!!"); alert1.show(); } }elseif(tf1.getText().isEmpty()){ Alertalert1=newAlert(AlertType.WARNING); alert1.titleProperty().set("出错了"); alert1.headerTextProperty().set("输入内容为空"); alert1.show(); } }); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。