Java实现记事本|IO流/GUI

Java实现记事本

题目

利用GUI实现一个简单的记事本(notepad),即打开文件,文字内容显示在界面上;
允许对文字内容进行编辑,并可以保存到文件。

代码

package notePadExp;

import java.awt.BorderLayout;
import java.awt.FileDialog;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

class notPadcontainer{
    
    public Boolean visible = false;
    //组件定义成属性
    public JFrame notPadFrame;
    public JMenuBar notPadMenuBar;
    public JMenu firMenu;
    public JMenu secMenu;
    public JMenu thirMenu;
    public JMenu fourMenu;
    
    public JMenuItem buildItem;
    public JMenuItem openItem;
    public JMenuItem reserveItem;
    public JMenuItem paperSetItem;
    public JMenuItem clearItem;
    public JMenuItem aboutItem;
    public JMenuItem fontItem20;
    public JMenuItem fontItem40;
    public JTextArea textArea;
    public JScrollPane textScrollPane;
    
     /*
      * 无参构造函数 
      * 创建组件 初始化组件
     */
    notPadcontainer(){
        //窗体Frame
        this.notPadFrame = new JFrame("notePad by fishers"); //设置窗体 名字为notePad
        this.notPadFrame.setLayout(new BorderLayout()); //边界布局方式
        this.notPadFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置关闭框
        this.notPadFrame.setSize(500,500); //设置窗口大小

        //菜单组件
        this.notPadMenuBar = new JMenuBar();
        this.firMenu = new JMenu("文件");
        this.thirMenu = new JMenu("字体");
        this.secMenu = new JMenu("编辑");
        this.fourMenu = new JMenu("帮助");
        
        
        //create JMenuItem for the First menu
        this.buildItem = new JMenuItem("新建");
        this.openItem = new JMenuItem("打开");
        this.reserveItem = new JMenuItem("保存");
        this.paperSetItem = new JMenuItem("页面设置");
        
        //create JMenuItem for the sec thir four menu
        this.clearItem = new JMenuItem("清空");
        this.aboutItem = new JMenuItem("关于");
        this.fontItem20 = new JMenuItem("字体20号");
        this.fontItem40 = new JMenuItem("字体40号");
        //文本组件
        this.textArea = new JTextArea();
        this.textScrollPane = new JScrollPane(textArea);
        textArea.setFont(new Font("宋体",Font.PLAIN,20)); //默认20号字体
        ItemAdd();
        runListener();
    }
    
    //添加组件
    public void ItemAdd(){
        
        //添加JMenu到JMenuBar
        notPadMenuBar.add(firMenu);
        notPadMenuBar.add(secMenu);
        notPadMenuBar.add(thirMenu);
        notPadMenuBar.add(fourMenu);
        
        //添加JMenuItem到第一个菜单
        firMenu.add(buildItem);
        firMenu.add(openItem);
        firMenu.add(reserveItem);
        firMenu.add(paperSetItem);
        secMenu.add(clearItem);
        thirMenu.add(fontItem20);
        thirMenu.add(fontItem40);
        fourMenu.add(aboutItem);
        
        //notPadFrame中添加各个组件
        this.notPadFrame.setJMenuBar(notPadMenuBar);
        this.notPadFrame.add(textScrollPane,BorderLayout.CENTER);
    }

    
    
    /*
     * 事件监听代码部分
    */
    public void runListener() {
        //新建文件 = 清空。。
        buildItem.addActionListener( e -> {
            textArea.setText("");
        });     
        
        //打开文件
        openItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                //设置弹出框 FileDialog
                FileDialog saveFiledialog = new FileDialog(notPadFrame,"打开文件",FileDialog.LOAD);
                saveFiledialog.setVisible(true);
                String fileDir = saveFiledialog.getDirectory(); //拿到目录
                String fileName = saveFiledialog.getFile(); //拿到文件名
//              System.out.println(fileDir);
//              System.out.println(fileName);
                File openFile = new File(fileDir,fileName); //使用File类创建新文件对象
                try {
                    FileReader freader = new FileReader(openFile); //字符流
                    StringBuffer tempBuffer  = new StringBuffer();//StringBuffer可变
                    int len = 0; //下面使用read方法读取
                    while((len = freader.read()) != -1) {
                        tempBuffer.append((char)len); //append方法加入StringBuffer
                    }
                    String openString = new String(tempBuffer.toString());
                    textArea.setText(openString);
                    freader.close();//关闭流
                } catch (FileNotFoundException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
        });
        
        //保存文件
        reserveItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub 
                FileDialog saveFiledialog = new FileDialog(notPadFrame,"保存文件",FileDialog.SAVE);//父级frame 标题 mode
                saveFiledialog.setVisible(true);
                String fileDir = saveFiledialog.getDirectory();
                String fileName = saveFiledialog.getFile();
                System.out.println(fileDir);
                System.out.println(fileName);
                String ContentString = textArea.getText();
                File saveFile = new File(fileDir,fileName);
                try {
                    FileWriter fWriter = new FileWriter(saveFile); //使用字符流写文件
                    fWriter.write(ContentString); //写文件
                    fWriter.close(); //关闭流
                }catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
        });
        
        //清空文件
        clearItem.addActionListener( e -> {
            textArea.setText("");
        });

        //监听关于
        aboutItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                JFrame aboutFrame = new JFrame("关于"); //新建窗口
                aboutFrame.setLayout(new BorderLayout());
                aboutFrame.setSize(300,115);
                aboutFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);//设置隐藏窗口
                
                
                JPanel panel  = new JPanel();
                JLabel label = new JLabel("不会换行、中文乱码的记事本");
                JPanel panel2  = new JPanel();
                JLabel label2 = new JLabel("Copyright © 2019 fishers");
                panel.add(label);
                panel2.add(label2);
                aboutFrame.add(panel,BorderLayout.CENTER);
                aboutFrame.add(panel2,BorderLayout.PAGE_START);
                aboutFrame.setVisible(true);
            }
        });
        
        fontItem20.addActionListener(e->{
            textArea.setFont(new Font("宋体",Font.PLAIN,20));
        });
        
        fontItem40.addActionListener(e->{
            textArea.setFont(new Font("宋体",Font.PLAIN,40));
        });
    }
    
    
    
    //setVisible:设置窗口显示
    public void setVisible(Boolean visible) {
        this.visible = visible;
        this.notPadFrame.setVisible(this.visible);
    }
}

public class notePad {

    public static void main(String[] args) {
        notPadcontainer oneNote = new notPadcontainer();
        oneNote.setVisible(true);
    }

}

你可能感兴趣的:(Java实现记事本|IO流/GUI)