Notepad in Java with source code

Here’s a simple notepad program in Java that you can use as a starting point:

import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class Notepad extends Frame implements ActionListener {
    private TextArea textArea;
    private MenuBar menuBar;
    private Menu fileMenu;
    private MenuItem newMenuItem, openMenuItem, saveMenuItem, saveAsMenuItem, exitMenuItem;

    private File currentFile;

    public Notepad() {
        super("Untitled - Notepad");
        setSize(800, 600);
        setLocationRelativeTo(null);
        textArea = new TextArea();
        add(textArea);

        menuBar = new MenuBar();
        fileMenu = new Menu("File");
        newMenuItem = new MenuItem("New");
        openMenuItem = new MenuItem("Open");
        saveMenuItem = new MenuItem("Save");
        saveAsMenuItem = new MenuItem("Save As");
        exitMenuItem = new MenuItem("Exit");

        newMenuItem.addActionListener(this);
        openMenuItem.addActionListener(this);
        saveMenuItem.addActionListener(this);
        saveAsMenuItem.addActionListener(this);
        exitMenuItem.addActionListener(this);

        fileMenu.add(newMenuItem);
        fileMenu.add(openMenuItem);
        fileMenu.add(saveMenuItem);
        fileMenu.add(saveAsMenuItem);
        fileMenu.addSeparator();
        fileMenu.add(exitMenuItem);
        menuBar.add(fileMenu);
        setMenuBar(menuBar);

        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                if (textArea.getText().equals("") || currentFile == null) {
                    dispose();
                } else {
                    int result = JOptionPane.showConfirmDialog(Notepad.this, "Do you want to save changes?", "Confirm Exit", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE);
                    if (result == JOptionPane.YES_OPTION) {
                        saveFile();
                        dispose();
                    } else if (result == JOptionPane.NO_OPTION) {
                        dispose();
                    }
                }
            }
        });

        setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == newMenuItem) {
            newFile();
        } else if (e.getSource() == openMenuItem) {
            openFile();
        } else if (e.getSource() == saveMenuItem) {
            saveFile();
        } else if (e.getSource() == saveAsMenuItem) {
            saveAsFile();
        } else if (e.getSource() == exitMenuItem) {
            dispose();
        }
    }

    private void newFile() {
        if (textArea.getText().equals("") || currentFile == null) {
            textArea.setText("");
            setTitle("Untitled - Notepad");
            currentFile = null;
        } else {
            int result = JOptionPane.showConfirmDialog(this, "Do you want to save changes?", "Confirm New", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE);
            if (result == JOptionPane.YES_OPTION) {
                saveFile();
                textArea.setText("");
                setTitle("Untitled - Notepad");
                currentFile = null;
            } else if (result == JOptionPane.NO_OPTION) {
                textArea.setText("");
                setTitle("Untitled - Notepad");
                currentFile = null;
            }
        }
    }

    private void openFile() {
        FileDialog fileDialog = new FileDialog(this, "Open", FileDialog.LOAD);
        fileDialog.setVisible(true);
        String directory = fileDialog.getDirectory();
        String filename = fileDialog.getFile();
        if (filename != null) {
            currentFile = new File(directory, filename);
            setTitle(currentFile.getName() + " - Notepad");
            try {
                BufferedReader reader = new BufferedReader(new FileReader(currentFile));
                String line;
                textArea.setText("");
                while ((line = reader.readLine()) != null) {
                    textArea.append(line + "\n");
                }