Java Swing 技术编写记事本工具全攻略,大厂后端开发必看!
zhezhongyun 2025-06-24 18:07 30 浏览
你在互联网大厂做后端开发时,有没有遇到过这样的场景?临时需要记录一些代码片段、接口文档要点,却找不到一个趁手的工具?在线文档担心信息泄露,第三方记事本又怕携带过多冗余功能。其实,我们完全可以利用 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 图形界面编程的深入实践。从基础框架的搭建,到功能模块的逐步实现,再到不断拓展完善,每一个环节都充满了挑战与乐趣。相信通过动手尝试,你的后端开发技能树又能点亮新的分支!如果你在编写过程中有任何疑问,或者有更好的功能扩展想法,欢迎在评论区留言讨论!也别忘了点赞、分享给同样在大厂做后端开发的小伙伴,一起提升技术能力!
相关推荐
- Python入门学习记录之一:变量_python怎么用变量
-
写这个,主要是对自己学习python知识的一个总结,也是加深自己的印象。变量(英文:variable),也叫标识符。在python中,变量的命名规则有以下三点:>变量名只能包含字母、数字和下划线...
- python变量命名规则——来自小白的总结
-
python是一个动态编译类编程语言,所以程序在运行前不需要如C语言的先行编译动作,因此也只有在程序运行过程中才能发现程序的问题。基于此,python的变量就有一定的命名规范。python作为当前热门...
- Python入门学习教程:第 2 章 变量与数据类型
-
2.1什么是变量?在编程中,变量就像一个存放数据的容器,它可以存储各种信息,并且这些信息可以被读取和修改。想象一下,变量就如同我们生活中的盒子,你可以把东西放进去,也可以随时拿出来看看,甚至可以换成...
- 绘制学术论文中的“三线表”具体指导
-
在科研过程中,大家用到最多的可能就是“三线表”。“三线表”,一般主要由三条横线构成,当然在变量名栏里也可以拆分单元格,出现更多的线。更重要的是,“三线表”也是一种数据记录规范,以“三线表”形式记录的数...
- Python基础语法知识--变量和数据类型
-
学习Python中的变量和数据类型至关重要,因为它们构成了Python编程的基石。以下是帮助您了解Python中的变量和数据类型的分步指南:1.变量:变量在Python中用于存储数据值。它们充...
- 一文搞懂 Python 中的所有标点符号
-
反引号`无任何作用。传说Python3中它被移除是因为和单引号字符'太相似。波浪号~(按位取反符号)~被称为取反或补码运算符。它放在我们想要取反的对象前面。如果放在一个整数n...
- Python变量类型和运算符_python中变量的含义
-
别再被小名词坑哭了:Python新手常犯的那些隐蔽错误,我用同事的真实bug拆给你看我记得有一次和同事张姐一起追查一个看似随机崩溃的脚本,最后发现罪魁祸首竟然是她把变量命名成了list。说实话...
- 从零开始:深入剖析 Spring Boot3 中配置文件的加载顺序
-
在当今的互联网软件开发领域,SpringBoot无疑是最为热门和广泛应用的框架之一。它以其强大的功能、便捷的开发体验,极大地提升了开发效率,成为众多开发者构建Web应用程序的首选。而在Spr...
- Python中下划线 ‘_’ 的用法,你知道几种
-
Python中下划线()是一个有特殊含义和用途的符号,它可以用来表示以下几种情况:1在解释器中,下划线(_)表示上一个表达式的值,可以用来进行快速计算或测试。例如:>>>2+...
- 解锁Shell编程:变量_shell $变量
-
引言:开启Shell编程大门Shell作为用户与Linux内核之间的桥梁,为我们提供了强大的命令行交互方式。它不仅能执行简单的文件操作、进程管理,还能通过编写脚本实现复杂的自动化任务。无论是...
- 一文学会Python的变量命名规则!_python的变量命名有哪些要求
-
目录1.变量的命名原则3.内置函数尽量不要做变量4.删除变量和垃圾回收机制5.结语1.变量的命名原则①由英文字母、_(下划线)、或中文开头②变量名称只能由英文字母、数字、下画线或中文字所组成。③英文字...
- 更可靠的Rust-语法篇-区分语句/表达式,略览if/loop/while/for
-
src/main.rs://函数定义fnadd(a:i32,b:i32)->i32{a+b//末尾表达式}fnmain(){leta:i3...
- C++第五课:变量的命名规则_c++中变量的命名规则
-
变量的命名不是想怎么起就怎么起的,而是有一套固定的规则的。具体规则:1.名字要合法:变量名必须是由字母、数字或下划线组成。例如:a,a1,a_1。2.开头不能是数字。例如:可以a1,但不能起1a。3....
- Rust编程-核心篇-不安全编程_rust安全性
-
Unsafe的必要性Rust的所有权系统和类型系统为我们提供了强大的安全保障,但在某些情况下,我们需要突破这些限制来:与C代码交互实现底层系统编程优化性能关键代码实现某些编译器无法验证的安全操作Rus...
- 探秘 Python 内存管理:背后的神奇机制
-
在编程的世界里,内存管理就如同幕后的精密操控者,确保程序的高效运行。Python作为一种广泛使用的编程语言,其内存管理机制既巧妙又复杂,为开发者们提供了便利的同时,也展现了强大的底层控制能力。一、P...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 教程 (33)
- HTML 简介 (35)
- HTML 实例/测验 (32)
- HTML 测验 (32)
- JavaScript 和 HTML DOM 参考手册 (32)
- HTML 拓展阅读 (30)
- HTML文本框样式 (31)
- HTML滚动条样式 (34)
- HTML5 浏览器支持 (33)
- HTML5 新元素 (33)
- HTML5 WebSocket (30)
- HTML5 代码规范 (32)
- HTML5 标签 (717)
- HTML5 标签 (已废弃) (75)
- HTML5电子书 (32)
- HTML5开发工具 (34)
- HTML5小游戏源码 (34)
- HTML5模板下载 (30)
- HTTP 状态消息 (33)
- HTTP 方法:GET 对比 POST (33)
- 键盘快捷键 (35)
- 标签 (226)
- opacity 属性 (32)
- transition 属性 (33)
- 1-1. 变量声明 (31)
