栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java简易文本编辑器(实现用户模拟登录,打开,保存,退出,剪切复制粘贴全选清空字体设置颜色选择器图片设置等)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java简易文本编辑器(实现用户模拟登录,打开,保存,退出,剪切复制粘贴全选清空字体设置颜色选择器图片设置等)

最近老师布置作业要我们搞个简易编辑器,没看题的我直接莽了,规定时间内还没做完(小菜鸡做了七个小时,从0到有TwT)

这次的编辑器主要实现以下功能

// 编写一个简易记事本,界面要求使用菜单栏和工具栏。

// 包括以下功能:

// •文本文件的新建、打开和保存,其中打开和保存文件时要求使用文件选择器

// •编辑功能:复制、粘贴、剪切、清空、全选

// •字体颜色设置:要求使用颜色选择器

// •字体样式设置:正常、粗体、倾斜

// •字体名称设置:宋体、黑体、幼圆

// •关于记事本的信息:要求使用一个对话框

// •设计一个登录面对话框,模拟用户登录(在记事本显示后,弹出该对话框,模拟验证用户合法性,非法用户重试3此后退出系统)

记事本信息那个我没写,别的博主应该有写的

下面直接放代码

 这是主文件,文件名JtextareaTester.java,下面还有两个用于用户登录的文件,所以没运行出来的uu不要急,一步一步来

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.plaf.FontUIResource;
import javax.swing.text.DefaultStyleddocument;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileOutputStream;
import java.io.*;
import java.util.Enumeration;
// 编写一个简易记事本,界面要求使用菜单栏和工具栏。
// 包括以下功能:
// •文本文件的新建、打开和保存,其中打开和保存文件时要求使用文件选择器
// •编辑功能:复制、粘贴、剪切、清空、全选
// •字体颜色设置:要求使用颜色选择器
// •字体样式设置:正常、粗体、倾斜
// •字体名称设置:宋体、黑体、幼圆
// •关于记事本的信息:要求使用一个对话框
// •设计一个登录面对话框,模拟用户登录(在记事本显示后,弹出该对话框,模拟验证用户合法性,非法用户重试3此后退出系统)

public class JtextareaTester extends Jframe implements ActionListener {
    //定义三个主菜单的名字
    private JMenu fileMenu,editMenu,SetFontmenu;
    //定义菜单栏下选项的名字
    private JMenuItem miNewFile, miOpen, miSave, miExit;//新建,打开,保存,退出
    private JMenuItem miCopy, miPaste, miCut, miSelectAll, miClearAll;//复制,粘贴,剪切,全选,清空
    private JMenuItem miSetFontSong,miSetFontHei,miSetFontYou,miSetBOLD,miSetITALIC;//同上,这几个是设置字体的
    //定义工具栏中名字
    private JButton btnCopy, btnPaste, btnCut, btnExit, btnColor;
    //文本窗口
    private Jtextarea ta;
    private final static String APP_NAME = "简易记事本";

    public JtextareaTester() {
        super(APP_NAME);//最上方名字
        this.setSize(1000, 1000);//编辑器大小
        this.setLocationRelativeTo(null); // 窗口置于显示屏的中央
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);//叉叉,不设置就无法真正关闭,然后就bug了

        // 菜单栏
        JMenuBar mb = new JMenuBar();
        this.setJMenuBar(mb);// 为窗体设置菜单栏

        // 菜单
        fileMenu = new JMenu("文件(F)");
        fileMenu.setMnemonic('F');
        SetFontmenu=new JMenu("设置字体(S)");
        SetFontmenu.setMnemonic('S');
        editMenu = new JMenu("编辑(E)");
        editMenu.setMnemonic('E');

        // 菜单添加到菜单栏
        mb.add(fileMenu);
        mb.add(editMenu);
        mb.add(SetFontmenu);

        miNewFile = new JMenuItem("新建", new ImageIcon("zuoye3/img/NewFile.png"));
        miNewFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_DOWN_MASK));//设置按键,也就是通常的ctrl+N
        miNewFile.addActionListener(new NewFileListener());//为菜单项注册事件监听器,找下面的class NewFileListener
        miOpen = new JMenuItem("打开", new ImageIcon("zuoye3/img/open.png"));
        miOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_DOWN_MASK));
        miOpen.addActionListener(this); // 这里混合使用一下,涉及到事件处理的三种方式,这里直接连接下面的public接口
        miSave = new JMenuItem("保存", new ImageIcon("zuoye3/img/save.png"));
        miSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_DOWN_MASK));
        miSave.addActionListener(new SaveListener());
        miExit = new JMenuItem("退出(X)", new ImageIcon("zuoye3/img/exit.png"));
        miExit.setMnemonic('X');
        miExit.addActionListener(this);

        miCopy = new JMenuItem("复制", new ImageIcon("zuoye3/img/copy.png"));
        miCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK));
        miCopy.addActionListener(new CopyListener());
        miPaste = new JMenuItem("粘贴", new ImageIcon("zuoye3/img/paste.png"));
        miPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_DOWN_MASK));
        miPaste.addActionListener(new PasteListener());
        miCut = new JMenuItem("剪切", new ImageIcon("zuoye3/img/cut.png"));
        miCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_DOWN_MASK));
        miCut.addActionListener(new cutListener());
        miSelectAll = new JMenuItem("全选", new ImageIcon("zuoye3/img/select all.png"));
        miSelectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_DOWN_MASK));
        miSelectAll.addActionListener(new SelectAllListener());
        miClearAll = new JMenuItem("清空", new ImageIcon("zuoye3/img/Clear all.png"));
        miClearAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, InputEvent.CTRL_DOWN_MASK));
        miClearAll.addActionListener(new ClearAllListener());

        miSetFontSong= new JMenuItem("宋体");
        miSetFontSong.addActionListener(new SongListener());
        miSetFontHei= new JMenuItem("黑体");
        miSetFontHei.addActionListener(new HeiListener());
        miSetFontYou= new JMenuItem("幼圆");
        miSetFontYou.addActionListener(new youListener());
        miSetBOLD=new JMenuItem("加粗");
        miSetBOLD.addActionListener(new boldListener());
        miSetITALIC=new JMenuItem("斜体");
        miSetITALIC.addActionListener(new italicListener());


        // 菜单项添加到菜单
        //文件
        fileMenu.add(miNewFile);
        fileMenu.add(miOpen);
        fileMenu.add(miSave);
        fileMenu.addSeparator(); // 分割线
        fileMenu.add(miExit);
        //编辑
        editMenu.add(miCopy);
        editMenu.add(miPaste);
        editMenu.add(miCut);
        editMenu.add(miClearAll);
        editMenu.addSeparator(); // 分割线
        editMenu.add(miSelectAll);
        //字体设置
        SetFontmenu.add(miSetFontSong);
        SetFontmenu.add(miSetFontHei);
        SetFontmenu.add(miSetFontYou);
        SetFontmenu.addSeparator(); // 分割线
        SetFontmenu.add(miSetBOLD);
        SetFontmenu.add(miSetITALIC);


        // 工具栏
        JToolBar tb = new JToolBar("编辑工具栏");
        ta = new Jtextarea();
        ta.setLineWrap(true); // 自动换行
        JScrollPane sp = new JScrollPane(ta);//按需求设置滚动条
        //下面设计图片的调用,在主文件的这个文件夹里面,创建一个子文件夹就行,然后里面存图片
        //比如说我这个JtextareaTester.java文件在文件下zuoye3下面,所以我在zuoye3里面建立img文件夹
        //这里路径要设置成相对路径,就是相对主文件所在的文件夹而言的路径,直接跨过D盘,从zuoye3进入开始找img
        btnCopy = new JButton(new ImageIcon("zuoye3/img/Copy.png"));
        btnCopy.setToolTipText("复制");//设置名字
        btnCopy.addActionListener(new CopyListener()); // 注册事件监听器,同上
        btnPaste = new JButton(new ImageIcon("zuoye3/img/Paste.png"));
        btnPaste.setToolTipText("粘贴");
        btnPaste.addActionListener(new PasteListener());
        btnCut = new JButton(new ImageIcon("zuoye3/img/cut.png"));
        btnCut.setToolTipText("剪切");
        btnCut.addActionListener(new cutListener());
        btnExit = new JButton(new ImageIcon("zuoye3/img/exit.png"));
        btnExit.setToolTipText("退出");
        btnExit.addActionListener(new ExitListener());
        btnColor = new JButton(new ImageIcon("zuoye3/img/color.png"));
        btnColor.setToolTipText("颜色");
        btnColor.addActionListener(new corlorListener());
        // 将按钮添加到工具栏
        tb.add(btnCopy);
        tb.add(btnPaste);
        tb.add(btnCut);
        tb.add(btnExit);
        tb.add(btnColor);
        //工具栏添加到文本窗口里面
        this.add(tb, "North");
        this.add(sp, "Center");
    }

    class NewFileListener implements ActionListener { // 新建————内部类
        public void actionPerformed(ActionEvent e) {
            ta.setdocument(new DefaultStyleddocument());//触发的方法
        }
    }

    class SaveListener implements ActionListener {// 保存
        public void actionPerformed(ActionEvent e) {
            JFileChooser filechooser = new JFileChooser(); // 文件选择器
            int i = filechooser.showSaveDialog(JtextareaTester.this);
            if (i == JFileChooser.APPROVE_OPTION) {
                File f = filechooser.getSelectedFile();
                try {
                    FileOutputStream out = new FileOutputStream(f);
                    out.write(ta.getText().getBytes());
                    out.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
    class CopyListener implements ActionListener { // 复制
        public void actionPerformed(ActionEvent e) {
            ta.copy();
        }
    }

    class PasteListener implements ActionListener { // 粘贴
        public void actionPerformed(ActionEvent e) {
            ta.paste();
        }
    }

    class cutListener implements ActionListener { // 剪切
        public void actionPerformed(ActionEvent e) {
            ta.cut();
        }
    }

    class ExitListener implements ActionListener { // 退出
        public void actionPerformed(ActionEvent e) {
            dispose();

        }
    }
    class corlorListener implements ActionListener { // 颜色选择
        public void actionPerformed(ActionEvent e){
            JButton btn=(JButton)e.getSource();
            if(btn==btnColor){
                Color color= JColorChooser.showDialog(JtextareaTester.this,"请选择颜色", Color.RED); // 颜色选择器
                if(color!=null) // 返回颜色不为null
                    ta.setForeground(color);
            }
        }
    }
    class SelectAllListener implements ActionListener { // 复制
        public void actionPerformed(ActionEvent e) {
            ta.selectAll();
        }
    }
    //ClearAll
    class ClearAllListener implements ActionListener { // 清空
        public void actionPerformed(ActionEvent e) {
            ta.setText("");
        }
    }
    class SongListener implements ActionListener { // 宋体
        public void actionPerformed(ActionEvent e) {
            Font font = new Font("宋体", Font.PLAIN, 16);
            ta.setFont(font);
        }
    }
    class HeiListener implements ActionListener { // 黑体
        public void actionPerformed(ActionEvent e) {
            Font font = new Font("黑体", Font.PLAIN, 16);
            ta.setFont(font);
        }
    }
    class youListener implements ActionListener { // 幼圆
        public void actionPerformed(ActionEvent e) {
            Font font = new Font("幼圆", Font.PLAIN, 16);
            ta.setFont(font);
        }
    }

    class boldListener implements ActionListener { //加粗
        public void actionPerformed(ActionEvent e) {
            Font f = new Font("TimesRoman", Font.BOLD, 16);
            ta.setFont(f);
        }
    }

    class italicListener implements ActionListener {//斜体
        public void actionPerformed(ActionEvent e) {
            Font f = new Font("TimesRoman", Font.ITALIC, 16);
            ta.setFont(f);
        }
    }


    //这里定义打开文件的功能
    public void actionPerformed(ActionEvent e) {
        JMenuItem mi = (JMenuItem) e.getSource();
        if (mi == miOpen) { // 打开文本文件
            JFileChooser fc = new JFileChooser(); // 文件选择器
            FileNameExtensionFilter filter = new FileNameExtensionFilter("文本文件(*.txt)", "txt");
            fc.addChoosableFileFilter(filter); // 添加一个过滤器
            filter = new FileNameExtensionFilter("THML文件(*.htm,*.html)", "htm", "html");
            fc.addChoosableFileFilter(filter);// 添加一个过滤器
            int returnVal = fc.showOpenDialog(this);// 显示打开文件对话框
            if (returnVal != JFileChooser.APPROVE_OPTION)// 判断用户操作
                return;
            String fileName = fc.getSelectedFile().getAbsolutePath(); // 获取用户选择的文件
            StringBuffer sb = new StringBuffer("");
            try {
                BufferedReader br = new BufferedReader(new FileReader(fileName));
                String str = br.readLine();
                while (str != null) {
                    sb.append(str + "n");
                    str = br.readLine();
                }
                br.close();
                ta.setText(sb.toString());
                this.setTitle(APP_NAME + "-" + fileName); // 窗体标题初始化
            } catch (Exception e1) {
                ta.setText(e1.getMessage());
            }
        }
    }

    // 初始化全局字体
    private static void initGlobalFont() {
        FontUIResource fontUIResource = new FontUIResource(new Font("宋体", Font.PLAIN, 16));
        for (Enumeration keys = UIManager.getDefaults().keys(); keys.hasMoreElements();) {
            Object key = keys.nextElement();
            Object value = UIManager.get(key);
            if (value instanceof FontUIResource) {
                UIManager.put(key, fontUIResource);
            }
        }
    }

    public static void main(String[] args) {

        initGlobalFont(); // 初始化全局所有字体
        JtextareaTester frm = new JtextareaTester();
        frm.setVisible(true);
        FrmUserLogin frmLogin = new FrmUserLogin(frm);
        frmLogin.setModal(true); // 设置为模式对话框
        frmLogin.setVisible(true); // 显示登录对话框
        //设置了三次登录错误自动退出
        int i=0;
        if (frmLogin.result != UserLoginResult.VALID) {
            if (frmLogin.result == UserLoginResult.INVALID){
                JOptionPane.showMessageDialog(frm, "用户账号错误!", "提示", JOptionPane.ERROR_MESSAGE); 
                i++;
                frmLogin.setModal(true);
                frmLogin.setVisible(true);
                if(i==1)  {
                    if (frmLogin.result != UserLoginResult.VALID) {
                        if (frmLogin.result == UserLoginResult.INVALID){
                            JOptionPane.showMessageDialog(frm, "用户账号错误!", "提示", JOptionPane.ERROR_MESSAGE);
                            i++;
                            frmLogin.setModal(true);
                            frmLogin.setVisible(true);
                            if(i==2)  {
                                if (frmLogin.result != UserLoginResult.VALID) {
                                    if (frmLogin.result == UserLoginResult.INVALID){
                                        JOptionPane.showMessageDialog(frm, "用户账号错误!", "提示", JOptionPane.ERROR_MESSAGE);
                                        System.exit(0);    
                                    }
                                }
                            }
                        }
                    }
                }   
            }
        }frm.getContentPane().setBackground(Color.GREEN);
    }
} 

图片可以去网上找,比如这个最新图标下载, 最新PNG ICO, Icons, 图标之家 (icosky.com)

以下两个文件不是自己编写的,只能说开源很有用,如果程序里面用不到用户登陆的检验的话,可以在主文件里面的main里面只写这些就好了

public static void main(String[] args) {

    initGlobalFont(); // 初始化全局所有字体
    JtextareaTester frm = new JtextareaTester();
    frm.setVisible(true);
}

需要用户验证的,不用管这一小段,直接1,2,3这三个文件复制粘贴改一改照片地址就能用

下面是这两个文件

第二个文件,文件名UserLoginResult.java  

这个用于检验用户

public enum UserLoginResult{
    VALID, //验证合法
    INVALID, //验证非法
    CANCEL //用户取消或关闭对话框
}

第三个文件,文件名FrmUserLogin.java,用户验证的主要程序

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

public class FrmUserLogin extends JDialog{ // 登录对话框
    UserLoginResult result=UserLoginResult.CANCEL;// 用户登录结果
    public FrmUserLogin(Jframe ower){
        super(ower,"用户登陆");
        this.setSize(260, 140);
        this.setLocationRelativeTo(ower); //窗口置于所依附窗体的中央
        this.setResizable(false);
        this.setDefaultCloseOperation(HIDE_ON_CLOSE);
        GridBagLayout layout=new GridBagLayout(); //网格包布局
        this.setLayout(layout); //给对话框容器设置布局管理器
        JLabel lblUserName=new JLabel("用户名:");
        JLabel lblpwd=new JLabel("密码:");
        JTextField txtUserName=new JTextField(15);
        JTextField txtpwd=new JPasswordField(15);
        JButton btnOK=new JButton("登陆");
        JButton btnCancel=new JButton("取消");
        GridBagConstraints st=new GridBagConstraints();
        st.fill=GridBagConstraints.NONE;
        st.anchor=GridBagConstraints.CENTER;
        add(lblUserName, set(st, 0, 0, 1, 1));
        add(txtUserName, set(st, 1, 0, 3, 1));
        add(lblpwd, set(st, 0, 1, 1, 1));
        add(txtpwd, set(st, 1, 1, 3, 1));
        add(btnOK, set(st, 1, 2, 1, 1));
        add(btnCancel, set(st, 2, 2, 1, 1));
        btnOK.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if(txtUserName.getText().trim().equals("ABC") &&txtpwd.getText().equals("123")){
                    result=UserLoginResult.VALID;
                }
                else{
                    result=UserLoginResult.INVALID;}
                setVisible(false); //关闭对话框
            }
        });
        btnCancel.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                result=UserLoginResult.CANCEL;
                setVisible(false); //关闭对话框
                System.exit(0); // 退出应用程序
            }
        });
    }
    // 修改约束对象的约束条件
    GridBagConstraints set(GridBagConstraints st, int x,int y,int w,int h){
        st.gridx=x;
        st.gridy=y;
        st.gridwidth=w; 
        st.gridheight=h;
        return st;
    }
}

以上肝了。。。。六个小时应该,有一些bug应该来不及修改,有能搞出来的,比如说用户登录那个窗口直接叉掉就不用登录了。。。。离谱哈哈哈

对了。账户密码的话,第三个文件里面设置了,账户ABC和密码123,可以自己改

以上,在校大学生,继续肝java

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号