【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.pswp.cn/diannao/91532.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/91532.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/91532.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PyTorch中torch.topk()詳解:快速獲取最大值索引

torch.topk(similarities, k=2).indices 是什么意思 torch.topk(similarities, k=2).indices 是 PyTorch 中用于獲取張量中最大值元素及其索引的函數。在你的代碼中,它的作用是從 similarities 向量里找出得分最高的2個元素的位置索引。 1. 核心功能:找出張量中最大的k個值…

快速搭建本地HTTP服務器:`python -m http.server`詳解

文章目錄 一、什么是 http.server? 二、基礎使用 1. 啟動服務器 2. 指定端口 3. 綁定特定IP 三、實際應用場景 1. 本地前端開發 2. 文件共享 3. 啟用CGI腳本(高級) 四、目錄瀏覽詳解* 五、安全注意事項 六、進階技巧 1. 后臺運行(Linux/macOS) 2. 自定義錯誤頁面 3. 結合其…

運維技術教程之Jenkins上的known_hosts文件

在Jenkins中&#xff0c;known_hosts文件用于存儲已驗證的遠程節點主機密鑰&#xff0c;避免每次連接時重復驗證。以下是基于不同場景的解決方案&#xff1a;1. 創建并配置 known_hosts 文件 若Jenkins提示 No Known Hosts file 或找不到文件&#xff0c;需手動創建并配置&…

leetcode 3201. 找出有效子序列的最大長度 I 中等

給你一個整數數組 nums。nums 的子序列 sub 的長度為 x &#xff0c;如果其滿足以下條件&#xff0c;則稱其為 有效子序列&#xff1a;(sub[0] sub[1]) % 2 (sub[1] sub[2]) % 2 ... (sub[x - 2] sub[x - 1]) % 2返回 nums 的 最長的有效子序列 的長度。一個 子序列 指的…

Java并發編程第三篇(深入解析Synchronized)

1. Synchronized簡介&#xff1a;一個常見的并發“陷阱” 在正式開始學習新知識前&#xff0c;我們不妨先來看一個現象&#xff0c;這是一個很多并發編程新手都會遇到的“陷阱”&#xff1a; public class SynchronizedDemo implements Runnable {// 共享變量private static in…

Chatbox AI|多模型多模態交互+MCP,一個工具打造你的全能私人助手

ChatBoxAI集成GPT-4、Claude等頂尖模型&#xff0c;支持Windows/macOS/Linux多平臺&#xff0c;具備隱私加密、文件智能解析&#xff08;PDF/代碼/圖片&#xff09;及開發者友好特性。其應用覆蓋自媒體創作、代碼實時預覽、AI繪圖&#xff08;封面/表情包&#xff09;及聯網搜索…

在Autodl服務器中使用VNC建立圖形界面

在Autodl服務器中使用VNC建立圖形界面**AutoDL 3D 圖形桌面搭建教程****第一步&#xff1a;安裝桌面和 VNC****第二步&#xff1a;進行一次性配置****第三步&#xff1a;日常啟動與使用**AutoDL 3D 圖形桌面搭建教程 目標: 在你的 AutoDL 環境上&#xff0c;以最少的步驟搭建一…

CD54.【C++ Dev】vector和list的反向迭代器的實現

目錄 1.反向迭代器的功能 2.算法 方法1:新寫一個類用于反向迭代器 方法2:封裝正向迭代器實現反向迭代器 解析operator* 正向迭代器和反向迭代器的關系 返回 *--tmp的原因 3.為自制的vector和list編寫反向迭代器 編寫統一的反向迭代器 修改vector頭文件 修改list頭文…

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘django’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘django’問題 摘要 在日常 Django 項目開發中&#xff0c;最常見的“攔路虎”之一就是 ModuleNotFoundError: No module named django。該異常通常在以下場景出…

單頁面和多頁面的區別和優缺點

單頁面應用&#xff08;SPA&#xff09;與多頁面應用&#xff08;MPA&#xff09;的區別單頁面應用&#xff08;SPA&#xff09;整個應用只有一個HTML文件&#xff0c;內容通過JavaScript動態加載和渲染。頁面切換時無需重新加載整個頁面&#xff0c;僅更新部分DOM。依賴前端框…

暑期自學嵌入式——Day05(C語言階段)

接續上文&#xff1a;暑期自學嵌入式——Day04&#xff08;C語言階段&#xff09;-CSDN博客 點關注不迷路喲。你的點贊、收藏&#xff0c;一鍵三連&#xff0c;是我持續更新的動力喲&#xff01;&#xff01;&#xff01; 主頁&#xff1a; 一位搞嵌入式的 genius-CSDN博客 …

通用人工智能AGI遙遙無期,面臨幻滅

通用人工智能AGI有可能2080年前也實現不了 首先說一下&#xff0c;目前的人工智能方向是錯的&#xff0c;通用人工智能不值得追捧。 真的特別無奈&#xff0c;現在還有很多人在吹AI&#xff0c;說什么2027年就能實現AGI&#xff0c;如果你指的是真正的強人工智能AGI&#xff0c…

智能體開發工具鏈全景圖:IDE、調試器與監控平臺

智能體開發工具鏈全景圖&#xff1a;IDE、調試器與監控平臺 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 總有一行代碼&#xff0c;能點亮萬千星辰。 &#x1f50d; 在技術的宇宙中&#xff0c;我愿做永不停歇的探索者。 ? 用代碼丈量世界&…

三十四、【擴展工具篇】JSON 格式化與解析:集成 Monaco Editor 打造在線 JSON 工具

三十四、【擴展工具篇】JSON 格式化與解析:集成 Monaco Editor 打造在線 JSON 工具 前言 功能概覽 技術選型 實現步驟 第一步:添加路由和側邊欄菜單入口 第二步:創建 JSON 工具頁面 第三部分:全面測試與驗證 總結 前言 在日常的接口開發和測試中,我們經常需要處理 JSON 數…

MySQL高可用集群架構:主從復制、MGR與讀寫分離實戰

1. MySQL高可用架構概述 MySQL高可用性(High Availability)解決方案旨在確保數據庫服務在硬件故障、網絡問題等異常情況下仍能持續提供服務。以下是主流的高可用方案對比: 方案 原理 優點 缺點 適用場景 主從復制 基于binlog的異步復制 簡單易用,對性能影響小 數據一致性弱,…

JxBrowser 7.43.5 版本發布啦!

在此版本中&#xff0c;我們進行了錯誤修復和穩定性改進。 &#x1f517; 點擊此處了解更多詳情。 &#x1f193; 獲取 30 天免費試用。

借助AI學習開源代碼git0.7之編譯和使用

如何學習優秀的開源代碼&#xff1f;目前大部分的優秀開源代碼&#xff0c;代碼量都已經非常龐大&#xff0c;比如git。以git為例&#xff0c;git最新版本代碼有279814行&#xff0c; 而git0.7版本已經大部分實現了現在git版本的基本功能&#xff0c;而代碼量卻只有4950行&…

ObservableCollection全面解析

本文僅作為參考大佬們文章的總結。 ObservableCollection是C#中一個功能強大的動態數據集合類&#xff0c;特別適用于需要數據綁定和UI自動更新的場景。本文將系統性地總結ObservableCollection的核心概念、使用方法、性能優化策略以及在實際項目中的應用實踐。 一、Observab…

佰力博檢測與您探討超高溫介電測試的應用領域

超高溫介電測試是指在極端高溫條件下&#xff08;通常高于1000℃&#xff09;對材料的介電性能進行測量和分析的過程。以評估材料在高溫環境下的電學性能穩定性&#xff0c;如介電常數、介電損耗、阻抗譜等參數。超高溫介電測試需要用到的超高溫介電阻抗測試設備&#xff1a;UT…

OneCode自治UI核心組件Layout布局介紹:構建靈活高效的界面布局系統

在現代前端開發中&#xff0c;布局系統扮演著至關重要的角色&#xff0c;它不僅決定了界面的結構美感&#xff0c;更直接影響用戶體驗和開發效率。OneCode作為一款企業級低代碼開發平臺&#xff0c;其布局引擎通過精巧的設計實現了簡潔API與強大功能的完美平衡。本文將深入剖析…