当前位置: 首页 > 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.dtcms.com/a/285270.html

相关文章:

  • ROS1/Linux——Launch文件使用
  • 【深度学习新浪潮】AI在finTech领域有哪些值得关注的进展?
  • STM32 IAR 生成工程后配置
  • CSP-S模拟赛三(仍然是难度远超CSP-S)
  • 【Java源码阅读系列55】深度解读Java Method 类源码
  • 78、【OS】【Nuttx】【启动】caller-saved 和 callee-saved 示例:栈指针和帧指针(下)
  • 股票行情接口api,板块、概念接口,股票主力资金流接口,板块概念资金流接口
  • 暑期自学嵌入式——Day05(C语言阶段)
  • 1-创建Vue3项目
  • Linux系统编程——进程间通信
  • 融智兴科技: RFID超高频洗涤标签解析
  • LeetCode--48.旋转图像
  • 快速了解网络爬虫
  • 设备驱动的私有数据设计
  • yocto开发(1)----bitbake的全流程分析
  • 指针数组和数组指针的应用案例
  • js对象简介、内置对象
  • 聊聊数据和功能测试面临的挑战有哪些?
  • #systemverilog# 关键字之 变量声明周期与静态方法关系探讨
  • 美团外卖霸王餐接口对接具体操作步骤
  • NW972NW974美光固态闪存NW977NW981
  • 【读论文】AgentOrchestra 解读:LLM 智能体学会「团队协作」去解决复杂任务
  • 海思3516CV610 卷绕 研究
  • JxBrowser 8.9.2 版本发布啦!
  • Python22 —— 标准库(random库)
  • 简单手写一个Spring boot starter
  • flask request实现两台PC之间文件传输通信
  • 华夏基金(ChinaAMC)推出全球首只人民币计价的代币化货币基金
  • AUTOSAR进阶图解==>AUTOSAR_SWS_BusMirroring
  • lombok版本过低导致@SuperBuilder注解编译无法通过(java: 类型变量数目错误; 需要3)