Java Swing实现带简易加密功能的记事本
在桌面端应用开发中,使用Java Swing构建图形化用户界面是理解事件驱动编程的经典案例。本文将详细介绍如何从零实现一个功能完善的Java记事本程序,涵盖窗口布局、文件操作以及核心的文本加密逻辑,旨在提供一份可直接编译运行的完整代码方案。
整体架构与界面设计
记事本的核心在于提供一个直观的操作环境。本实现采用Java AWT/Swing组件库,以JFrame作为顶层容器,利用BorderLayout将屏幕划分为不同区域:
- 顶部(North):放置
JToolBar工具栏,包含字体选择下拉框、字号设置、粗斜体复选框及字体颜色选取按钮,用于实时调整编辑区文字样式。 - 中部(Center):核心编辑区域,由
JTextArea和JScrollPane组合而成,支持长文本滚动浏览。 - 顶层菜单(MenuBar):集成“文件”菜单,下辖新建、打开和保存三个交互入口。
第一步:初始化主窗口与菜单结构
在主构造函数中,首先实例化框架并设定大小与关闭行为。随后构建菜单栏,为每个菜单项绑定对应的动作监听器。这种解耦方式便于后续维护具体业务逻辑。
// 创建主窗口
JFrame frame = new JFrame("记事本");
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 构建菜单
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("文件");
JMenuItem newItem = new JMenuItem("新建");
newItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 清除编辑区文本,重置文件名标识
contentArea.setText("");
fileName = null;
}
});
fileMenu.add(newItem);
menuBar.add(fileMenu);
frame.setJMenuBar(menuBar);
第二步:配置工具栏编辑功能
编辑体验依赖于样式的实时切换。字体列表通过GraphicsEnvironment获取系统可用字体;字号和样式则通过监听下拉框和复选框的状态变化更新当前选中文本的属性。颜色选取器调用JColorChooser标准对话框。
// 添加字体选择器
String[] fontNames = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
JComboBox fontCom = new JComboBox<>(fontNames);
fontCom.addActionListener(e -> {
String selected = (String) fontCom.getSelectedItem();
Font current = contentArea.getFont();
contentArea.setFont(new Font(selected, current.getStyle(), current.getSize()));
});
// ... 其他样式控件同理 ...
第三步:实现文件打开与保存逻辑
文件交互依赖JFileChooser。对于新建的文件或已确认路径的保存操作,程序会检查内存中的文件名变量。如果路径存在,直接覆盖写入;如果尚未保存,则触发保存对话框让用户指定路径。
这里的关键点在于读取文件时的解密预处理,以及写入文件时的加密后处理。通过自定义IO辅助类完成这一过程,对最终用户保持“无感”。
安全存储:字符加密原理
为防止本地文件被直接篡改或未授权访问,程序实现了基于ASCII码的简单移位加密算法。规则如下:
- 加密:遍历字符串字符,若其ASCII值在有效范围内,则累加固定偏移量(如10),结果对256取模,保证数值仍在单字节范围内。
- 解密:读取时执行逆运算,先减去偏移量,再对256取模,还原原始字符。
经过此处理的文本,直接在外部编辑器(如Windows记事本)中打开将显示为乱码或符号,有效保护隐私内容。
当通过本程序点击“打开”时,后台会自动解码,确保用户看到的是正常可读的内容。
核心源码参考
完整的IO加密实现代码如下:
public class TextTool {
// 读取并解密
public static String read(String fileName) throws IOException {
StringBuilder sb = new StringBuilder();
try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {
String line;
while ((line = br.readLine()) != null) {
sb.append(decoding(line)).append("\n");
}
}
return sb.toString();
}
// 写入前加密
public static void write(String fileName, String content) throws IOException {
String encodedContent = encoding(content);
try (FileWriter fw = new FileWriter(fileName)) {
fw.write(encodedContent);
fw.flush();
}
}
private static String encoding(String str) {
StringBuilder res = new StringBuilder();
for (char c : str.toCharArray()) {
if (c >= 0 && c < 255) {
res.append((char)((c + 10) % 256));
} else {
res.append(c);
}
}
return res.toString();
}
private static String decoding(String str) {
StringBuilder res = new StringBuilder();
for (char c : str.toCharArray()) {
if (c >= 0 && c < 255) {
res.append((char)((c - 10 + 256) % 256));
} else {
res.append(c);
}
}
return res.toString();
}
}
以上就是基于Java Swing开发简易记事本与数据加密的详细内容,更多关于Java GUI编程的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









