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

public class textedit extends JFrame {
    JTextField fname = new JTextField("");
    JLabel fnamelabel = new JLabel("File name:");
    JButton openbutton = new JButton("Open");
    JButton savebutton = new JButton("Save");
    JButton tokencbutton = new JButton("Token Count");
    JTextArea text = new JTextArea("");
    public textedit() {
        super("Text Editor");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(500,400);
        this.getContentPane().setLayout(null);
        this.getContentPane().add(fnamelabel);
        fnamelabel.setBounds(0,0,80,30);
        this.getContentPane().add(fname);
        fname.setBounds(80,0,150,30);
        this.getContentPane().add(openbutton);
        openbutton.setBounds(230,0,70,30);
        openbutton.addActionListener(new openbuttonhandler());
        this.getContentPane().add(savebutton);
        savebutton.setBounds(300,0,70,30);
        savebutton.addActionListener(new savebuttonhandler());
        this.getContentPane().add(tokencbutton);
        tokencbutton.setBounds(370,0,120,30);
        tokencbutton.addActionListener(new tokencbuttonhandler());
        this.getContentPane().add(text);
        text.setBounds(5,35,this.getWidth()-10,320);
        setVisible(true);
        
    }
    public static void main(String[] args) {
        new textedit();
    }
    private class openbuttonhandler implements ActionListener {
        public void actionPerformed(ActionEvent ev) {
            try {
                BufferedReader input = new BufferedReader(new FileReader(fname.getText()));
                String line = input.readLine();
                String fulltext = "";
                while (line != null) {
                    fulltext += line + "\n";
                    line = input.readLine();
                }
                text.setText(fulltext);
                input.close();
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, "Error: " + e.getMessage());
            }
        }
    }
    private class savebuttonhandler implements ActionListener {
        public void actionPerformed(ActionEvent ev) {
            try {
                PrintWriter output = new PrintWriter(new FileWriter(fname.getText()));
                output.print(text.getText());
                output.close();
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, "Error: " + e.getMessage());
            }
        }
    }
    private class tokencbuttonhandler implements ActionListener {
        public void actionPerformed(ActionEvent ev) {
            StringTokenizer s = new StringTokenizer(text.getText());
            int count = 0;
            while (s.hasMoreTokens()) {
                s.nextToken(); // ignore the token we get, we just want to count up
                count++;
            }
            JOptionPane.showMessageDialog(null, "There are "+count+"ac tokens");
        }
    }
}