利用JAVAswing实现的一个简单的文本编辑框(超全注释)

概述
我写的这个小练手实现了一个简单的文本编辑器,允许用户打开、编辑、保存和另存文本文件,并提供更改字体、字体大小和字体颜色的功能。还包含一个帮助菜单,为用户提供使用指南。

  1. 文件操作:
  • 打开文件:从本地磁盘读取文本文件并显示其内容。
  • 保存文件:将编辑后的文本保存到当前文件。
  • 另存为:将编辑后的文本保存到指定的新文件。
  1. 编辑功能:
  • 改变字体:允许用户选择不同的字体。
  • 改变字号大小:允许用户选择不同的字体大小。
  • 改变字体颜色:允许用户选择不同的字体颜色。
  1. 帮助功能:
  • 提供一个简单的帮助对话框,向用户解释如何使用该文本编辑器。

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)    收藏  举报

导航