当前位置: 首页 > news >正文

【Java】文件编辑器

代码:(SimpleEditor.java)

import java.awt.Color;
import java.awt.Font;
import java.awt.Insets;
import java.awt.BorderLayout;import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;public class SimpleEditor extends JFrame {private final JTextArea textArea;private final JTextArea lineNumberArea; // Line number text areaprivate final JLabel fileNameLabel;private String currentFilePath;public SimpleEditor() {setTitle("Simple Editor [Untitled]");setSize(600, 400);setDefaultCloseOperation(EXIT_ON_CLOSE);setLocationRelativeTo(null);textArea = new JTextArea();textArea.setFont(new Font("Consolas", Font.PLAIN, 18));JScrollPane scrollPane = new JScrollPane(textArea);lineNumberArea = new JTextArea();lineNumberArea.setEditable(false);lineNumberArea.setFont(textArea.getFont());lineNumberArea.setBackground(Color.LIGHT_GRAY);lineNumberArea.setSize(30, 0);lineNumberArea.setLineWrap(false);lineNumberArea.setMargin(new Insets(5, 0, 0, 0));JSplitPane splitPane = new JSplitPane();splitPane.setDividerLocation(60);splitPane.setLeftComponent(new JScrollPane(lineNumberArea));splitPane.setRightComponent(scrollPane);add(splitPane, BorderLayout.CENTER);fileNameLabel = new JLabel("Current file: Not selected");add(fileNameLabel, BorderLayout.SOUTH);createMenuBar();textArea.addCaretListener(e -> updateLineNumbers());textArea.setMargin(new Insets(5, 5, 5, 5));setVisible(true);}public static void main(String[] args) {SwingUtilities.invokeLater(SimpleEditor::new);}private void updateLineNumbers() {int lineCount = textArea.getLineCount();StringBuilder lineNumbers = new StringBuilder();for (int i = 1; i <= lineCount; i++) {lineNumbers.append(i).append("\n");}lineNumberArea.setText(lineNumbers.toString());}private void createMenuBar() {JMenuBar menuBar = new JMenuBar();JMenu fileMenu = new JMenu("File");JMenuItem openItem = new JMenuItem("Open");openItem.addActionListener(new OpenFileAction());fileMenu.add(openItem);JMenuItem saveItem = new JMenuItem("Save");saveItem.addActionListener(new SaveFileAction());fileMenu.add(saveItem);fileMenu.add(new JSeparator());JMenuItem exitItem = new JMenuItem("Exit");exitItem.addActionListener(e -> System.exit(0));fileMenu.add(exitItem);menuBar.add(fileMenu);setJMenuBar(menuBar);}private class OpenFileAction implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {JFileChooser fileChooser = new JFileChooser();int returnValue = fileChooser.showOpenDialog(SimpleEditor.this);if (returnValue == JFileChooser.APPROVE_OPTION) {File selectedFile = fileChooser.getSelectedFile();currentFilePath = selectedFile.getAbsolutePath();fileNameLabel.setText("Current file: " + selectedFile.getName());setTitle("Simple Editor [" + selectedFile.getName() + "]");try (BufferedReader reader = new BufferedReader(new FileReader(selectedFile))) {textArea.setText("");lineNumberArea.setText(""); // Clear line number areaString line;while ((line = reader.readLine()) != null) {textArea.append(line + "\n");}updateLineNumbers(); // Update line numbers} catch (IOException ex) {JOptionPane.showMessageDialog(SimpleEditor.this, "Unable to open file: " + ex.getMessage());}}}}private class SaveFileAction implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {if (currentFilePath == null) {JFileChooser fileChooser = new JFileChooser();int returnValue = fileChooser.showSaveDialog(SimpleEditor.this);if (returnValue == JFileChooser.APPROVE_OPTION) {File selectedFile = fileChooser.getSelectedFile();currentFilePath = selectedFile.getAbsolutePath();fileNameLabel.setText("Current file: " + selectedFile.getName());} else {return;}}try (BufferedWriter writer = new BufferedWriter(new FileWriter(currentFilePath))) {writer.write(textArea.getText());} catch (IOException ex) {JOptionPane.showMessageDialog(SimpleEditor.this, "Unable to save file: " + ex.getMessage());}}}
}

编译命令

javac SimpleEditor.java
java SimpleEditor

运行结果

http://www.lryc.cn/news/591860.html

相关文章:

  • CSP-S模拟赛三(仍然是难度远超CSP-S)
  • 【Linux】LVS(Linux virual server)
  • 网络爬虫的详细知识点
  • Spring 多模块配置国际化,MessageSource只能加载一个文件
  • 栈和队列的题目,咕咕咕
  • Python基础--嵌套循环
  • 尚庭公寓----------分页查询
  • 【人工智能99问】梯度消失、梯度爆炸的定义、后果及规避手段?(7/99)
  • 树莓派Qt 安装
  • 数据结构 栈(1)
  • 常用API
  • 【深度学习新浪潮】AI在finTech领域有哪些值得关注的进展?
  • Redis中什么是看门狗机制
  • Paimon 动态分桶
  • 大型语言模型的白日梦循环
  • 【软件测试】软件测试分类与方法解析:目标到工具
  • LINUX例行性工作(计划任务)实验操作 ---at和crontab以及系统级别的计划任务
  • Python学习之——序列化与反序列化
  • 链路聚合实训
  • 解决 MyBatis/MyBatis-Plus 中 UUID 类型转换错误的最佳实践
  • MS Project替代方案:5款项目管理工具测评,8Manage PM为何更优?
  • vue svg实现一个环形进度条组件
  • 进程终止机制详解:退出场景、退出码与退出方式全解析
  • STM32 IAR 生成工程后配置
  • 时序数据库选型指南︰为什么IoTDB成为物联网场景首选?
  • UML用例规范,use case diagram
  • halcon 检测直线
  • OpenCV学习笔记二(色彩空间:RGB、HSV、Lab、mask)
  • DocsGPT:您的智能知识助手,解锁高效信息检索
  • 前端之HTML学习