Java Swing 技术编写记事本工具全攻略,大厂后端开发必看!
zhezhongyun 2025-06-24 18:07 3 浏览
你在互联网大厂做后端开发时,有没有遇到过这样的场景?临时需要记录一些代码片段、接口文档要点,却找不到一个趁手的工具?在线文档担心信息泄露,第三方记事本又怕携带过多冗余功能。其实,我们完全可以利用 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 图形界面编程的深入实践。从基础框架的搭建,到功能模块的逐步实现,再到不断拓展完善,每一个环节都充满了挑战与乐趣。相信通过动手尝试,你的后端开发技能树又能点亮新的分支!如果你在编写过程中有任何疑问,或者有更好的功能扩展想法,欢迎在评论区留言讨论!也别忘了点赞、分享给同样在大厂做后端开发的小伙伴,一起提升技术能力!
相关推荐
- DevExpress使用教程:GridView经验小结
-
下面是笔者自己总结的使用DevExpressGridview的一些经验小结,分享给大家:1、去除GridView头上的"Dragacolumnheaderheretogroup...
- ComponentOne 新版本发布,新增 .NET 6 和 Blazor 平台控件支持
-
ComponentOneEnterprise是葡萄城推出的一款内置300多种开发控件的.NET控件集,可满足WinForm、WPF、Blazor、ASP.NETMVC等平台下的系统开发...
- Wijmo5 Flexgrid基础教程:数据绑定
-
WijmoEnterprise下载>FlexGrid在JavaScript程序中启动添加Wijmo引用;添加wijmo控件的扩展;在JavaScript中初始化wijmo控件;(可选)添加cs...
- Wijmo5 Flexgrid基础教程:InlineEdit
-
WijmoEnterprise下载>对于flexgrid,可以直接在单元格内进行编辑。但另外还有一种编辑方式,即在一行添加按钮,统一的编辑和提交数据。本文主要介绍给flexgrid添加编辑按钮...
- WinForms Data Grid控件升级(winform devexpress控件)
-
告诉大家一个好消息:慧都将于近期隆重推出“DevExpress14.2新版发布会”。心动不如行动,赶快报名吧!我们期待与您相约DevExpress14.2新版发布会。>>新增Wind...
- XAML控件宽度为另一控件的一半、静态属性绑定
-
控件上当某些数据需要根据其他数据的变化而变化很多时候,想让某个控件的宽度或者高度是另一个已有控件的一半,一开始打算使用ObjectDataProvider来实现,因为在控件上当某些数据需要根据其他数据...
- 用 CSS Grid 布局制作一个响应式柱状图
-
最新一段时间比较喜欢玩弄图表,出于好奇,我想找出比较好的用CSS制作图表的方案。开始学习网上开源图表库,它对我学习新的和不熟悉的前端技术很有帮助,比如这个:CSSGrid。今天和大家分享我学到的...
- Grid 移动端双列瀑布流(移动端瀑布流布局)
-
预览图:原理合理使用Grid的属性:display:设置为grid指明当前容器为Grid布局grid-template-columns:定义每一列的列宽(百分比或绝对单位)grid-templa...
- DevExpress导出GridControl控件数据
-
前言:使用C#做桌面应用时,我们会常常使用Winform作为我们的开发界面,但是windows自带的控件由于长时间不更新,已经不能够满足当前开发需要所以使用DevExpress控件作为Winform...
- css grid 布局的那些事儿(css grid布局和flex布局)
-
CSSGrid是一种为Web开发创建网站布局的方式。它已经存在了很多年,随着更多浏览器的支持,它终于变得越来越流行。接下来我们将了解下CSSGrid及其工作原理。了解下它如何使用。CSS...
- Grid.js - 跨框架的前端表格插件(前端table框架)
-
只想简简单单画个表格,但React,Vue,Angular,…,这么多前端框架,各自都有不同的表格渲染库。就没有表格库能“一次画表,到处运行”吗?来看看Grid.js这个跨框架的前端表格插件吧!...
- WPF开发教程01-布局控件(wpf tablecontrol控件)
-
布局控件是用于进行控件布局的容器类控件,其内部控件按照一定规律自动排列,且在父控件改变大小时,会自动适应。常用布局控件如下:1.一维布局控件(StackPanel)其内部控件按照某个维度自动排列,排...
- wxPython - 高级控件之表格Grid(wxpython grid刷新数据)
-
实战wxPython系列-043wx.grid.Grid及其相关类用于显示和编辑表格数据。它们提供了一组丰富的功能,用于显示、编辑和与各种数据源交互。wx.grid.Grid是一个功能强大的但是又稍微...
- 前端 BFC、IFC、GFC 和 FFC,这些你都知道吗?
-
如果觉得我的文章不错,可以关注我,想要看其他的进阶知识可以查看我发布过的文章!编辑搜图请点击输入图片描述BFC(Blockformattingcontexts):块级格式上下文页面上的一个隔离的...
- 20多个好用的 Vue 组件库,请查收
-
在本文中,我们将探讨一些最常见的vuejs组件。你可以收藏一波。VueTables-2地址:https://github.com/matfish2/vue-tables-2VueTables2...
- 一周热门
- 最近发表
-
- DevExpress使用教程:GridView经验小结
- ComponentOne 新版本发布,新增 .NET 6 和 Blazor 平台控件支持
- Wijmo5 Flexgrid基础教程:数据绑定
- Wijmo5 Flexgrid基础教程:InlineEdit
- WinForms Data Grid控件升级(winform devexpress控件)
- XAML控件宽度为另一控件的一半、静态属性绑定
- 用 CSS Grid 布局制作一个响应式柱状图
- Grid 移动端双列瀑布流(移动端瀑布流布局)
- DevExpress导出GridControl控件数据
- css grid 布局的那些事儿(css grid布局和flex布局)
- 标签列表
-
- HTML 教程 (33)
- HTML 简介 (35)
- HTML 实例/测验 (32)
- HTML 测验 (32)
- JavaScript 和 HTML DOM 参考手册 (32)
- HTML 拓展阅读 (30)
- HTML常用标签 (29)
- 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)
- HTML button formtarget 属性 (30)
- CSS 水平对齐 (Horizontal Align) (30)