案例(2)——日记本的思路和代码实现(笔记带有注释)

目录

IndexGui 

 LoginGui

RegisterGui 

 User

JDOM 

UserGui 


日记本应该有的东西:

一、登录界面、IndexGui

二、注册界面、RegisterGui

三、一开始进入的界面、LoginGui

四、(写、删、看)日记的界面、Diary

五、记录用户信息的类、UserGui

六、在登录时,对对应ID进行密码匹配

        在注册时,对ID进行重复检查、JDOM

IndexGui 

 日记本一开始登录进去的代码实现:

1、首先肯定要一个主函数当作入口

2、一个init方法来初始化入口的面板

3、IndexGui方法中具体设置开始界面的样子

4、还有两个跳转方法,分别进入登录和注册界面

5、还有一个退出程序的按钮

package come.zpark.gui;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

/**
 * 这是一开始的界面的类
 * 主函数(main)入口,init方法,IndexGui类,两个点击事件eventLogin()和eventRegister()
 * 用来创建开始的界面
 * @author Lungcen
 * @version 1.000
 */
public class IndexGui extends JFrame
{
    public static JPanel contentPage;//新建面板
    public static IndexGui frame;//构建框架

    public static void main(String[] args)
    {
        init();//调用初始化的方法
    }
    static void init()
    {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run()
            {
                try{
                    frame = new IndexGui();//声明框架
                    frame.setVisible(true);//数据模型已经构造好了,允许JVM可以根据数据模型执行paint方法开始画图并显示到屏幕上了,并不是显示图形,而是可以运行开始画图了。
                    /*frame.setVisible(false);//创建了窗口并不能看见,在内存中存着。只有设置为可见才行*/
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//这个好像时可以在内存中删掉,不过不知道咋用
                }
                catch (Exception e)//捕获异常,返回显示台
                {
                    e.printStackTrace();
                    System.out.println("创建窗口失败!!!");
                }
            }
        });
    }

    public IndexGui()//整体框架
    {
        //设置窗体标题
        setTitle("我的日记");

        //设置默认关闭方式
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //创建框架大小
        setBounds(380,160,1200,800);

        //创建面板
        contentPage=new JPanel();

        //contentPage.setBorder(new EmptyBorder(5,5,5,5));//设置边框线,似乎没用

        //向框架添加面板
        setContentPane(contentPage);//将按钮、标题等添加到框架中

        //设置一个为空的面板布局
        contentPage.setLayout(null);//后面的按钮、标题都是在这个框架下的布局里显示,若不为空则是默认布局。

        //设置内容
        JLabel newLabel=new JLabel("欢迎来到你的回忆");

        /*
        newLabel.setBounds(475,220,350,35);//两者效果类似,后者是用字体的宽度来把字往下面推
        newLabel.setBounds(475,0,350,325);
         */
        newLabel.setBounds(475,220,350,35);//字体的一些设计
        newLabel.setFont(new Font("楷体",Font.BOLD,30));

        //将要显示的内容添加面板
        contentPage.add(newLabel);


        JButton login=new JButton("登录");//新建按钮
        login.setBounds(350,430,124,45);//按钮大小
        contentPage.add(login);//将login的信息写入面板


        JButton register=new JButton("注册");//新建按钮
        register.setBounds(770,430,124,45);//按钮大小
        contentPage.add(register);//将register的信息写入面板

        
        JButton exit=new JButton("退出");//新建按钮
        exit.setBounds(560,530,124,45);//按钮大小
        contentPage.add(exit);//将exit的信息写入面板

        //添加点击事件(login按钮的)
        login.addMouseListener(new MouseAdapter()
        {
            @Override
            public void mouseClicked(MouseEvent e)
            {
                eventLogin();
            }
        });

        //添加点击事件(exit按钮的)
        exit.addMouseListener(new MouseAdapter()
        {
            @Override
            public void mouseClicked(MouseEvent e)
            {
                System.exit(0);
            }
        });

        //添加点击事件(register按钮的)
        register.addMouseListener(new MouseAdapter()
        {
            @Override
            public void mouseClicked(MouseEvent e)
            {
                eventRegister();
            }
        });

        //键盘回车登录(login按钮的)
        login.addKeyListener(new KeyAdapter()
        {
            @Override
            public void keyTyped(KeyEvent e)
            {
                if (e.getKeyCode() == KeyEvent.VK_ENTER) ;
                {
                    eventLogin();
                }
            }
        });
    }

    //点击事件后发生的事件
    private void eventRegister()
    {
        System.out.println("我是注册方法");
        setVisible(false);//不显示现在所在界面
        new RegisterGui().registerGUI();//进入下一个界面
    }

    //点击事件后发生的事件
    private void eventLogin()
    {
        System.out.println("我是登录方法");
        setVisible(false);//不显示现在所在界面
        new LoginGui().loginGui();//进入下一个界面
    }

}

 LoginGui

 一开始进入的界面有了,那就可以开始着手于登录界面和注册界面:

登录界面:

1、一个接收ID的框

2、一个接收密码的框

3、通过获取的ID去寻找对应的密码于输入的密码进行匹配

4、一个登录按钮,一个返回按钮

package come.zpark.gui;

import org.jdom2.JDOMException;

import javax.swing.*;
import javax.swing.border.EmptyBorder;//这个是边框线的class包
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;

/**
 * 用来登录的类
 * loginGui方法,LoginGui类
 * 用来登录进入日记界面
 * @author Lungcen
 * @version 1.000
 */
public class LoginGui extends JFrame
{
    private static final long seriaVersionUID = 499092375825085L;
    private JPanel contentPage;//声明界面
    private JTextField idTXT;//id输入框
    private JPasswordField passwordField;//密码输入框(不会显示出来你输入的字符)
    private JLabel password1;//密码标签

    public void loginGui()
    {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run()
            {
                try
                {
                    LoginGui frame = new LoginGui();//定义一个框架
                    frame.setVisible(true);//显示框架

                    //这个好像时可以在内存中删掉,不过不知道咋用
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                }
                catch (Exception e)//捕获异常
                {
                    e.printStackTrace();
                    System.out.println("创建登录框架失败");
                }
            }
        });
    }

    public LoginGui()
    {
        //设置界面题目
        setTitle("登录");

        //界面的关闭方法
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //框架的大小
        setBounds(410,190,1200,800);

        //创建登录面板
        contentPage = new JPanel();

        //边框线
        /*好像没效果*/contentPage.setBorder(new EmptyBorder(5, 5, 5, 5));

        //将登录面板传入框架
        setContentPane(contentPage);

        //设置面板的布局,为空
        contentPage.setLayout(null);

        /*----------------------账号---------------------*/
        JLabel idLabel = new JLabel("输入账号ID");
        idLabel.setBounds(400, 91, 160, 23);
        idLabel.setFont(new Font("Micorsoft YaHei", Font.BOLD, 20));
        contentPage.add(idLabel);//将idLabel的信息写入面板

        idTXT = new JTextField();
        idTXT.setBounds(520, 92, 151, 23);
        contentPage.add(idTXT);//将idTXT的信息写入面板
        /*----------------------账号---------------------*/


        /*----------------------密码---------------------*/
        password1 = new JLabel("输入密码");
        password1.setBounds(415, 191, 160, 23);
        password1.setFont(new Font("Micorsoft YaHei", Font.BOLD, 20));
        contentPage.add(password1);//将password1的信息写入面板

        passwordField = new JPasswordField();
        passwordField.setBounds(520, 193, 151, 23);
        contentPage.add(passwordField);//将passwordField的信息写入面板
        /*----------------------密码---------------------*/

        JButton login = new JButton("登录");
        login.setBounds(500, 350, 124, 45);
        contentPage.add(login);//将login的信息写入面板

        //添加点击事件(login按钮的)
        login.addMouseListener(new MouseAdapter()
        {
            @Override
            public void mouseClicked(MouseEvent e)
            {
                String id = idTXT.getText();//获取id输入框的信息
                String pwd = passwordField.getText();//获取密码框的信息(这个获取的好像是可见的密码)
                try{
                    String message = JDOM.read(id, pwd);//获取判断返回的信息

                    if (message.contains("成功"))//返回的信息中是否有"成功"
                    {
                        String[] messArr = message.split("/");//以‘/’分割message里的信息

                        JOptionPane.showMessageDialog(contentPage,"欢迎"
                                +messArr[0]+"登录","登录信息", JOptionPane.PLAIN_MESSAGE);

                        setVisible(false);//不显示本界面
                        UserGui.init(messArr[0]);//进入下一个界面
                    }
                    else
                    {
                        JOptionPane.showMessageDialog(contentPage, message
                                , "登录信息", JOptionPane.PLAIN_MESSAGE);
                    }
                }
                catch (JDOMException ex)//捕获异常
                {
                    ex.printStackTrace();
                }
                catch (IOException ex)
                {
                    ex.printStackTrace();
                }
            }
        });

        JButton back = new JButton("返回");
        back.setBounds(500, 450, 124, 45);
        contentPage.add(back);//将back的信息写入面板

        //添加点击事件(back按钮的)
        back.addMouseListener(new MouseAdapter()
        {
            @Override
            public void mouseClicked(MouseEvent e)
            {
                setVisible(false);//点击事件发生就让本次界面不显示出来,但是依旧存在内存
                new IndexGui().init();//显示IndexGui界面
            }
        });
    }
}

RegisterGui 

 登录界面有了,接下来实现注册界面的代码:

注册界面:

1、四个输入框,接收姓名、ID、密码、二次输入密码

2、点击注册后对输入的ID进行重复检查(具体实现在JDOM里)

3、对连刺输入的密码进行判断,如果不一样就提示重新输入

4、两个按钮,一个返回,一个注册

package come.zpark.gui;

import org.jdom2.JDOMException;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;

/**
 * 用来注册用户的类
 * registerGui方法,RegisterGui类,register方法(具体实现注册的方法)
 * @author lungcen
 * @version 1.000
 */
public class RegisterGui extends JFrame
{
    private static final long seriaVensionUID = 325037144503810226L;
//serialVersionUID 用来表明类的不同版本间的兼容性。如果你修改了此类, 要修改此值。
// 否则以前用老版本的类序列化的类恢复时会出错。为了在反序列化时,确保类版本的兼容性,最好在每个要
// 序列化的类中加入private static final long serialVersionUID这个属性,具体数值自己定义。

    private JPanel contentPage;//注册界面的面板
    private JTextField name;//注册名字
    private JTextField id;//注册id
    private JTextField password1;//一次输出密码,以注册密码
    private JTextField password2;//二次输入密码,以确认密码

    public void registerGUI()
    {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run()
            {
                try {
                    RegisterGui frame = new RegisterGui();//声明框架
                    frame.setVisible(true);//使创建的窗口能被看见

                    //这个好像时可以在内存中删掉,不过不知道咋用
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                }
                catch (Exception e)//捕获异常
                {
                    e.printStackTrace();
                    System.out.println("创建注册框架失败");
                }
            }
        });
    }

    public RegisterGui()  //构造方法
    {
        //设置标题
        setTitle("注册界面");

        //设置关闭界面的方法
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //界面的大小
        setBounds(410,190,1200,800);

        //new 一个框架
        contentPage = new JPanel();

        //将框架添加进界面
        setContentPane(contentPage);//将按钮、标题等添加到框架中

        //框设置架的布局,布局为空
        contentPage.setLayout(null);

        /*----------------------名字--------------------*/
        JLabel nameLabel=new JLabel("请输入你的名字");
        nameLabel.setBounds(400,91,160,23);
        nameLabel.setFont(new Font("Micorsoft YaHei",Font.BOLD,20));
        contentPage.add(nameLabel);//将nameLabel的信息添加到框架中

        name=new JTextField();
        name.setBounds(550,93,151,23);
        contentPage.add(name);
        /*这个似乎不起效*/name.setColumns(10);//设置字符长度
        /*----------------------名字--------------------*/


        /*----------------------id--------------------*/
        JLabel uidLabel=new JLabel("输入你的ID");
        uidLabel.setBounds(400,191,151,23);
        uidLabel.setFont(new Font("Micorsoft YaHei",Font.BOLD,20));
        contentPage.add(uidLabel);

        id=new JTextField();
        id.setBounds(550,193,151,23);
        contentPage.add(id);
        /*----------------------id--------------------*/


        /*----------------------一次密码--------------------*/
        JLabel pw1=new JLabel("输入你的密码");
        pw1.setBounds(400,291,151,23);
        pw1.setFont(new Font("Micorsoft YaHei",Font.BOLD,20));
        contentPage.add(pw1);

        password1=new JTextField();
        password1.setBounds(550,293,151,23);
        contentPage.add(password1);
        /*----------------------一次密码--------------------*/


        /*----------------------二次密码--------------------*/
        JLabel pw2=new JLabel("确认你的密码");
        pw2.setBounds(400,391,151,23);
        pw2.setFont(new Font("Micorsoft YaHei",Font.BOLD,20));
        contentPage.add(pw2);

        password2=new JTextField();
        password2.setBounds(550,391,151,23);
        contentPage.add(password2);
        /*----------------------二次密码--------------------*/

        JButton submit=new JButton("注册提交");
        submit.setBounds(500,500,124,45);
        contentPage.add(submit);

        //点击事件(submit)
        submit.addMouseListener(new MouseAdapter()
        {
            @Override
            public void mouseClicked(MouseEvent e)
            {
                User user=new User(id.getText(),name.getText(),password1.getText());
                //用一个User类来接收我们注册的信息
                try{
                    String string = register(user);//用string接受返回的信息

                    JOptionPane.showMessageDialog(contentPage,string,"注册信息"
                            , JOptionPane.PLAIN_MESSAGE);

                    if (string.contains("重复"))//检测返回的string中的是否有“重复”
                    {
                        setVisible(false);//不显示此页面
                        new RegisterGui().registerGUI();//如果输入重新,那就重新输入
                    }
                    else
                    {
                        setVisible(false);//不显示此页面
                        new IndexGui().init();//如果,输入没有重复,那就进入首页
                    }
                }
                catch (IOException ioException)//捕获异常
                {
                    ioException.printStackTrace();
                }
                catch (JDOMException jdomException)//捕获异常
                {
                    jdomException.printStackTrace();
                }
            }
        });

        JButton back = new JButton("返回");
        back.setBounds(500, 580, 124, 45);
        contentPage.add(back);//将back的信息写入面板

        //添加点击事件(back按钮的)
        back.addMouseListener(new MouseAdapter()
        {
            @Override
            public void mouseClicked(MouseEvent e)
            {
                setVisible(false);//点击事件发生就让本次界面不显示出来,但是依旧存在内存
                new IndexGui().init();//显示IndexGui界面
            }
        });
    }

    public String register(User user) throws IOException, JDOMException
    {
        //判断密码是否是一样的
        if (Integer.parseInt(this.password1.getText()) != Integer.parseInt(this.password2.getText()))
        {
            return  "两次输入的密码不是重复的";
        }
        else {
            System.out.println("注册中");
            return JDOM.write(user.getName(), user.getPassword(), user.getId());
        }
    }
}

 User

 三个初始界面都有了,那现在就该写一个用户类来存储用户,不然后面怎样进行登录和注册:

package come.zpark.gui;

/**
 * User用户类
 * user方法、还有一些属性的get、set方法
 * 定义了一个User的类和一些相关行为
 * @author Lungcen
 * @version 1.000
 */
public class User
{
    private String id;
    private String name;
    private String password;

    public User()
    {
    }

    public User(String id, String name, String password)
    {
        this.id = id;
        this.name = name;
        this.password = password;
    }

    public String getId()
    {
        return id;
    }

    public void setId(String id)
    {
        this.id = id;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getPassword()
    {
        return password;
    }

    public void setPassword(String password)
    {
        this.password = password;
    }
}

JDOM 

既然有了存储用户的类,那么该存储在那呢?于是就写了个JDOM来进行存储,同时负责进行一些登录和注册的功能:

1、写日记

2、读日记

3、判断ID重复

4、获取ID密码

package come.zpark.gui;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.XMLOutputter;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.*;

/**
 * 对文件进行的操作的类
 * write方法,read方法,getPasswords方法,checkID方法
 * 对文件进行读取,同时判断Id是否重复、获取id对应的密码
 * @author Lungcen
 * @version 1.000
 */
public class JDOM
{
    public static String write(String username, String psd, String id) throws IOException, JDOMException
    {
        //xml文档的位置
        String path="D:\\word.excel.ppt\\my.word\\User.xml";

        //根据给定的路径来实例化一个file类
        File file=new File(path);

        //XML的构建工具
        SAXBuilder builder=new SAXBuilder();

        //通过XML的构建工具来读取文档
        Document document=builder.build(file);

        //获取根目录<Usres/>
        Element root = document.getRootElement();

        //创建一个根目录下的新子元素
        Element user = new Element("user");
        Element name = new Element("name");
        Element password = new Element("password");

        //对ID进行重复性检查
        if (checkID(id, root))
        {

            //设置用户的id
            user.setAttribute("id", id);

            //将传入的姓名写入name标签里
            name.setText(username);

            //将name标签写入user标签下
            user.addContent(name);

            //将传入的密码写入password标签里
            password.setText(psd);

            //将password标签写入user标签下
            user.addContent(password);

            //将user标签的内容写入root跟目录下
            root.addContent(user);

            //这两个不知道是什么
            XMLOutputter out = new XMLOutputter();
            out.output(document, new FileOutputStream(file));

            return "添加成功";
        }
        return  "你滴Id重复了,请重新输入!";
    }

    //判断是否重复
    public static boolean checkID(String id, Element root)
    {
        boolean flag = true;

        //获取所有子元素<user/>
        List<Element> userList = root.getChildren();

        //构造一个迭代器
        Iterator iterator = userList.iterator();

        //用迭代器输出遍历输入的id与已存在的id进行比较
        while(iterator.hasNext())
        {
            //向下迭代
            Element element = (Element) iterator.next();

            //element.getAttribute("id"),获取id
            if (element.getAttributeValue("id").equals(id))
            {
                flag=false;
            }
        }
        return flag;
    }

    public static String read(String id, String pwd) throws JDOMException, IOException
    {
        //绝对路径
        String path="D:\\word.excel.ppt\\my.word\\User.xml";

        //根据给定的路径来实例化一个file类
        File file = new File(path);

        //XML的构建工具
        SAXBuilder builder = new SAXBuilder();//不知道干啥的

        //通过构建工具来读取文件
        Document document = builder.build(file);

        //获取根目录<Users/>
        Element root = document.getRootElement();

        try{
            //获取用户名
            String info = getPassword(root).get(id);

            //判断用户是否存在
            if (info==null)
            {
                return "用户不存在";
            }

            //通过"/"进行分割
            String[] infoArr = info.split("/");

            //如果用户存在,就对密码进行比较
            if (infoArr[0].equals(pwd))
            {
                return infoArr[1] +"/ 登录成功";
            }
        }catch (Exception e)//捕获异常
        {
            e.printStackTrace();
        }
        return "账号或者密码有误";
    }

    private static Map<String, String> getPassword(Element root)
    {
        //用Map(K,V)来获取密码
        Map<String, String> map = new TreeMap<>();

        //声明一个list(集合)
        List<Element> list;

        //获取root的所有子集合
        list = root.getChildren();

        //构建迭代器
        Iterator iterator = list.iterator();

        //遍历迭代器中的元素
        while(iterator.hasNext())
        {
            //获取根结点<user/>
            Element el = (Element)iterator.next();

            //获取<user/>下id、pwd、name
            String id = el.getAttributeValue("id");
            String pwd = el.getChildText("password");
            String name = el.getChildText("name");

            //以id为k值,pwd+"/"+name为V值
            map.put(id,pwd+"/"+name);
        }
        return map;
    }
}

UserGui 

 现在就还差一个对日记进行操作的类,代码如下: 

package come.zpark.gui;

import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;

/**
 * 用户界面的类
 * UserGui类,init方法
 * 将用户的读文件,写文件,删文件的框架写出来
 * @author Lungcen
 * @version 1.000
 */
public class UserGui extends JFrame
{
    //新建面板
    private JPanel contentPane;

    //声明标题输入框
    private JTextField textField;

    //声明一个文件选择组
    private JFileChooser chooser;

    //接收登录界面传过来的名字
    private static String pathname;

    public static void init(String path)
    {
        pathname=path;
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                //声明一个UserGui的框架
                UserGui userGui = new UserGui();

                //显示界面
                userGui.setVisible(true);

                //这个好像可以使界面不显示后在在内存中删掉,不过不知道咋用
                userGui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            }
        });
    }

    public UserGui()
    {
        setTitle(pathname+"的日记");

        //设置关闭的方式
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //框架的大小
        setBounds(380, 160, 1300, 800);

        //new一个面板
        contentPane = new JPanel();

        //将面板添加入框架中
        setContentPane(contentPane);

        //设置一个为空的面板布局
        contentPane.setLayout(null);

        //顶部边框标签
        JTabbedPane tabbedPane = new JTabbedPane();

        //顶部标签的标题(好像是用来换行的,但是测试不出是用来干嘛的)
        tabbedPane.setToolTipText("AllDiary");

        //顶部标签的位置和大小
        tabbedPane.setBounds(0,10,1285,70);

        //将标签添加入面板
        contentPane.add(tabbedPane);

        //new 一个面板
        final JPanel panel = new JPanel();

        // 使布局为空,否则就是默认居中,默认按钮大小,后面设置按钮的时候就不需要写位置、大小
        //panel.setLayout(null);

        //添加页面标签
        tabbedPane.addTab("管理", null, panel, null);

        //初始化文件选择组 并设置当前目录为用户默认目录
        chooser = new JFileChooser(".\\"+pathname);

        //设置值查找ky类型的文件(因为我们这个保存的文件类型是.ky)文件过滤器
        FileNameExtensionFilter fef = new FileNameExtensionFilter(".ky(日记文件)", "ky");

        //见找到的的文件传入文件组中
        chooser.setFileFilter(fef);

        //创建按钮
        JButton readBtn = new JButton("打开日记");

        //这个就不需要写  readBtn.setBounds(x,y,w,h); 因为上面那个布局是默认的,不是空

        //将按钮写入面板
        panel.add(readBtn);

        //添加点击事件(readBth按钮的)
        readBtn.addMouseListener(new MouseAdapter()
        {
            @Override
            public void mouseClicked(MouseEvent e)
            {
                //标记用户是否已经打开了文件,参数选择弹出文件选择器的位置
               int value = chooser.showOpenDialog(null);

                //得到文件名:
                String fileName = chooser.getSelectedFile().getName();

                //内部窗体(内部界面)的提示界面
                JInternalFrame internalFrame_Read = new JInternalFrame("读取"+fileName+"文件中的日记"
                        , false, true, false, false);

//                internalFrame_Read.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                //内部界面的大小
                internalFrame_Read.setBounds(350, 100, 584, 275);

                //将内部框架 添加到 总的 大的框体中
                contentPane.add(internalFrame_Read);

                //清空内部框架的布局
                internalFrame_Read.getContentPane().setLayout(null);

                //设置文本域 主要是显示 文本内容,是不能修改的
                JTextPane textPane = new JTextPane();

                //文本面板的大小
                textPane.setBounds(0, 0, 568, 246);

                //将文本显示框添加到内部框的面板上
                internalFrame_Read.getContentPane().add(textPane);

                //JTextPane没有append方法,所以使用Document来不断插入文本
                javax.swing.text.Document doc=textPane.getDocument();

                //背景颜色为黄色
                textPane.setBackground(Color.white);

                //设置为不可编辑
                textPane.setEditable(false);

                //if 如果 value 和 OPEN_DIALOG 值一致 则表示文件已打开
                if(value == JFileChooser.OPEN_DIALOG )
                {
                    //得到选中的文件
                    File file = chooser.getSelectedFile();

                    //文件的路径对于的文件是否存在
                    if(file.exists())
                    {
                        //将文件里的内容读出来
                        Diary.read(file,doc);
                        internalFrame_Read.setVisible(true);

                        //打开一次文件后就令文件状态为1,说明已经打开了
                    }
                }
            }
        });

        //创建按钮
        JButton createBtn = new JButton("创建日记");

        //将按钮添加到panel面板里
        panel.add(createBtn);

        //添加点击事件(createBtn按钮的)
        createBtn.addMouseListener(new MouseAdapter()
        {
            @Override
            public void mouseClicked(MouseEvent e)
            {
                //创建新建日记内部窗体
                final JInternalFrame internalFrame_Write = new JInternalFrame("创建日记",
                        false, true, false, false);

                //内部界面的大小
                internalFrame_Write.setBounds(350, 100, 584, 275);

                //将内部画板添加到contentPane面板中
                contentPane.add(internalFrame_Write);

                //设置总面板 内部框 的 面板布局为空
                internalFrame_Write.getContentPane().setLayout(null);


                /*----------------------输入标题---------------------*/
                textField = new JTextField();//设置  标题的输入框
                textField.setBounds(76, 0, 492, 21);//标题输入框的大小
                internalFrame_Write.getContentPane().add(textField);//将标题框写入内部画板里
                textField.setColumns(10);//输入内存的长度限定(不超过10个字符,不过好像也没用)

                JLabel label = new JLabel("标题:");//添加 输入框前面的提示标题
                label.setBounds(46, 3, 52, 15);
                label.setFont(new Font("华文新魏",Font.PLAIN,14));
                internalFrame_Write.getContentPane().add(label);//将label写入内部画板里
                /*----------------------输入标题---------------------*/


                //日记内容的编辑区的面板
                final JEditorPane editorPane = new JEditorPane();

                //面板大小
                editorPane.setBounds(5, 31, 563, 179);

                //将面板传入内部窗体
                internalFrame_Write.getContentPane().add(editorPane);

                //日记的保存功能按钮
                JButton save = new JButton("保存");

                //按钮的大小、位置
                save.setBounds(465, 213, 93, 23);

                //将按钮添加到内部窗体里
                internalFrame_Write.getContentPane().add(save);

                //添加点击事件(save按钮的)
                save.addMouseListener(new MouseAdapter()
                {
                    @Override
                    public void mouseClicked(MouseEvent e)
                    {
                        //获取日记的标题
                        String title = textField.getText();

                        //获取日记的内容
                        String contentTxt = editorPane.getText();

                        //将名称、标题、内容保存
                        Diary.create(pathname,title,contentTxt);

                        //点击保存后退出内部框架
                        internalFrame_Write.setVisible(false);
                    }
                });

                //当点击创建按钮时就会显示 日记的文本框
                internalFrame_Write.setVisible(true);
            }
        });


        //删除按钮
        JButton deleteBtn = new JButton("删除日记");

        //将按钮添加到外部面板(最外面的)中
        panel.add(deleteBtn);

        //添加点击事件(deleteBtn按钮的)
        deleteBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                //声明实现一个文件类
                File file;

                //弹出文件选择器,打开文件返回0
                int value=chooser.showOpenDialog(null);

                //判断是否选中文件
                if(value == JFileChooser.APPROVE_OPTION)
                {
                    //存储我们选中的文件
                    file=chooser.getSelectedFile();

                    //删除确认框,用于确定用户是否确定删除(确定返回0,取消返回1)
                    int x = JOptionPane.showConfirmDialog(panel,"确定要删除"
                            +file.getName()+"文件吗?","请选择",JOptionPane.YES_NO_OPTION);

                    //如果文件存在
                    if(file.exists())
                    {
                        //并且用户还点击了ok
                        if(x == JOptionPane.OK_OPTION)
                        {
                            //删除
                            file.delete();

                            //打印删除成功提示信息
                            JOptionPane.showMessageDialog(panel, "删除成功","提示信息", JOptionPane.PLAIN_MESSAGE);
                        }
                    }
                }
            }
        });

        //设置按钮
        JButton back = new JButton("返回登录");

        //将按钮添加到外部面板中
        panel.add(back);

        //添加点击事件(back按钮的)
        back.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                setVisible(false);//不显示现在所在界面
                new LoginGui().loginGui();//进入下一个界面
            }
        });

    }
}

猜你喜欢

转载自blog.csdn.net/qq_64552181/article/details/128047749