【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
运行结果: