Тут покажу пример простого редактора, точнее Notepad на Java.

Код:
import java.io.*; 
import java.util.*;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;                 

public class JNotepad extends JFrame implements ActionListener {
  private JTextArea txt = null;                          // Поле
  private JScrollPane jspScrollBar = null;           // Полоса прокрутки для JTextArea
  private JMenuItem popupNew = null;             // Подменю "Новый"
  private JMenuItem popupOpen = null;            // Подменю "Открыть"
  private JMenuItem popupSave = null;            // Подменю "Сохранить"
  private JMenuItem popupQuit = null;              // Подменю "Выйти"

  // Метод добавляет меню в JFrame, возвращает JMenuBar 
  public JMenuBar showMenu() {
     JMenuBar mnuBar = new JMenuBar();
     // Меню ---------------------------------------------------------
     // File
     JMenu mnuFile = new JMenu("File");
     mnuFile.setMnemonic('F');
     mnuBar.add(mnuFile);

     // Подменю -----------------------------------------------------
     // File
     popupNew = new JMenuItem("New");
     popupNew.setMnemonic('N');
     popupNew.addActionListener(this);

     popupOpen = new JMenuItem("Open");
     popupOpen.setMnemonic('O');
     popupOpen.addActionListener(this);

     popupSave = new JMenuItem("Save");
     popupSave.setMnemonic('S');
     popupSave.addActionListener(this);

     popupQuit = new JMenuItem("Quit");
     popupQuit.setMnemonic('Q');
     popupQuit.addActionListener(this);

     // Добавляет подменю в меню -------------------------------------
     // File
     mnuFile.add(popupNew);
     mnuFile.addSeparator();
     mnuFile.add(popupOpen);
     mnuFile.add(popupSave);
     mnuFile.addSeparator();
     mnuFile.add(popupQuit);

     // Возврат объекта JMenuBar
     return mnuBar;
  }

  // Конструктор
  public JNotepad() {
    setTitle("JNotepad 1.0"); // Устанавливает заголовок окна JNotepad 1.0
    setIconImage(Toolkit.getDefaultToolkit().getImage("NOTE03.png")); // Устанавливает иконку для окна
    setSize(640, 480);  // Устанавливает размер окна
    setJMenuBar(showMenu()); // Добавляет меню
    txt = new JTextArea(); // Добавляет JTextArea
    jspScrollBar = new JScrollPane(txt); // Устанавливает прокрутку для JTextArea
    add(jspScrollBar); // Добавляет прокрутку в JFrame
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Устанавливает обработчик при нажатие [b]ALT+F4[/b] или при нажатие на [b]×[/b]
    setVisible(true); // Отображает окно
  }

  // Чтения файла
  private String read(File f) {
    String strData = "";
    try {
      Scanner rd = new Scanner(f);
      while(rd.hasNextLine()) { 
        strData += rd.nextLine();
      }
    }
    catch(IOException e) {
      e.printStackTrace();
    }
    return strData;
  }

  // Чтения файл
  private String read(String strFilename) {
    return read(new File(strFilename));
  }
        
  // Запись в файла
  private void write(File f, String strData) {
    try {
      FileWriter fw = new FileWriter(f);
      fw.write(strData);
      fw.close();
    }
    catch(IOException e) {
      e.printStackTrace();
    }
  }

  // Запись в файл
  private void write(String strFilename, String strData) {
    write(new File(strFilename), strData);
  }

  // Отображение диалогового окна "открыть"
  private void OpenDialog() {
    JFileChooser fc = new JFileChooser();
    if(fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
      txt.append(read(fc.getSelectedFile()));
    }
  }

  // Отображение диалоговорго окна "сохранить"
  private void SaveDialog() {
    JFileChooser fc = new JFileChooser();
    if(fc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
      write(fc.getSelectedFile(), txt.getText());
    }
  }

  // Точка входа программы, для JVM
  public static void main(String[] args) {
    new JNotepad();
  }

  // Обработка событий меню
  public void actionPerformed(ActionEvent e) {
    if(e.getSource() == popupNew) txt.setText("");        // При нажатие на "Новый", очищаем поле
   else if(e.getSource() == popupOpen) OpenDialog();  // При нажатие на "Открыть", отображает диалоговое окно открыть, после выбора файла, считываем файл и добавляем в JTextArea 
   else if(e.getSource() == popupSave) SaveDialog();   // При нажатие на "Сохранить", отображает диалоговое окно сохранть, после выбора файла, записываем из JTextArea в файл
   else if(e.getSource() == popupQuit) System.exit(0); // При нажатие на "Выход", закрывает приложение.
  }
}

Сохраним как JNotepad.java

А теперь давайте откомпилируем:
javac JNotepad.java

Чтобы запустить введём комманду:
java JNotepad

Результат:
https://i.ibb.co/Q6nsH9h/JN-min.jpg