Java Swing | Create a simple text editor

To create a simple text editor in Java Swing we will use a JTextArea, a JMenuBar and add JMenu to it and we will add JMenuItems. All the menu items will have actionListener to detect any action.

There will be a menu bar and it will contain two menus and a button:

  1. File menu
    • open: this menuitem is used to open a file
    • save: this menuitem is used to save a file
    • print : this menuitem is used to print the components of the text area
    • new : this menuitem is used to create a new blank file
  2. Edit menu
    • cut: this menuitem is to cut the selected area and copy it to clipboard
    • copy: this menuitem is to copy the selected area to the clipboard
    • paste : this menuitem is to paste the text from the clipboard to the text area
  3. Close : this button closes the frame

We have used file reader and file writer for more information on file reading and writing in Java. Please follow the below links:



Methods used:

method explanantion
cut() removes the selected area from the text area and store it in clipboard
copy() copies the selected area from the text area and store it in clipboard
paste() removes the selected area from the text area and store it in clipboard
print() prints the components of the text area

For more methods on JSwing components refer:

  1. Java Swing | JPanel
  2. Java Swing | JMenuBar
  3. Creating Frames using Swings in Java
  4. Java Swing | JTextArea

Program to create a simple text editor:

To create a simple text editor:

  • First, we will create a frame f titled “editor” and apply a metal look and feel and set an ocean theme in it.
  • We will add a text area and a menubar with three menu File, Edit, and Close.
    • The “File” option has 4 menu items new, open, save and print.
    • “Edit” has 3 menu items cut, copy and paste. We will add an action listener to all the menu items(using addActionListener() function) to detect any action.
  • We will add the menu items to the menu and menu to the menubar using add() function and we would add the menubar to the frame using addJMenuBar() function.
  • We will add the text area to the frame using add function set the size of the frame to 500,500 using setSize(500,500) function and then display the frame using show function.

Here is how the functions of the menu will be invoked:

  • On selecting the cut, copy, paste and print menu item the inbuilt functions of text area cut(), copy(), paste() and print() will be invoked.
  • On selecting “save” menu item, a file chooser will get opened which will show the save dialog after selecting a file the filewriter(buffered writer) would write the contents of the text area to the file and close the file writer and buffered writer.
  • On selecting “open” menu item, a file chooser will get opened which will show the open dialog after selecting a file a file reader and a buffered reader would read the file and set the text of the text area to the contents of the file.
  • If the “new” menu item is selected the text of the text area will be set to blank. If “close” menu item is selected the frame is closed by using the function isVisible(false).

Program:

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java Program to create a text editor using java
import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.awt.event.*;
import javax.swing.plaf.metal.*;
import javax.swing.text.*;
class editor extends JFrame implements ActionListener {
    // Text component
    JTextArea t;
  
    // Frame
    JFrame f;
  
    // Constructor
    editor()
    {
        // Create a frame
        f = new JFrame("editor");
  
        try {
            // Set metl look and feel
            UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
  
            // Set theme to ocean
            MetalLookAndFeel.setCurrentTheme(new OceanTheme());
        }
        catch (Exception e) {
        }
  
        // Text component
        t = new JTextArea();
  
        // Create a menubar
        JMenuBar mb = new JMenuBar();
  
        // Create amenu for menu
        JMenu m1 = new JMenu("File");
  
        // Create menu items
        JMenuItem mi1 = new JMenuItem("New");
        JMenuItem mi2 = new JMenuItem("Open");
        JMenuItem mi3 = new JMenuItem("Save");
        JMenuItem mi9 = new JMenuItem("Print");
  
        // Add action listener
        mi1.addActionListener(this);
        mi2.addActionListener(this);
        mi3.addActionListener(this);
        mi9.addActionListener(this);
  
        m1.add(mi1);
        m1.add(mi2);
        m1.add(mi3);
        m1.add(mi9);
  
        // Create amenu for menu
        JMenu m2 = new JMenu("Edit");
  
        // Create menu items
        JMenuItem mi4 = new JMenuItem("cut");
        JMenuItem mi5 = new JMenuItem("copy");
        JMenuItem mi6 = new JMenuItem("paste");
  
        // Add action listener
        mi4.addActionListener(this);
        mi5.addActionListener(this);
        mi6.addActionListener(this);
  
        m2.add(mi4);
        m2.add(mi5);
        m2.add(mi6);
  
        JMenuItem mc = new JMenuItem("close");
  
        mc.addActionListener(this);
  
        mb.add(m1);
        mb.add(m2);
        mb.add(mc);
  
        f.setJMenuBar(mb);
        f.add(t);
        f.setSize(500, 500);
        f.show();
    }
  
    // If a button is pressed
    public void actionPerformed(ActionEvent e)
    {
        String s = e.getActionCommand();
  
        if (s.equals("cut")) {
            t.cut();
        }
        else if (s.equals("copy")) {
            t.copy();
        }
        else if (s.equals("paste")) {
            t.paste();
        }
        else if (s.equals("Save")) {
            // Create an object of JFileChooser class
            JFileChooser j = new JFileChooser("f:");
  
            // Invoke the showsSaveDialog function to show the save dialog
            int r = j.showSaveDialog(null);
  
            if (r == JFileChooser.APPROVE_OPTION) {
  
                // Set the label to the path of the selected directory
                File fi = new File(j.getSelectedFile().getAbsolutePath());
  
                try {
                    // Create a file writer
                    FileWriter wr = new FileWriter(fi, false);
  
                    // Create buffered writer to write
                    BufferedWriter w = new BufferedWriter(wr);
  
                    // Write
                    w.write(t.getText());
  
                    w.flush();
                    w.close();
                }
                catch (Exception evt) {
                    JOptionPane.showMessageDialog(f, evt.getMessage());
                }
            }
            // If the user cancelled the operation
            else
                JOptionPane.showMessageDialog(f, "the user cancelled the operation");
        }
        else if (s.equals("Print")) {
            try {
                // print the file
                t.print();
            }
            catch (Exception evt) {
                JOptionPane.showMessageDialog(f, evt.getMessage());
            }
        }
        else if (s.equals("Open")) {
            // Create an object of JFileChooser class
            JFileChooser j = new JFileChooser("f:");
  
            // Invoke the showsOpenDialog function to show the save dialog
            int r = j.showOpenDialog(null);
  
            // If the user selects a file
            if (r == JFileChooser.APPROVE_OPTION) {
                // Set the label to the path of the selected directory
                File fi = new File(j.getSelectedFile().getAbsolutePath());
  
                try {
                    // String
                    String s1 = "", sl = "";
  
                    // File reader
                    FileReader fr = new FileReader(fi);
  
                    // Buffered reader
                    BufferedReader br = new BufferedReader(fr);
  
                    // Initilize sl
                    sl = br.readLine();
  
                    // Take the input from the file
                    while ((s1 = br.readLine()) != null) {
                        sl = sl + "\n" + s1;
                    }
  
                    // Set the text
                    t.setText(sl);
                }
                catch (Exception evt) {
                    JOptionPane.showMessageDialog(f, evt.getMessage());
                }
            }
            // If the user cancelled the operation
            else
                JOptionPane.showMessageDialog(f, "the user cancelled the operation");
        }
        else if (s.equals("New")) {
            t.setText("");
        }
        else if (s.equals("close")) {
            f.setVisible(false);
        }
    }
  
    // Main class
    public static void main(String args[])
    {
        editor e = new editor();
    }
}

chevron_right


Output:

Note: The above programs might not run in an online IDE please use an offline compiler.



My Personal Notes arrow_drop_up

Second year Department of Information Technology Jadavpur University

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.




Article Tags :
Practice Tags :


1


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.