利用JAVAswing实现的一个简单的文本编辑框(超全注释)
概述
我写的这个小练手实现了一个简单的文本编辑器,允许用户打开、编辑、保存和另存文本文件,并提供更改字体、字体大小和字体颜色的功能。还包含一个帮助菜单,为用户提供使用指南。
- 文件操作:
- 打开文件:从本地磁盘读取文本文件并显示其内容。
- 保存文件:将编辑后的文本保存到当前文件。
- 另存为:将编辑后的文本保存到指定的新文件。
- 编辑功能:
- 改变字体:允许用户选择不同的字体。
- 改变字号大小:允许用户选择不同的字体大小。
- 改变字体颜色:允许用户选择不同的字体颜色。
- 帮助功能:
- 提供一个简单的帮助对话框,向用户解释如何使用该文本编辑器。
4.此后就是这个的未来扩展(设想)
未来可以进一步扩展本程序,增加以下功能:
- 查找和替换文本。
- 支持更多文件格式(如RTF、HTML)。
- 提供撤销和重做功能。
- 增加更多文本编辑选项,如下划线等。
- 增加打印功能。
![]()
下面是完整的源码
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
public class TextEditorGUI extends JFrame implements ActionListener {
private static final long serialVersionUID = -525984173220596873L;
private JTextArea textArea;
private JFileChooser fileChooser;
private File currentFile;
public TextEditorGUI() {
setTitle("文本编辑器"); // 设置窗口标题
setSize(600, 400); // 设置窗口大小
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置关闭操作
setLocationRelativeTo(null); // 窗口居中
textArea = new JTextArea(); // 创建文本区域
JScrollPane scrollPane = new JScrollPane(textArea); // 将文本区域放在滚动窗格中
JMenuBar menuBar = new JMenuBar(); // 创建菜单栏
// 文件菜单
JMenu fileMenu = new JMenu("文件");
JMenuItem openMenuItem = new JMenuItem("打开文件"); // 打开文件菜单项
JMenuItem saveMenuItem = new JMenuItem("保存"); // 保存菜单项
JMenuItem saveAsMenuItem = new JMenuItem("保存为"); // 另存为菜单项
openMenuItem.addActionListener(this);
saveMenuItem.addActionListener(this);
saveAsMenuItem.addActionListener(this);
fileMenu.add(openMenuItem);
fileMenu.add(saveMenuItem);
fileMenu.add(saveAsMenuItem);
// 编辑菜单
JMenu editMenu = new JMenu("编辑");
JMenuItem fontMenuItem = new JMenuItem("字体"); // 字体菜单项
JMenuItem fontSizeMenuItem = new JMenuItem("字号大小"); // 字号大小菜单项
JMenuItem fontColorMenuItem = new JMenuItem("字体颜色"); // 字体颜色菜单项
fontMenuItem.addActionListener(this);
fontSizeMenuItem.addActionListener(this);
fontColorMenuItem.addActionListener(this);
editMenu.add(fontMenuItem);
editMenu.add(fontSizeMenuItem);
editMenu.add(fontColorMenuItem);
// 帮助菜单
JMenu helpMenu = new JMenu("帮助");
JMenuItem helpMenuItem = new JMenuItem("具体帮助"); // 帮助菜单项
helpMenuItem.addActionListener(this);
helpMenu.add(helpMenuItem);
menuBar.add(fileMenu); // 添加文件菜单到菜单栏
menuBar.add(editMenu); // 添加编辑菜单到菜单栏
menuBar.add(helpMenu); // 添加帮助菜单到菜单栏
setJMenuBar(menuBar); // 设置窗口的菜单栏
add(scrollPane, BorderLayout.CENTER); // 将滚动窗格添加到窗口中心
fileChooser = new JFileChooser(); // 创建文件选择器
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); // 设置仅选择文件
setVisible(true); // 使窗口可见
}
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
switch (command) {
case "打开文件":
int returnValue = fileChooser.showOpenDialog(this);
if (returnValue == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
currentFile = selectedFile;
readFile(selectedFile); // 读取选中的文件
}
break;
case "保存":
if (currentFile != null) {
saveFile(currentFile); // 保存当前文件
} else {
saveAsFile(); // 另存为新文件
}
break;
case "保存为":
saveAsFile(); // 另存为新文件
break;
case "字体":
chooseFont(); // 选择字体
break;
case "字号大小":
chooseFontSize(); // 选择字号大小
break;
case "字体颜色":
chooseFontColor(); // 选择字体颜色
break;
case "具体帮助":
showHelp(); // 显示帮助信息
break;
}
}
// 读取文件内容到文本区域
private void readFile(File file) {
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
textArea.setText("");
String line;
while ((line = reader.readLine()) != null) {
textArea.append(line + "\n");
}
} catch (IOException e) {
JOptionPane.showMessageDialog(this, "不能正确读取文件: " + e.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
}
}
// 将文本区域内容保存到文件
private void saveFile(File file) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
writer.write(textArea.getText());
} catch (IOException e) {
JOptionPane.showMessageDialog(this, "不能正确保存文件: " + e.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
}
}
// 显示另存为文件对话框并保存文件
private void saveAsFile() {
int returnValue = fileChooser.showSaveDialog(this);
if (returnValue == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
saveFile(selectedFile);
currentFile = selectedFile;
}
}
// 显示字体选择对话框
private void chooseFont() {
String[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
String selectedFont = (String) JOptionPane.showInputDialog(this, "请选择字体", "字体", JOptionPane.PLAIN_MESSAGE, null, fonts, textArea.getFont().getFamily());
if (selectedFont != null) {
textArea.setFont(new Font(selectedFont, textArea.getFont().getStyle(), textArea.getFont().getSize()));
}
}
// 显示字号大小选择对话框
private void chooseFontSize() {
Integer[] sizes = {8, 10, 12, 14, 16, 18, 20, 24, 28, 32, 36, 40, 48, 56, 64, 72};
Integer selectedSize = (Integer) JOptionPane.showInputDialog(this, "选择字号大小", "字号大小", JOptionPane.PLAIN_MESSAGE, null, sizes, textArea.getFont().getSize());
if (selectedSize != null) {
textArea.setFont(new Font(textArea.getFont().getFamily(), textArea.getFont().getStyle(), selectedSize));
}
}
// 显示颜色选择对话框
private void chooseFontColor() {
Color selectedColor = JColorChooser.showDialog(this, "选择文本颜色", textArea.getForeground());
if (selectedColor != null) {
textArea.setForeground(selectedColor);
}
}
// 显示帮助信息
private void showHelp() {
JOptionPane.showMessageDialog(this, "Help");
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TextEditorGUI(); // 创建并显示文本编辑器窗口
}
});
}
}
完整的代码分析我放在zip里了,有需要的朋友可以去看看
posted on 2024-07-08 17:21 Dexterhoum 阅读(121) 评论(0) 收藏 举报

浙公网安备 33010602011771号