Read and edit a text file (Editor)

The following miniEditor uses Swing components:

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

javax.swing.JFrame frame;
java.awt.Canvas canvas;

JTextArea txtArea;
JButton open;
JButton save;
JButton saveAs;
JButton clearBtn;

File file;

final int _wndW = 600;
final int _wndH = 600;

void clearAction(){
  String s = "";
  txtArea.setText(s);
}

void saveAs(){
   JFileChooser fileChooser = new JFileChooser();
            int option = fileChooser.showSaveDialog(frame);
            if(option == JFileChooser.APPROVE_OPTION){
               file = fileChooser.getSelectedFile();
               println("file = ",file);
            } else {
               println("SaveAs canceled.");
               exit();
            }
            try {          
      String content = txtArea.getText();  
      if (!file.exists()) {
        file.createNewFile();
      }
      FileWriter fw = new FileWriter(file) ;
      BufferedWriter bw = new BufferedWriter(fw);      
      bw.write(content);
      bw.close();
      } catch (IOException e) {
      //e.printStackTrace();
      JOptionPane.showMessageDialog(saveAs, e);
     }
}

void openBtn() {
  open = new JButton("Open");
  open.setBounds(20, 10, 80, 24);
  frame.add(open);
  // **** Open Action **** //
  open.addActionListener( new ActionListener() {
    void actionPerformed(ActionEvent event) {
        JFileChooser fileChooser = new JFileChooser();
        int option = fileChooser.showOpenDialog(fileChooser);
        if (option == JFileChooser.APPROVE_OPTION) {
          file = fileChooser.getSelectedFile();
          try {
            BufferedReader buffer = new BufferedReader(new FileReader(file));
            String s1 = "", s2 = "";
            while ((s1 = buffer.readLine())!= null) {
              s2 += s1 + "\n";
            }
            txtArea.setText(s2);
            buffer.close();
          } catch (Exception e) {
            JOptionPane.showMessageDialog(open,e);
          }
        }
    }
  }
  );
  open.repaint();
}

void saveBtn() {
  save = new JButton("Save");
  save.setBounds(110, 10, 80, 24);
  frame.add(save);
  // **** Save Action **** //
  save.addActionListener( new ActionListener() {
    void actionPerformed(ActionEvent event) {
        println("Save hit.", file);
        if (file != null) {
          try {
            String content = txtArea.getText();
            FileWriter fw = new FileWriter(file) ;
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write(content);
            bw.close();
          } catch (IOException e) {
           // e.printStackTrace();
            JOptionPane.showMessageDialog(save,e);
          }
        } else {         
          saveAs(); // file has no name; show save dialog to give it one.
        }
    }
  }
  );
  save.repaint();
}

void saveAsBtn() {
  saveAs = new JButton("SaveAs...");
  saveAs.setBounds(200, 10, 80, 24);
  frame.add(saveAs);
     // **** SaveAs Action **** //
  saveAs.addActionListener( new ActionListener() {
    void actionPerformed(ActionEvent event) {
        println("SaveAs hit.");
        saveAs();
    }
    }
  );
  saveAs.repaint();
}

void clearBtn() {
  clearBtn = new JButton("Clear");
  clearBtn.setBounds(290, 10, 80, 24);
  frame.add(clearBtn);
     // **** Clear Action **** //
  clearBtn.addActionListener( new ActionListener() {
    void actionPerformed(ActionEvent event) {
        println("Clear hit.");
        clearAction();
    }
    }
  );
  clearBtn.repaint();
}

void textArea() {
  txtArea = new JTextArea();
  JScrollPane scrlPane = new JScrollPane(txtArea);
  scrlPane.setBounds(10, 40, _wndW-20, _wndH - 80);
  frame.add(scrlPane);
  txtArea.setEditable(true);
  // txtArea.setFont(new Font("Menlo", Font.BOLD, 16));
  txtArea.setLineWrap(true);
  txtArea.setWrapStyleWord(true);
  txtArea.repaint();
}

void buildWnd() {
  textArea();
  openBtn();
  saveBtn();
  saveAsBtn();
  clearBtn();
}

void setup() {
  frame = (javax.swing.JFrame) ((processing.awt.PSurfaceAWT.SmoothCanvas) surface.getNative()).getFrame();
  canvas = (processing.awt.PSurfaceAWT.SmoothCanvas) ((processing.awt.PSurfaceAWT)surface).getNative();
  frame.setBounds(500, 300, _wndW, _wndH);
  frame.remove(canvas);
  surface.setTitle("miniEditor");
  javax.swing.SwingUtilities.invokeLater(new Runnable() {
    public void run() {
      buildWnd(); // Builds components on EventDispatchThread
    }
  }
  );
}

2 Likes