柏虎资源网

专注编程学习,Python、Java、C++ 教程、案例及资源

Java Swing 技术编写记事本工具全攻略,大厂后端开发必看!

你在互联网大厂做后端开发时,有没有遇到过这样的场景?临时需要记录一些代码片段、接口文档要点,却找不到一个趁手的工具?在线文档担心信息泄露,第三方记事本又怕携带过多冗余功能。其实,我们完全可以利用 Java Swing 技术,自己编写一个专属的记事本工具!不仅能满足个性化需求,还能提升自己的技术能力,一举两得!

Java Swing 作为 Java 基础类库的一部分,是一个强大且灵活的轻量级图形用户界面工具包。它基于 Java 的 “一次编写,到处运行” 理念,让开发者可以创建跨平台的图形化应用程序。在互联网大厂的很多项目中,虽然后端开发主要聚焦在业务逻辑、数据库交互等方面,但掌握 Swing 技术,在一些小型工具开发、内部辅助程序制作上,有着不可忽视的作用。而且,Swing 丰富的组件库,如JFrame、JTextArea、JMenuBar等,为我们编写记事本提供了极大的便利。

搭建基础框架

首先,我们需要创建一个JFrame作为记事本的主窗口。在 Java 中,JFrame是 Swing 应用程序的顶层容器,它提供了窗口的边框、标题栏以及关闭、最小化等基本操作功能。代码如下:

import javax.swing.JFrame;

public class Notepad {
    public static void main(String[] args) {
        JFrame frame = new JFrame("我的记事本");
        // 设置窗口的大小为800像素宽,600像素高
        frame.setSize(800, 600);
        // 设置当关闭窗口时,程序结束运行
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 使窗口可见,若不调用此方法,窗口将处于隐藏状态
        frame.setVisible(true);
    }
}

这段代码创建了一个标题为 “我的记事本”,大小为 800x600 像素,关闭窗口时退出程序的主窗口。不过,此时的窗口还只是一个空壳,没有任何实际功能。

添加文本编辑区域

接着,引入JTextArea组件,作为我们输入和编辑文本的区域,并将其添加到JFrame中。JTextArea是一个多行文本组件,用户可以在其中输入、修改和查看大量文本内容。

import javax.swing.JFrame;
import javax.swing.JTextArea;

public class Notepad {
    public static void main(String[] args) {
        JFrame frame = new JFrame("我的记事本");
        frame.setSize(800, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JTextArea textArea = new JTextArea();
        // 将文本编辑区域添加到主窗口中,默认情况下,组件会填充整个容器
        frame.add(textArea);
        frame.setVisible(true);
    }
}

但此时,如果输入的文本内容较多,超出了窗口的显示范围,用户就无法查看全部内容。为了解决这个问题,我们需要添加JScrollPane,它可以为组件提供滚动条,方便用户浏览长文本。

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Notepad {
    public static void main(String[] args) {
        JFrame frame = new JFrame("我的记事本");
        frame.setSize(800, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JTextArea textArea = new JTextArea();
        JScrollPane scrollPane = new JScrollPane(textArea);
        // 将带有滚动条的面板添加到主窗口,这样用户就能通过滚动条查看全部文本
        frame.add(scrollPane);
        frame.setVisible(true);
    }
}

构建菜单系统

我们还需要实现文件的打开、保存等功能,这就需要创建菜单系统。以创建 “文件” 菜单下的 “打开”“保存” 选项为例,通过菜单系统,用户可以方便地对文件进行各种操作。

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

public class Notepad {
    private JFrame frame;
    private JTextArea textArea;

    public Notepad() {
        frame = new JFrame("我的记事本");
        frame.setSize(800, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        textArea = new JTextArea();
        JScrollPane scrollPane = new JScrollPane(textArea);
        frame.add(scrollPane);

        JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("文件");

        JMenuItem openItem = new JMenuItem("打开");
        openItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JFileChooser fileChooser = new JFileChooser();
                // 显示文件打开对话框,等待用户选择文件
                int result = fileChooser.showOpenDialog(frame);
                if (result == JFileChooser.APPROVE_OPTION) {
                    File file = fileChooser.getSelectedFile();
                    try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
                        // 清空当前文本编辑区域的内容
                        textArea.setText("");
                        String line;
                        while ((line = reader.readLine()) != null) {
                            // 逐行读取文件内容,并添加到文本编辑区域
                            textArea.append(line + "\n");
                        }
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                }
            }
        });

        JMenuItem saveItem = new JMenuItem("保存");
        saveItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JFileChooser fileChooser = new JFileChooser();
                // 显示文件保存对话框,等待用户选择保存路径和文件名
                int result = fileChooser.showSaveDialog(frame);
                if (result == JFileChooser.APPROVE_OPTION) {
                    File file = fileChooser.getSelectedFile();
                    try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
                        // 将文本编辑区域的内容写入到文件中
                        writer.write(textArea.getText());
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                }
            }
        });

        fileMenu.add(openItem);
        fileMenu.add(saveItem);
        menuBar.add(fileMenu);
        frame.setJMenuBar(menuBar);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new Notepad();
    }
}

功能拓展

当然,一个完善的记事本工具远不止这些基础功能。我们还可以继续扩展,比如添加字体设置功能。通过JComboBox和JSpinner组件,用户可以选择不同的字体、字号和字体样式。实现该功能需要引入java.awt.Font类,通过它来设置文本区域的字体属性。

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

public class Notepad {
    private JFrame frame;
    private JTextArea textArea;
    private JComboBox<String> fontComboBox;
    private JSpinner fontSizeSpinner;
    private JCheckBox boldCheckBox;
    private JCheckBox italicCheckBox;

    public Notepad() {
        frame = new JFrame("我的记事本");
        frame.setSize(800, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        textArea = new JTextArea();
        JScrollPane scrollPane = new JScrollPane(textArea);

        String[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
        fontComboBox = new JComboBox<>(fonts);
        fontSizeSpinner = new JSpinner(new SpinnerNumberModel(12, 1, 100, 1));
        boldCheckBox = new JCheckBox("加粗");
        italicCheckBox = new JCheckBox("倾斜");

        JButton applyButton = new JButton("应用");
        applyButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String fontName = (String) fontComboBox.getSelectedItem();
                int fontSize = (int) fontSizeSpinner.getValue();
                int style = Font.PLAIN;
                if (boldCheckBox.isSelected()) {
                    style |= Font.BOLD;
                }
                if (italicCheckBox.isSelected()) {
                    style |= Font.ITALIC;
                }
                textArea.setFont(new Font(fontName, style, fontSize));
            }
        });

        JPanel fontPanel = new JPanel();
        fontPanel.add(new JLabel("字体:"));
        fontPanel.add(fontComboBox);
        fontPanel.add(new JLabel("字号:"));
        fontPanel.add(fontSizeSpinner);
        fontPanel.add(boldCheckBox);
        fontPanel.add(italicCheckBox);
        fontPanel.add(applyButton);

        JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("文件");
        // 省略文件菜单的打开、保存功能实现代码,与上述相同

        JMenu editMenu = new JMenu("编辑");
        // 后续可添加查找、替换等编辑功能
        menuBar.add(fileMenu);
        menuBar.add(editMenu);

        frame.add(scrollPane, BorderLayout.CENTER);
        frame.add(fontPanel, BorderLayout.NORTH);
        frame.setJMenuBar(menuBar);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new Notepad();
    }
}

另外,添加查找替换功能也是很实用的。可以使用JDialog创建一个查找替换对话框,通过JTextField获取用户输入的查找内容和替换内容,利用JTextArea的getText()和replaceAll()方法实现查找替换逻辑。

总结

掌握利用 Java Swing 技术编写记事本工具,不仅能解决我们日常开发中的小需求,更是一次对 Java 图形界面编程的深入实践。从基础框架的搭建,到功能模块的逐步实现,再到不断拓展完善,每一个环节都充满了挑战与乐趣。相信通过动手尝试,你的后端开发技能树又能点亮新的分支!如果你在编写过程中有任何疑问,或者有更好的功能扩展想法,欢迎在评论区留言讨论!也别忘了点赞、分享给同样在大厂做后端开发的小伙伴,一起提升技术能力!

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言