+ Reply to Thread
Page 1 of 2
1 2 LastLast
Results 1 to 10 of 17

Thread: Simple Text Editor

  1. #1
    Code Warrior Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n's Avatar
    Join Date
    May 2008
    Location
    4chan.org/g/
    Age
    20
    Posts
    3,836
    Blog Entries
    4

    Simple Text Editor

    Good day CC !

    Today, early in the morning I made my first notepad clone... with less options and solutions !
    So today I am going to show you ! How to make a less of a notepad in java !


    Packages we will need
    Code:
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import javax.swing.*;
    import javax.swing.text.*;
    The class
    Code:
    class TextEditor extends JFrame {
    Base variables.
    Code:
    private JTextArea area = new JTextArea(20,120);
    	private JFileChooser dialog = new JFileChooser(System.getProperty("user.dir"));
    	private String currentFile = "Untitled";
    	private boolean changed = false;
    Our JTextArea will be the area where you can write documents and etc...
    Also if you are unfamiliar with JFileChooser, then try to read more about the swing lib in Javas API page. Also by changed it will represent our flag of when things in our area changes.

    Constructor Part #1
    Code:
    	public TextEditor() {
    		area.setFont(new Font("Monospaced",Font.PLAIN,12));
    		JScrollPane scroll = new JScrollPane(area,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    		add(scroll,BorderLayout.CENTER);
    		
    		JMenuBar JMB = new JMenuBar();
    		setJMenuBar(JMB);
    		JMenu file = new JMenu("File");
    		JMenu edit = new JMenu("Edit");
    		JMB.add(file); JMB.add(edit);
    So here we are our area and the toolbar we will use... with JScrollPane we will be able to view a bit more of our text and area...Most likely as anything else :>
    Constructor Part #2
    Code:
    file.add(New);file.add(Open);file.add(Save);
    		file.add(Quit);file.add(SaveAs);
    		file.addSeparator();
    		
    		for(int i=0; i<4; i++)
    			file.getItem(i).setIcon(null);
    		
    		edit.add(Cut);edit.add(Copy);edit.add(Paste);
    
    		edit.getItem(0).setText("Cut out");
    		edit.getItem(1).setText("Copy");
    		edit.getItem(2).setText("Paste");
    Now by adding methods and arguments we haven't implemented from the beginning will of course complain in an active IDE...However fear not we will come to the point what New/Open/Save/Quit/SaveAs are...
    While adding we also position them in a correct order with our for loop and set every icon to null.
    Constructor Part #3
    Code:
    JToolBar tool = new JToolBar();
    		add(tool,BorderLayout.NORTH);
    		tool.add(New);tool.add(Open);tool.add(Save);
    		tool.addSeparator();
    		
    		JButton cut = tool.add(Cut), cop = tool.add(Copy),pas = tool.add(Paste);
    		
    		cut.setText(null); cut.setIcon(new ImageIcon("cut.gif"));
    		cop.setText(null); cop.setIcon(new ImageIcon("copy.gif"));
    		pas.setText(null); pas.setIcon(new ImageIcon("paste.gif"));
    		
    		Save.setEnabled(false);
    		SaveAs.setEnabled(false);
    		
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
    		pack();
    		area.addKeyListener(k1);
    		setTitle(currentFile);
    		setVisible(true);
    	}
    We are currently adding our functions and giving some proper icons for our toolbar items ! Note we are adding in icons and giving null text to each item.
    Our Save and SaveAs functions will represent the standard every time we launch the application...hence it's false...

    Listener
    Code:
    private KeyListener k1 = new KeyAdapter() {
    		public void keyPressed(KeyEvent e) {
    			changed = true;
    			Save.setEnabled(true);
    			SaveAs.setEnabled(true);
    		}
    	};
    Now here we have our listener which will listen when any key is pressed thus making the changed statement true and allowing us to save or saveas.Quite good right?

    Action #1
    Code:
    Action Open = new AbstractAction("Open", new ImageIcon("open.gif")) {
    		public void actionPerformed(ActionEvent e) {
    			saveOld();
    			if(dialog.showOpenDialog(null)==JFileChooser.APPROVE_OPTION) {
    				readInFile(dialog.getSelectedFile().getAbsolutePath());
    			}
    			SaveAs.setEnabled(true);
    		}
    	};
    By pressing on our ItemIcon we will trigger an Action(Abstract one). Also by triggering the Icon action we will be able to preserve the moment of our text. Resulting us to be able choose where to save and use it later :>

    Action #2
    Code:
    Action Save = new AbstractAction("Save", new ImageIcon("save.gif")) {
    		public void actionPerformed(ActionEvent e) {
    			if(!currentFile.equals("Untitled"))
    				saveFile(currentFile);
    			else
    				saveFileAs();
    		}
    	};
    So here is our save function. We will be able to save our current file. So by playing along I thought like this. If the currentFile doesn't equal to Untitled then just save it as it's called... else save as thus allowing the sure to give it a title

    Action #3
    Code:
    Action SaveAs = new AbstractAction("Save as...") {
    		public void actionPerformed(ActionEvent e) {
    			saveFileAs();
    		}
    	};
    Nothing much with this action. We are just allowing the user to saveAs...thus giving it a title...

    Action #4
    Code:
    Action Quit = new AbstractAction("Quit") {
    		public void actionPerformed(ActionEvent e) {
    			saveOld();
    			System.exit(0);
    		}
    	};
    A quit function is needed also we are saving the old one. Which means... we will see later on

    Action Maping
    Code:
    ActionMap m = area.getActionMap();
    	Action Cut = m.get(DefaultEditorKit.cutAction);
    	Action Copy = m.get(DefaultEditorKit.copyAction);
    	Action Paste = m.get(DefaultEditorKit.pasteAction);
    By allowing us, to give absolute correct power we are using the DefaultEditorKit in the Swing package...(IO too..)

    Methods #1
    Code:
    private void saveFileAs() {
    		if(dialog.showSaveDialog(null)==JFileChooser.APPROVE_OPTION)
    			saveFile(dialog.getSelectedFile().getAbsolutePath());
    	}
    So now we have defined what saveFileAs will result to. However what will saveFile do, is something I will return to.

    Methods #2
    Code:
    	private void saveOld() {
    		if(changed) {
    			if(JOptionPane.showConfirmDialog(this, "Would you like to save "+ currentFile +" ?","Save",JOptionPane.YES_NO_OPTION)== JOptionPane.YES_OPTION)
    				saveFile(currentFile);
    		}
    	}
    By using a saveOld giving us an option to save the changed state thus naming it old doesn't seem wrong, right~?

    Method #3
    Code:
    	private void readInFile(String fileName) {
    		try {
    			FileReader r = new FileReader(fileName);
    			area.read(r,null);
    			r.close();
    			currentFile = fileName;
    			setTitle(currentFile);
    			changed = false;
    		}
    		catch(IOException e) {
    			Toolkit.getDefaultToolkit().beep();
    			JOptionPane.showMessageDialog(this,"Editor can't find the file called "+fileName);
    		}
    	}
    As we are allowed to save, how do we open a file? Easy making a filereader method... The beep sound isn't required however I feel that making it kinda "cooler" why not give it an extra touch?

    Method #4
    Code:
    	private void saveFile(String fileName) {
    		try {
    			FileWriter w = new FileWriter(fileName);
    			area.write(w);
    			w.close();
    			currentFile = fileName;
    			setTitle(currentFile);
    			changed = false;
    			Save.setEnabled(false);
    		}
    		catch(IOException e) {
    		}
    	}
    Our savefile method. Allowing the user to define a name for the title as well to his/her document.

    The main
    Code:
    public  static void main(String[] arg) {
    		new TextEditor();
    	}
    }
    Creating a new TextEditor everytime we launch !
    Hope you enjoyed to follow this tutorial as I created it for you guys !
    Cheers !

    Output.
    Simple Text Editor-texteditoroutput.png
    IconPictures
    JTEditor.rar

    Hatsune Miku ~❤❤❤
    初音ミク。~❤❤❤

  2. #2
    Super Moderator WingedPanther has much to be proud of WingedPanther has much to be proud of WingedPanther has much to be proud of WingedPanther has much to be proud of WingedPanther has much to be proud of WingedPanther has much to be proud of WingedPanther has much to be proud of WingedPanther has much to be proud of WingedPanther has much to be proud of WingedPanther's Avatar
    Join Date
    Jul 2006
    Age
    36
    Posts
    11,665
    Blog Entries
    57

    Re: Simple Text Editor

    Nicely done! +rep
    CodeCall Blog | CodeCall Wiki | Shareware
    Programming is a branch of mathematics.
    My CodeCall Blog | My Personal Blog

  3. #3
    Administrator Jordan is a name known to all Jordan is a name known to all Jordan is a name known to all Jordan is a name known to all Jordan is a name known to all Jordan is a name known to all Jordan's Avatar
    Join Date
    Nov 2005
    Location
    Hendersonville, NC
    Posts
    24,556
    Blog Entries
    97

    Re: Simple Text Editor

    Very cool! The ending result is awesome. +rep

  4. #4
    Code Warrior Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n's Avatar
    Join Date
    May 2008
    Location
    4chan.org/g/
    Age
    20
    Posts
    3,836
    Blog Entries
    4

    Re: Simple Text Editor

    Quote Originally Posted by WingedPanther View Post
    Nicely done! +rep
    Thank you
    Quote Originally Posted by Jordan View Post
    Very cool! The ending result is awesome. +rep
    Thanks

    Hatsune Miku ~❤❤❤
    初音ミク。~❤❤❤

  5. #5
    Code Warrior
    /////////|||||\\\\\\\\\
    amrosama is a splendid one to behold amrosama is a splendid one to behold amrosama is a splendid one to behold amrosama is a splendid one to behold amrosama is a splendid one to behold amrosama is a splendid one to behold amrosama is a splendid one to behold amrosama's Avatar
    Join Date
    Aug 2007
    Location
    Pyramids st, Giza, Egypt
    Age
    21
    Posts
    8,182
    Blog Entries
    12

    Re: Simple Text Editor

    nice lookin app!
    ill +rep you when it lets me

  6. #6
    Code Warrior Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n's Avatar
    Join Date
    May 2008
    Location
    4chan.org/g/
    Age
    20
    Posts
    3,836
    Blog Entries
    4

    Re: Simple Text Editor

    Quote Originally Posted by amrosama View Post
    nice lookin app!
    ill +rep you when it lets me
    Haha, thanks

    Hatsune Miku ~❤❤❤
    初音ミク。~❤❤❤

  7. #7
    Newbie CSInTraining is an unknown quantity at this point CSInTraining's Avatar
    Join Date
    Oct 2009
    Location
    UK
    Posts
    5

    Re: Simple Text Editor

    great tutorial, been looking for one like this for 5 months now and have fnally found it, thank you VERY much,
    how is it you create a new instance of the programme which will remain open when the original window is closed?

  8. #8
    Code Warrior Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n's Avatar
    Join Date
    May 2008
    Location
    4chan.org/g/
    Age
    20
    Posts
    3,836
    Blog Entries
    4

    Re: Simple Text Editor

    Quote Originally Posted by CSInTraining View Post
    great tutorial, been looking for one like this for 5 months now and have fnally found it, thank you VERY much,
    how is it you create a new instance of the programme which will remain open when the original window is closed?
    Pardon?

    Hatsune Miku ~❤❤❤
    初音ミク。~❤❤❤

  9. #9
    Code Warrior Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n has much to be proud of Turk4n's Avatar
    Join Date
    May 2008
    Location
    4chan.org/g/
    Age
    20
    Posts
    3,836
    Blog Entries
    4

    Re: Simple Text Editor

    Quote Originally Posted by CSInTraining View Post
    great tutorial, been looking for one like this for 5 months now and have fnally found it, thank you VERY much,
    how is it you create a new instance of the programme which will remain open when the original window is closed?
    Pardon?

    Hatsune Miku ~❤❤❤
    初音ミク。~❤❤❤

  10. #10
    Newbie CSInTraining is an unknown quantity at this point CSInTraining's Avatar
    Join Date
    Oct 2009
    Location
    UK
    Posts
    5

    Re: Simple Text Editor

    sorry, I meant that how do you open a new window of this application, that is not attached (such as open it untitled1, use it to open untitled 2 , close untitled 1 but untitled 2 keeps going)
    sorry for my poor wording and "n00bish" question.
    +rep

+ Reply to Thread
Page 1 of 2
1 2 LastLast

Thread Information

Users Browsing this Thread

There are currently 2 users browsing this thread. (0 members and 2 guests)

     

Similar Threads

  1. javascript error in text editor
    By Divya in forum JavaScript and CSS
    Replies: 1
    Last Post: 08-04-2009, 09:08 AM
  2. Backup current text in textbox after x amount of time
    By Grue in forum Visual Basic Programming
    Replies: 4
    Last Post: 06-11-2009, 11:29 AM
  3. Text editor for teaching a novice?
    By Cicero480 in forum Software Development Tools
    Replies: 13
    Last Post: 04-05-2009, 01:39 AM
  4. C++ Text Editor Development
    By Natsuki in forum C and C++
    Replies: 7
    Last Post: 03-26-2008, 06:58 AM
  5. Replies: 3
    Last Post: 09-15-2007, 10:08 PM

Bookmarks

Bookmarks

     
        Algorithms and Data Structures

        Java tutorials

        Algorithms Forum

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts