Advertisement
faw-

Untitled

Jun 6th, 2018
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.71 KB | None | 0 0
  1. import javafx.scene.input.DataFormat;
  2.  
  3. import java.awt.*;
  4. import java.awt.datatransfer.*;
  5. import java.awt.event.*;
  6. import java.io.*;
  7. import java.util.HashMap;
  8. import java.util.Scanner;
  9. import javax.sound.sampled.Clip;
  10. import javax.swing.*;
  11.  
  12.  
  13. public class Editor extends JFrame {
  14.     private JTextArea textArea;
  15.     private JMenuBar menuBar;
  16.     private JMenu fileMenu, editMenu, viewMenu;
  17.     private File textFile;
  18.     private JMenuItem save, saveAs, open, exit, undo, redo, copy, cut, paste, recentFiles;
  19.     private JFileChooser fileChooser;
  20.     private Clipboard clipboard;
  21.  
  22.     public Editor() {
  23.         super("Custom Text Editor: ");
  24.  
  25.         //textFile = new File("/home/faw/Documents/yikes.txt");
  26.         //this.setTitle(textFile==null?this.getTitle()+"unknown.txt":this.getTitle()+textFile.getName());
  27.  
  28.         this.setTitle(this.getTitle() + "unknown.txt");
  29.  
  30.         setSize(600, 600);
  31.         setLocationRelativeTo(null);
  32.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  33.         Container pane = getContentPane();
  34.         pane.setLayout(new BorderLayout());
  35.  
  36.         //initializing the editor
  37.         textArea = new JTextArea();
  38.         textArea.setLineWrap(true);
  39.         textArea.setWrapStyleWord(true);
  40.         textArea.insert(readTextFile(), 0); //inserts text from file
  41.  
  42.         fileMenu = new JMenu("File");
  43.         save = new JMenuItem("Save");
  44.         saveAs = new JMenuItem("Save as...");
  45.         open = new JMenuItem("Open");
  46.         exit = new JMenuItem("Exit");
  47.         fileMenu.add(open);
  48.         fileMenu.add(save);
  49.         fileMenu.add(saveAs);
  50.         fileMenu.add(exit);
  51.  
  52.  
  53.         editMenu = new JMenu("Edit");
  54.         undo = new JMenuItem("Undo");
  55.         redo = new JMenuItem("Redo");
  56.         copy = new JMenuItem("Copy");
  57.         cut = new JMenuItem("Cut");
  58.         paste = new JMenuItem("Paste");
  59.         editMenu.add(undo);
  60.         editMenu.add(redo);
  61.         editMenu.add(copy);
  62.         editMenu.add(cut);
  63.         editMenu.add(paste);
  64.         cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.CTRL_MASK));
  65.         copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK));
  66.         paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, ActionEvent.CTRL_MASK));
  67.  
  68.         viewMenu = new JMenu("View");
  69.         recentFiles = new JMenuItem("Recent Files");
  70.         viewMenu.add(recentFiles);
  71.  
  72.         menuBar = new JMenuBar();
  73.         menuBar.add(fileMenu);
  74.         menuBar.add(editMenu);
  75.         menuBar.add(viewMenu);
  76.  
  77.         pane.add(menuBar, BorderLayout.NORTH);
  78.         pane.add(textArea);
  79.         fileChooser = new JFileChooser();
  80.  
  81.         clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
  82.  
  83.         initializeActionListeners();
  84.  
  85.         setVisible(true);
  86.     }
  87.  
  88.     public String readTextFile() {
  89.         String text = "";
  90.         try {
  91.             if (textFile != null) {
  92.                 text = "";
  93.                 Scanner scanner = new Scanner(textFile); //reads text from a file
  94.                 while (scanner.hasNextLine()) {
  95.                     text += scanner.nextLine();
  96.                 }
  97.                 scanner.close();
  98.             }
  99.         } catch (Exception e) {
  100.             e.printStackTrace();
  101.         }
  102.         return text;
  103.     }
  104.  
  105.     public void initializeActionListeners() {
  106.         save.addActionListener(new ActionListener() {
  107.             @Override
  108.             public void actionPerformed(ActionEvent e) {
  109.                 if (e.getSource() == save) {
  110.                     save();
  111.                 }
  112.             }
  113.         });
  114.         saveAs.addActionListener(new ActionListener() {
  115.             @Override
  116.             public void actionPerformed(ActionEvent e) {
  117.                 if (e.getSource() == saveAs) {
  118.                     saveAsAction();
  119.                 }
  120.             }
  121.         });
  122.         open.addActionListener(new ActionListener() {
  123.             @Override
  124.             public void actionPerformed(ActionEvent e) {
  125.                 if (e.getSource() == open) {
  126.                     openFileAction();
  127.                 }
  128.             }
  129.         });
  130.         exit.addActionListener(new ActionListener() {
  131.             @Override
  132.             public void actionPerformed(ActionEvent e) {
  133.                 if (e.getSource() == exit) {
  134.                     if (JOptionPane.showConfirmDialog(Editor.super.rootPane, "Are you sure you want to quit?",
  135.                             "Please confirm", JOptionPane.YES_NO_CANCEL_OPTION
  136.                     ) == JOptionPane.YES_OPTION) {
  137.                         System.exit(0);
  138.                     }
  139.                 }
  140.             }
  141.         });
  142.         undo.addActionListener(new ActionListener() {
  143.             @Override
  144.             public void actionPerformed(ActionEvent e) {
  145.  
  146.             }
  147.         });
  148.         redo.addActionListener(new ActionListener() {
  149.             @Override
  150.             public void actionPerformed(ActionEvent e) {
  151.  
  152.             }
  153.         });
  154.         copy.addActionListener(new ActionListener() {
  155.             @Override
  156.             public void actionPerformed(ActionEvent e) {
  157.                 if (e.getSource() == copy) {
  158.                     clipboard.setContents(new StringSelection(textArea.getSelectedText()), null);
  159.                 }
  160.             }
  161.         });
  162.         cut.addActionListener(new ActionListener() {
  163.             @Override
  164.             public void actionPerformed(ActionEvent e) {
  165.                 if (e.getSource() == cut) {
  166.                     clipboard.setContents(new StringSelection(textArea.getSelectedText()), null);
  167.                     textArea.replaceSelection("");
  168.                 }
  169.             }
  170.         });
  171.         paste.addActionListener(new ActionListener() {
  172.             @Override
  173.             public void actionPerformed(ActionEvent e) {
  174.                 if (e.getSource() == paste) {
  175.                     Transferable transferable = clipboard.getContents(this);
  176.                     if (transferable == null) {
  177.                         return;
  178.                     }
  179.                     try {
  180.                         if (!(textArea.getSelectedText() == null)) {
  181.                             textArea.replaceSelection((String) transferable.getTransferData(DataFlavor.stringFlavor));
  182.                         } else {
  183.                             textArea.insert((String) transferable.getTransferData(DataFlavor.stringFlavor), textArea.getCaretPosition());
  184.                         }
  185.                     } catch (Exception exc) {
  186.                         exc.printStackTrace();
  187.                     }
  188.                 }
  189.             }
  190.         });
  191.         recentFiles.addActionListener(new ActionListener() {
  192.             @Override
  193.             public void actionPerformed(ActionEvent e) {
  194.  
  195.             }
  196.         });
  197.     }
  198.  
  199.     public void saveAsAction() {
  200.         fileChooser.setDialogTitle("Specify a file to save.");
  201.         JDialog saveFrame = new JDialog();
  202.         int retValue = fileChooser.showSaveDialog(saveFrame);
  203.         if (retValue == JFileChooser.APPROVE_OPTION) {
  204.             if (!fileChooser.getSelectedFile().getName().endsWith(".txt")) {
  205.                 textFile = new File(fileChooser.getSelectedFile().getPath() + ".txt");
  206.             } else textFile = new File(fileChooser.getSelectedFile().getPath());
  207.             if (textFile.exists()) {
  208.                 if (JOptionPane.showConfirmDialog(Editor.super.rootPane, "Are you sure you want to overwrite this file?",
  209.                         "Please confirm", JOptionPane.YES_NO_CANCEL_OPTION) == JOptionPane.YES_OPTION){
  210.                     save();
  211.                     this.setTitle(textFile.getName());
  212.                     return;
  213.                 } else {
  214.                     saveAsAction();
  215.                     return;
  216.                 }
  217.             }
  218.             save();
  219.             this.setTitle(textFile.getName());
  220.         }
  221.  
  222.     }
  223.  
  224.     public void save() {
  225.         if (textFile != null) {
  226.             try {
  227.                 FileWriter fw = new FileWriter(textFile);
  228.                 fw.write(textArea.getText());
  229.                 fw.close();
  230.             } catch (IOException e) {
  231.                 e.printStackTrace();
  232.             }
  233.         } else saveAsAction();
  234.     }
  235.  
  236.     public void openFileAction() {
  237.         fileChooser.setDialogTitle("Specify a file to open.");
  238.         int retValue = fileChooser.showOpenDialog(this);
  239.         if (retValue == JFileChooser.APPROVE_OPTION) {
  240.             textFile = fileChooser.getSelectedFile();
  241.             this.setTitle(textFile.getName());
  242.         }
  243.         textArea.setText(readTextFile()); //TODO: only allow for opening certain file formats to hinder the user from opening malicious files
  244.     }
  245.  
  246.  
  247.     public static void main(String[] args) {
  248.         new Editor();
  249.     }
  250. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement