Java实现记事本(含源码)

使用Java fx实现的简单记事本。主要功能包括以下:

  • 新建文件
  • 打开文件
  • 保存文件
  • 另存为
  • 复制粘贴
  • 查找替换
  • 插入日期
  • 退出

主要源码如下

/**
 * 界面逻辑控制器,
 */
@SuppressWarnings("unused")
public class FXMLDocumentController implements Initializable {
    private Stage stage;
    private File fileOpened;

    @FXML
    private TextArea textArea;

    @Override
    public void initialize(URL url, ResourceBundle rb) {
    }

    void setStage(Stage stage) {
        this.stage = stage;
        openFile(null);
    }

    private void openFile(File file) {
        fileOpened = file;
        if (fileOpened == null) {
            stage.setTitle("CodePad");
        } else {
            stage.setTitle(fileOpened.getAbsolutePath());
        }
    }

    private void readFile(File file) {
        if (file == null) {
            textArea.setText("");
            return;
        }
        try {
            textArea.setText(new String(Files.readAllBytes(Paths.get(file.getAbsolutePath()))));
        } catch (IOException e) {
            Alert alert = new Alert(Alert.AlertType.ERROR);
            alert.setContentText("file open error: " + e.getMessage());
            alert.show();
        }
    }

    private void saveFileAs(File file) {
        try {
            Files.write(Paths.get(file.getAbsolutePath()), textArea.getText().getBytes());
        } catch (IOException e) {
            Alert alert = new Alert(Alert.AlertType.ERROR);
            alert.setContentText("file write error: " + e.getMessage());
            alert.show();
        }
        openFile(file);
    }

    /**
     * 功能未实现时调用
     * @param event
     */
    @FXML
    private void onNotImplementedItemClick(ActionEvent event) {
        Alert alert = new Alert(Alert.AlertType.ERROR);
        String text = ((MenuItem) event.getTarget()).getText();
        alert.setContentText(text + " not implemented");
        alert.show();
    }

    /**
     * 新建文件
     * @param event
     */
    @FXML
    private void onFileNewClick(ActionEvent event) {
        openFile(null);
        readFile(null);
    }

    /**
     * 打开文件
     * @param event
     */
    @FXML
    private void onFileOpenClick(ActionEvent event) {
        FileChooser fileChooser = new FileChooser();
        fileChooser.setTitle("Open File");
        File file = fileChooser.showOpenDialog(stage);
        if (file == null) {
            // 选择文件被取消才会是null,
            return;
        }
        openFile(file);
        readFile(file);
    }

    /**
     * 文件保存
     * @param event
     */
    @FXML
    private void onFileSaveClick(ActionEvent event) {
        if (fileOpened == null) {
            Alert alert = new Alert(Alert.AlertType.ERROR);
            alert.setContentText("no file opened");
            alert.show();
            return;
        }
        saveFileAs(fileOpened);
    }

    /**
     * 文件另存为
     * @param event
     */
    @FXML
    private void onFileSaveAsClick(ActionEvent event) {
        FileChooser fileChooser = new FileChooser();
        fileChooser.setTitle("Save File As");
        saveFileAs(fileChooser.showSaveDialog(stage));
    }

    /**
     * 插入日期功能
     * @param event
     */
    @FXML
    private void onDateClick(ActionEvent event) {
        // 格式化当前的日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String date = sdf.format(new Date());
        // 追加到内容里
        textArea.appendText(date);
    }


    /**
     * 实现复制功能
     */
    @FXML
    private void onCopyClick() {
        // 获取系统的剪切板
        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

        // 获取选中的内容
        String copyText = textArea.getSelectedText();

        System.out.println("copyText = " + copyText);
        // 封装文本内容
        Transferable trans = new StringSelection(copyText);
        // 把文本内容设置到系统剪贴板
        clipboard.setContents(trans, null);
    }

    /**
     * 实现粘贴功能
     * @param event
     */
    @FXML
    private void onPasteClick(ActionEvent event) {
        // 获取系统剪贴板
        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

        // 获取剪贴板中的内容
        Transferable trans = clipboard.getContents(null);

        if (trans != null) {
            // 判断剪贴板中的内容是否支持文本
            if (trans.isDataFlavorSupported(DataFlavor.stringFlavor)) {
                try {
                    // 获取剪贴板中的文本内容
                    String text = (String) trans.getTransferData(DataFlavor.stringFlavor);
                    // 粘贴
                    textArea.appendText(text);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

    }

    /**
     * 实现查找功能
     */
    @FXML
    private void onFindClick() {
        Stage stage = new Stage();
        stage.setTitle("查找替换");

        GridPane grid = new GridPane();
        grid.setAlignment(Pos.CENTER);
        grid.setHgap(10);
        grid.setVgap(10);
        grid.setPadding(new Insets(25, 25, 25, 25));

        // 添加查找框
        Label findText = new Label("查找:");
        grid.add(findText, 0, 1);

        TextField findTextField = new TextField();
        grid.add(findTextField, 1, 1);

        // 添加替换框
        Label replaceText = new Label("替换:");
        grid.add(replaceText, 0, 2);

        TextField replaceTextField = new TextField();
        grid.add(replaceTextField, 1, 2);

        // 添加按钮
        Button btn1 = new Button("查找");
        HBox hbBtn1 = new HBox(10);
        hbBtn1.setAlignment(Pos.BOTTOM_RIGHT);
        hbBtn1.getChildren().add(btn1);
        grid.add(hbBtn1, 0, 4);

        // 给查找按钮添加方法
        btn1.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent e) {
                // 获取文本框中所有内容
                String text = textArea.getText();
                // 获取查找框的文本内容
                String findWords =  findTextField.getText();
                // 不为空,则进行查找
                if(findWords != null && !findWords.isEmpty()) {

                    // 查找出内容,高亮显示
                    Text t = new Text(findWords);
                    // 设置字体颜色为红色
                    t.setFill(Color.RED);
                    text = text.replaceAll(findWords, t.toString());
                    // 清空原来的内容
                    textArea.clear();
                    textArea.appendText(text);
                } else {
                    Alert alert = new Alert(Alert.AlertType.ERROR);
                    alert.setContentText("请输入内容!");
                    alert.show();
                }
            }
        });

        Button btn2 = new Button("全部替换");
        HBox hbBtn2 = new HBox(10);
        hbBtn2.setAlignment(Pos.BOTTOM_RIGHT);
        hbBtn2.getChildren().add(btn2);
        grid.add(hbBtn2, 1, 4);

        // 给替换按钮添加方法
        btn2.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent e) {
                // 获取文本框中所有内容
                String text = textArea.getText();
                // 获取查找框的文本内容
                String findWords =  findTextField.getText();
                // 获取替换框的文本内容
                String replaceWords = replaceTextField.getText();
                // 不为空,则进行替换
                if(findWords != null && !findWords.isEmpty() && replaceWords != null && !replaceWords.isEmpty()) {
                    System.out.println("text1 = " + text);
                    // 进行替换
                    text = text.replaceAll(findWords, replaceWords);
                    System.out.println("text2 = " + text);
                    // 清空原来的内容
                    textArea.clear();
                    textArea.appendText(text);
                } else {
                    Alert alert = new Alert(Alert.AlertType.ERROR);
                    alert.setContentText("请输入内容!");
                    alert.show();
                }
            }
        });

        Scene scene = new Scene(grid, 300, 275);
        stage.setScene(scene);
        stage.show();
    }


    @FXML
    private void onFileQuitClick(ActionEvent event) {
        Platform.exit();
    }
}

运行界面如下
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

完整源码,可以关注微信公众号【秃头哥编程】回复关键字【记事本】免费领取。

在这里插入图片描述

  • 31
    点赞
  • 333
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
java写windows记事本源代码,具体功能如下: 1.文件(F) 可以通过点击菜单或快捷键(alt + F)打开菜单页 1.1新建(N) 菜单内点击或助记符N或快捷键(ctrl + N) 点击后弹出对话框,询问是否保存到***.txt? 点击保存(S):保存文本并关闭,再新建新的文本 点击不保存(N):不保存文本并关闭,再新建新的文本 点击取消:取消新建操作 1.2打开(O) 菜单内点击或助记符O或快捷键(ctrl + O) 点击后弹出对话框,询问是否保存到***.txt? 点击保存(S):保存文本,弹出选择文件对话框 点击不保存(N):不保存文本,弹出选择文件对话框 ==》选择文件对话框: 选择打开(O):就打开新的文本 选择取消:取消打开操作,返回原文本 点击取消:取消打开操作 1.3保存(S) 菜单内点击或助记符S或快捷键(ctrl + S) 点击后保存文本内容 1.4另存为(A) 菜单内点击或助记符A 点击后打开另存为对话框,选择路径和设置文件名 选择保存(S):就会在该路径保存文本,原文本内容不会保存并关闭,打开另存的文本 取消:取消另存为操作,返回原文本 1.5页面设置(U)(只实现页面边距,其他未实现) 菜单内点击或助记符U 点击后打开页面设置对话框:可以设置一下内容 纸张:大小(Z)、来源(S) 方向:纵向(O)、横向(A) 页面边距(毫米):左(L)右(R)上(T)下(B) 页眉(H)、页脚(F)、预览:(图片) 选择确定:保存新的页面设置 选择取消:取消页面设置 1.6打印(P)(改功能未完全实现,使用可能会报错) 菜单内点击或助记符P或快捷键(ctrl + P) 点击后弹出打印对话框 1.7退出(X) 菜单内点击或助记符X 点击后退出本文本文件 2.编辑(E) 可以通过点击菜单或快捷键(alt + E)打开菜单页 2.1撤销(U) 菜单内点击或助记符U或快捷键(ctrl + Z) 响应后返回上一步操作 2.2剪切(T) 菜单内点击或助记符T或快捷键(ctrl + X) 响应后光标选的内容提取到剪贴板,并删除该内容,光标定位在元初识位置 2.3复制(C) 菜单内点击或助记符C或快捷键(ctrl + C) 响应后光标选内容提取到剪贴板,光标位置保持不变 2.4粘贴(P) 菜单内点击或助记符P或快捷键(ctrl + V) 响应后光标选的内容被替换为剪贴板的内容,光标选刚刚粘贴的内容 2.5删除(L) 菜单内点击或助记符L或快捷键(DEL) 响应后删除光标选的内容 2.6查找(F) 菜单内点击或助记符F或快捷键(ctrl + F) 响应后弹出查找对话框:输入查找的内容,可以选择区分大小写和选择查找的方向 点击查找之后光标会选响应的查找内容,没找到会弹出找不到对话框 2.7查找下一个(N) 菜单内点击或助记符N或快捷键(F3) 查找框有内容就直接查找贯标位置以后的内容,查找框没有内容直接弹出查找框 2.8替换(R) 菜单内点击或助记符R或快捷键(ctrl + H) 弹出替换对话框,有全部替换和替换当前两种 当前替换:替换光标选的内容,光标移动到下一个查找内容上 2.9转到(G) 菜单内点击或助记符G或快捷键(ctrl + G) 在自动换行未选的情况下,点击之后弹出转到指定行对话框 2.10全选(A) 菜单内点击或助记符A或快捷键(ctrl + A) 响应后选全部文本内容 2.11时间/日期(D) 菜单内点击或助记符D或快捷键(F5) 在光标选的内容里修改为当前时间 3.格式(O) 可以通过点击菜单或快捷键(alt + O)打开菜单页 3.1自动换行(W) 菜单内点击或助记符W 选后,文本会自动换行,且不能点击查看状态栏和转到菜单 3.2字体(F) 菜单内点击或助记符F 弹出字体对话框:可以选择字体(F)、字形(Y)大小(S) 拥有示例和选择脚本,确定后更改全部字体 4.查看(V) 可以通过点击菜单或快捷键(alt + V)打开菜单页 4.1状态栏(S) 菜单内点击或助记符S 在底部会显示光标的起始坐标,第几行第几列 5.帮助(H) 可以通过点击菜单或快捷键(alt + H)打开菜单页 5.1查看帮助(H) 菜单内点击或助记符H 点击弹出帮助文本 5.2关于记事本(A)、 菜单内点击或助记符A 点击弹出关于记事本的对话框 显示它的版本信息
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值