Java簡易實現記事本的打開與保存


記事本的打開與保存


一些總結


* Swing中有時方法不顯示,需要把方setVisible(true)放到最后執行
* AWT中的TextArea默認是中間布局  
* fileDialog對話框Load模式需要對取消事件進行處理
* 快捷鍵使用需要用到JmenuItem

主方法


package cn.work.demo.demo03;

public class NotePad {
    public static void main(String[] args) {

        NotepadWindow MyNotePad = new NotepadWindow();

        //生成窗體
        MyNotePad.frameWindow();

    }
}

窗口面板


package cn.work.demo.demo03;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;

public class NotepadWindow {

    //靜態文本區域對象,由該類調用
    static TextArea textArea;

    //記事本窗體
    public void frameWindow() {
        //新建一個JFrame窗體,並為其實現Swing程序中的各個組件
        JFrame frame = new JFrame("記事本");
        //窗口大小
        frame.setSize(1200,680);
        //設置窗口在屏幕的位置,null居中
        frame.setLocationRelativeTo(null);
        //設置關閉響應,直接關閉
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        //添加記事本的文本區域
        addTextArea(frame);
        //添加窗口的菜單項
        addMenu(frame);

        //窗口可見
        frame.setVisible(true);
    }


    //記事本的文本區域
    private void addTextArea(JFrame frame) {
        textArea = new TextArea();
        //設置字體顯示格式
        textArea.setFont(new Font("宋體",Font.PLAIN,23));
        frame.add(textArea);

    }

    //記事本的菜單
    private void addMenu(JFrame frame) {

        //使用Swing工具包替代AWT,方便添加快捷鍵
        //創建菜單欄對象
        JMenuBar menuBar = new JMenuBar();
        //創建“文件”菜單
        JMenu file = new JMenu("文 件");

        // 創建 打開 菜單選項
        JMenuItem open = new JMenuItem("打開文件   ");
        open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
                java.awt.Event.CTRL_MASK));

        // 創建 保存 菜單選項
        JMenuItem save = new JMenuItem("保存文件   ");
        save.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S,java.awt.Event.CTRL_MASK));

        //把菜單欄添加到窗口上
        frame.setJMenuBar(menuBar);

        //把file添加到菜單欄中
        menuBar.add(file);

        //將選項添加進file中
        file.add(open);
        file.add(save);


        //給 打開 添加OpenActionListener監聽器
        open.addActionListener(new OpenActionListener(frame));
        //給 保存 SaveActionListener監聽器
        save.addActionListener(new SaveActionListener(frame));


    }
}

"打開"監聽器


package cn.work.demo.demo03;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

// "打開" 監聽器從硬盤文件中讀入內容
public class OpenActionListener implements ActionListener {
    //定義一個窗體容器用來接受傳入的窗體
    private JFrame frame;
    //構造方法接受傳送進來的窗體
    OpenActionListener(JFrame frame){
        this.frame = frame;
    }

    //必須要重寫ActionListener的抽象方法,寫入事件發生后需要執行的內容
    @Override
    public void actionPerformed(ActionEvent e) {

        //創建一個文件對話框,默認load,傳入對話框窗體frame
        FileDialog fileDialog = new FileDialog(frame);
        //顯示文件選擇對話框
        fileDialog.setVisible(true);


        //獲取選擇的目錄路徑
        //獲取選擇的文件名
        //獲取文件的絕對路徑
        String absPath = fileDialog.getDirectory() + fileDialog.getFile();

        //如果選中文件,但點擊了取消,會得到null直接返回null,不影響后續操作
        if(fileDialog.getFile() == null){
            System.out.println(fileDialog.getFile());
            return;
        }

        BufferedReader bufre = null;
        //try catcah 處理編譯異常
        try {
            //創建字符緩沖輸入流對象,構造方法由字符輸入流綁定輸入地址
            bufre = new BufferedReader(new FileReader(absPath));

            //創建字節數組,存儲讀入的數據
            char[] chars = new char[1024];

            //len為讀取的有效位數
            int len = 0;
            //打開前清空文本區域
            NotepadWindow.textArea.setText("");
            //使用read讀取內容
            while ((len = bufre.read(chars)) != -1) {
                //提取每次讀的字符,生成字符串
                String str = new String(chars,0,len);
                //拼接每一次得到的字符串
                NotepadWindow.textArea.append(str);
            }
            bufre.close();
        }catch(IOException obj){
            //獲取異常信息
            obj.getMessage();

        }


    }
}

“保存”監聽器


package cn.work.demo.demo03;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

// "保存" 監聽器從硬盤文件中讀入內容
public class SaveActionListener implements ActionListener{

        //定義一個窗體容器用來接受傳入的窗體
        private JFrame frame;

        //構造方法接受傳送進來的窗體
        SaveActionListener(JFrame frame){
            this.frame = frame;
        }

    @Override
    public void actionPerformed(ActionEvent e) {


        //創建一個文件對話框,傳入對話框窗體frame
        FileDialog fileDialog = new FileDialog(frame);
        //設置為SAVE模式
        fileDialog.setTitle("保存");
        fileDialog.setMode(FileDialog.SAVE);


        //顯示文件選擇對話框
        fileDialog.setVisible(true);

        //獲取保存的目錄路徑
        String absPath = fileDialog.getDirectory() +fileDialog.getFile();

        BufferedWriter bufw = null;
        try {
            //字符緩沖輸出流,構造方法傳入字符輸出流綁定輸出路徑
            bufw = new BufferedWriter(new FileWriter(absPath));

            String str = NotepadWindow.textArea.getText();
            //向文件寫入數據
            bufw.write(str);
            //關閉並刷新輸出流
            bufw.close();
        }catch (IOException obj){
            obj.getMessage();
        }
    }
}

  • bug:swing編程時而不顯示菜單選項,改變語句順課序解決,后查閱資料需要將可見性設置在邏輯最后。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM