java制作简单记事本.

1、利用学过的布局、容器、组件知识,搭建一个如下图的记事本界面。

2、利用下拉列表和按钮的监听事件,实现改变文本框和文本域的字体样式和颜色。

  • 效果展示

Java设计记事本需求分析 用java制作记事本思路_idea

  •  代码实现
package test;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.*;
import java.util.Date;

public class NotepadDemo extends JFrame {
    //创建菜单条
    JMenuBar menuBar;
    //菜单
    JMenu fileMenu,editMenu,formatMenu,viewMenu,helpMenu;
    //"文件"的菜单项
    JMenuItem fileMenu_Open,fileMenu_Save,fileMenu_Exit;
    //“编辑”的菜单项
    JMenuItem editMenu_TimeDate;
    //“工具”的菜单项
    JMenuItem toolMenu_form;
    //“查看”的菜单项
    JMenuItem viewMenu_Status;
    //“帮助”的菜单项
    JMenuItem helpMenu_viewHelp,helpMenu_AboutNotepad;
    //创建工具栏
    JToolBar toolbar;
    //下拉列表框
    JComboBox JComboBox_fontName,JComboBox_fontStyle,JComboBox_fontSize,JComboBox_fontColor;
    JPanel JPanel_textField_textArea,JPanel_textField,JPanel_textArea,JPanel_jLabel;
    //添加按钮
    JButton jb_add;
    //文本框
    JTextField jtf;
    //文本域
    JTextArea textArea;
    //为文本域添加滚动条变量
    JScrollPane JScrollPane_textArea;
    //底部标签
    JLabel jl;
    //设置文本域默认字体
    Font textArea_defaultFont;
    //各下拉列表框的数组
    String[] fontName,fontStyle,fontSize,fontColor;
    //字体监听区变量
    String name="楷体",text_Style;
    int type;
    int size=16;

    //设置边框的特性是立体的边界:突起
    Border etched = BorderFactory.createEtchedBorder(EtchedBorder.RAISED);

    public NotepadDemo(){

        //设置标题
        this.setTitle("记事本");

        //设置窗口位置大小
        this.setBounds(400,200,700,500);

        //设置窗体背景颜色
        this.setBackground(Color.pink);
        //this.getContentPane().setBackground(Color.black);

        //设置窗口布局方式
        this.setLayout(new BorderLayout());

        //创建菜单栏
        menuBar = new JMenuBar();
        menuBar.setBackground(new Color(53,231,244));

        //创建菜单
        fileMenu = new JMenu("文件(F)");
        editMenu = new JMenu("编辑(E)");
        formatMenu = new JMenu("工具(T)");
        viewMenu = new JMenu("查看(V)");
        helpMenu = new JMenu("帮助(H)");

        //将菜单添加到菜单栏中
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        menuBar.add(formatMenu);
        menuBar.add(viewMenu);
        menuBar.add(helpMenu);

        //创建菜单项
        fileMenu_Open = new JMenuItem("打开(O)");
        fileMenu_Save = new JMenuItem("保存(S)");
        editMenu_TimeDate = new JMenuItem("时间日期");
        viewMenu_Status = new JMenuItem("状态栏");
        helpMenu_viewHelp = new JMenuItem("查看帮助");
        helpMenu_AboutNotepad = new JMenuItem("关于记事本");
        fileMenu_Exit = new JMenuItem("退出(X)");
        toolMenu_form = new JMenuItem("表格(B)");

        //将菜单项添加到菜单中
        fileMenu.add(fileMenu_Open);
        fileMenu.add(fileMenu_Save);
        fileMenu.addSeparator();
        fileMenu.add(fileMenu_Exit);
        editMenu.add(editMenu_TimeDate);
        formatMenu.add(toolMenu_form);
        viewMenu.add(viewMenu_Status);
        helpMenu.add(helpMenu_viewHelp);
        helpMenu.add(helpMenu_AboutNotepad);

        //创建工具栏
        toolbar = new JToolBar();
        toolbar.setBackground(new Color(180,231,29));
        toolbar.setLayout(new FlowLayout(FlowLayout.LEFT));

        //创建标签
        jl = new JLabel("Made in 小李");

        //创建面板
        JPanel_textField_textArea = new JPanel();
        JPanel_textField = new JPanel();
        JPanel_textField.setBackground(new Color(200,191,231));
        JPanel_textArea = new JPanel();
        JPanel_jLabel = new JPanel();
        JPanel_textField_textArea.setLayout(new BorderLayout());
        JPanel_textArea.setLayout(new GridLayout());
        JPanel_textField_textArea.add(JPanel_textField,BorderLayout.NORTH);
        JPanel_textField_textArea.add(JPanel_textArea,BorderLayout.CENTER);

        //字体数组
        fontName=GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
        fontStyle= new String[]{"常规", "粗体", "斜体", "粗斜体"};
        fontSize= new String[]{"8", "9", "10", "11", "12", "14", "16", "18", "20", "22", "24", "26", "28", "36", "48", "72"};
        fontColor= new String[]{"黑色","红色", "绿色", "黄色", "粉色"};

        //创建下拉列表框
        JComboBox_fontName = new JComboBox(fontName);
        JComboBox_fontName.setEditable(true);
        JComboBox_fontName.setBackground(new Color(254,218,234));
        JComboBox_fontStyle = new JComboBox(fontStyle);
        JComboBox_fontStyle.setEditable(true);
        JComboBox_fontStyle.setBackground(new Color(254,218,234));
        JComboBox_fontSize = new JComboBox(fontSize);
        JComboBox_fontSize.setEditable(true);
        JComboBox_fontSize.setBackground(new Color(254,218,234));
        JComboBox_fontColor = new JComboBox(fontColor);
        JComboBox_fontColor.setEditable(true);
        JComboBox_fontColor.setBackground(new Color(254,218,234));

        //设置下拉列表框的大小
        JComboBox_fontName.setMinimumSize(new Dimension(110,35));

        //设置边框特性
        JComboBox_fontName.setBorder(etched);
        JComboBox_fontStyle.setBorder(etched);
        JComboBox_fontSize.setBorder(etched);
        JComboBox_fontColor.setBorder(etched);
        toolbar.setBorder(etched);

        //将列表框添加到工具栏中
        toolbar.add(JComboBox_fontName);
        toolbar.add(JComboBox_fontStyle);
        toolbar.add(JComboBox_fontSize);
        toolbar.add(JComboBox_fontColor);

        //创建按钮
        jb_add = new JButton("添加");
        jb_add.setBackground(new Color(248,139,239));

        //创建文本框
        jtf = new JTextField(60);
        jtf.setBackground(new Color(239,228,176));

        //创建文本域
        textArea = new JTextArea();
        textArea.setWrapStyleWord(true);
        textArea.setLineWrap(true);
        textArea.setBackground(new Color(200,191,231));

        //文本域默认全局字体
        textArea_defaultFont = new Font("微软雅黑",Font.PLAIN,16);
        textArea.setFont(textArea_defaultFont);

        //为文本域添加滚动条
        JScrollPane_textArea = new JScrollPane(textArea);
        JScrollPane_textArea.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        JScrollPane_textArea.setBorder(etched);

        //面板添加
        JPanel_textField.add(jtf);
        JPanel_textField.add(jb_add);
        JPanel_textArea.add(JScrollPane_textArea);
        JPanel_jLabel.add(jl,FlowLayout.LEFT);

        //窗口添加
        this.setJMenuBar(menuBar);//菜单栏
        this.add(toolbar,BorderLayout.NORTH);//工具栏
        this.add(JPanel_textField_textArea,BorderLayout.CENTER);//面板1
        this.add(JPanel_jLabel,BorderLayout.SOUTH);//面板4



        //设置窗体可见和关闭事件
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    //选项监听事件方法
   public void actionListener(){

        //按钮监听事件
        jb_add.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String s = jtf.getText();
                textArea.setText(s);
                JOptionPane.showMessageDialog(null, "添加成功!");
                jtf.setText("");
            }
        });

        //工具监听事件
       toolMenu_form.addActionListener(new ActionListener() {
           @Override
           public void actionPerformed(ActionEvent e) {
               JOptionPane.showMessageDialog(null,"抱歉,此功能尚未实现!!!","警告",JOptionPane.WARNING_MESSAGE);
           }
       });

        //选项文件打开监听事件
       fileMenu_Open.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JFrame jf = new JFrame();
                FileDialog fdopen = new FileDialog(jf, "打开(O)", FileDialog.LOAD);
                fdopen.setVisible(true);
                BufferedReader in = null;
                try {
                    in = new BufferedReader(new FileReader(fdopen.getDirectory() + fdopen.getFile()));
                } catch (FileNotFoundException ex) {
                    ex.printStackTrace();
                }
                String str = null;
                while(true) {
                    try {
                        if (!((str = in.readLine()) != null)) break;
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                    byte[] bytes = str.getBytes();
                    String s = new String(bytes);
                    textArea.setText(s);
                }
                try {
                    in.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }

            }
        });

       //选项文件保存监听事件
       fileMenu_Save.addActionListener(new ActionListener() {
           @Override
           public void actionPerformed(ActionEvent e) {
               JFrame jf = new JFrame();
               FileDialog fd = new FileDialog(jf, "保存(S)", FileDialog.SAVE);
               fd.setVisible(true);
               String path = fd.getDirectory();//获取路径
               String filename = fd.getFile();//获取文件名
               try {
                   FileOutputStream out = new FileOutputStream(path + filename, false);
                   String s = textArea.getText();//输出到文件
                   byte[] b = s.getBytes();
                   out.write(b);
                   out.close();
               } catch (IOException ex) {
                   System.out.println(ex);
               }
           }
       });

        //编辑选项时间日期监听事件
       editMenu_TimeDate.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Date date = new Date();
                String sj = new String(String.valueOf(date));
                textArea.setText(sj);
            }
        });

        //状态栏监听事件
       viewMenu_Status.addActionListener(new ActionListener() {
           @Override
           public void actionPerformed(ActionEvent e) {
               JOptionPane.showMessageDialog(null,"抱歉,此功能尚未实现!!!","警告",JOptionPane.WARNING_MESSAGE);
           }
       });

       //查看帮助监听事件
       helpMenu_viewHelp.addActionListener(new ActionListener() {
           @Override
           public void actionPerformed(ActionEvent e) {
               JOptionPane.showMessageDialog(null,"抱歉,此功能尚未实现!!!","警告",JOptionPane.WARNING_MESSAGE);
           }
       });

       //关于记事本监听事件
       helpMenu_AboutNotepad .addActionListener(new ActionListener() {
           @Override
           public void actionPerformed(ActionEvent e) {

               JOptionPane.showMessageDialog(null,
                       "============================================\n"+
                               " 编写者:Alan_木子李                                \n"+
                               " 编写时间:2022-04-30                         \n"+
                               " 不足之处,一起交流学习。                                \n"+
                               "                 -------------Flighting-------------\n"+
                               "欢迎使用!!!                                 \n"+
                               "============================================\n",
                       "记事本",JOptionPane.INFORMATION_MESSAGE);

           }
       });

       //文件选项退出监听事件
       fileMenu_Exit.addActionListener(new ActionListener() {
           @Override
           public void actionPerformed(ActionEvent e) {
               System.exit(0);
           }
       });
    }

    //字体设置方法
    public void setTextAreaFont(String name,int type,int size){

        textArea.setFont(new Font(name,type,size));
        jtf.setFont(new Font(name,type,12));

    }


    //列表项监听事件
    public void ItemListener(){
        //字体fontName监听
        JComboBox_fontName.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                final DefaultComboBoxModel model = new DefaultComboBoxModel(fontName);
                if (model.getIndexOf(e.getItem()) < 0) {
                    model.addElement(e.getItem());
                }
                name=(String) e.getItem();
                setTextAreaFont(name,type,size);
            }
        });

        //字体fontStyle监听
        JComboBox_fontStyle.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                final DefaultComboBoxModel model = new DefaultComboBoxModel(fontStyle);
                if (model.getIndexOf(e.getItem()) < 0) {
                    model.addElement(e.getItem());
                }
               text_Style=(String) e.getItem();
                if (text_Style.equals("常规")){

                    type=Font.PLAIN;

                } else if (text_Style.equals("粗体" )){

                    type=Font.BOLD;

                } else if(text_Style.equals("斜体" )){

                    type=Font.ITALIC;

                }else{

                    type=Font.ITALIC+Font.BOLD;
                }
                setTextAreaFont(name,type,size);
            }
        });
        //字体fontSize监听
        JComboBox_fontSize.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                final DefaultComboBoxModel model = new DefaultComboBoxModel(fontSize);
                if (model.getIndexOf(e.getItem()) < 0) {
                    model.addElement(e.getItem());
                }
                String s=(String) e.getItem();
                size=Integer.parseInt(s);
                setTextAreaFont(name,type,size);
            }
        });
        //字体fontColor监听
        JComboBox_fontColor.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                final DefaultComboBoxModel model = new DefaultComboBoxModel(fontColor);
                if (model.getIndexOf(e.getItem()) < 0) {
                    model.addElement(e.getItem());
                }
                String int_color = (String) e.getItem();
                if(int_color.equals("黑色")){

                    jtf.setForeground(Color.black);
                    textArea.setForeground(Color.black);

                }else if(int_color.equals("红色")){

                    jtf.setForeground(Color.RED);
                    textArea.setForeground(Color.red);

                }else if(int_color.equals("绿色")){

                    jtf.setForeground(Color.green);
                    textArea.setForeground(Color.green);

                }else if(int_color.equals("黄色")){

                    jtf.setForeground(Color.yellow);
                    textArea.setForeground(Color.yellow);

                }else{

                    jtf.setForeground(Color.pink);
                    textArea.setForeground(Color.pink);

                }
            }
        });
    }

    public static void main(String[] args) {
        NotepadDemo nd = new NotepadDemo();
        nd.actionListener();
        nd.ItemListener();
        //nd.setTextAreaFont(nd.name, nd.type, nd.size);
    }
}