/* * This is a simple Text editor(like NotePad) program written in java. * @Tapas kumar jena * mail-tapas.friends@gmail.com */ import java.awt.*; import java.awt.event.*; import java.awt.datatransfer.*; import java.applet.*; import java.io.*; import javax.swing.*; import javax.swing.undo.*; import java.util.Hashtable; class UndoableTextArea extends TextArea implements StateEditable { //Variable declaration private final static String KEY_STATE="UndoableTextAreaKey"; private boolean textChanged=false; private UndoManager undoManager; private StateEdit currentEdit; public UndoableTextArea(){ super(); initUndoable(); } public UndoableTextArea(String string){ super(string); initUndoable(); } public UndoableTextArea(int rows,int columns){ super(rows,columns); initUndoable(); } public UndoableTextArea(String string,int rows,int columns){ super(string,rows,columns); initUndoable(); } public UndoableTextArea(String string,int rows,int columns,int scrollbars){ super(string,rows,columns,scrollbars); initUndoable(); } public boolean undo(){ try{ undoManager.undo(); return true; } catch(CannotUndoException e){ System.out.println("cannot undo"); return false; } } public boolean redo(){ try{ undoManager.redo(); return true; } catch(CannotRedoException e){ System.out.println("cannot redo"); return false; } } public void storeState(Hashtable state){ state.put(KEY_STATE,getText()); } public void restoreState(Hashtable state){ Object data=state.get(KEY_STATE); if(data!=null){ setText((String)data); } } private void takeSnapshot(){ if(textChanged){ currentEdit.end(); undoManager.addEdit(currentEdit); textChanged=false; currentEdit=new StateEdit(this); } } private void initUndoable(){ undoManager =new UndoManager(); currentEdit=new StateEdit(this); addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent event){ if(event.isActionKey()){ takeSnapshot(); } } }); addFocusListener(new FocusAdapter(){ public void focusLost(FocusEvent fe){ takeSnapshot(); } }); addTextListener(new TextListener(){ public void textValueChanged(TextEvent e){ textChanged=true; takeSnapshot(); } }); } } //Main class for TextEditor public class TextEditor extends Frame { //Components boolean b=true; Frame fm; FileDialog fd; Font f; int style=Font.PLAIN; int fsize=12; UndoableTextArea txt; String filename,st,fn="untitled",dn; Clipboard clip=getToolkit().getSystemClipboard(); //Constructor TextEditor(){ f=new Font("Courier",style,fsize); setLayout(new GridLayout(1,1)); txt=new UndoableTextArea(80,25); txt.setFont(f); add(txt); MenuBar mb=new MenuBar(); Menu fonttype=new Menu("FontType"); MenuItem one,two,three,four,five,six; one=new MenuItem("TimesRoman"); two=new MenuItem("Helvetica"); three=new MenuItem("Courier"); four=new MenuItem("Arial"); five=new MenuItem("Arial Black"); six=new MenuItem("Century"); fonttype.add(one); fonttype.add(two); fonttype.add(three); fonttype.add(four); fonttype.add(five); fonttype.add(six); one.addActionListener(new Type()); two.addActionListener(new Type()); three.addActionListener(new Type()); four.addActionListener(new Type()); five.addActionListener(new Type()); six.addActionListener(new Type()); Menu fontmenu=new Menu("Font"); MenuItem boldmenu=new MenuItem("Bold"); MenuItem plainmenu=new MenuItem("Plain"); MenuItem italicmenu=new MenuItem("Italic"); fontmenu.add(boldmenu); fontmenu.add(plainmenu); fontmenu.add(italicmenu); boldmenu.addActionListener(new FM()); plainmenu.addActionListener(new FM()); italicmenu.addActionListener(new FM()); Menu size=new Menu("Size"); MenuItem s1,s2,s3,s4,s5,s6,s7,s8,s9,s10; s1=new MenuItem("10"); s2=new MenuItem("12"); s3=new MenuItem("14"); s4=new MenuItem("16"); s5=new MenuItem("18"); s6=new MenuItem("20"); s7=new MenuItem("22"); s8=new MenuItem("24"); s9=new MenuItem("26"); s10=new MenuItem("28"); size.add(s1); size.add(s2); size.add(s3); size.add(s4); size.add(s5); size.add(s6); size.add(s7); size.add(s8); size.add(s9); size.add(s10); s1.addActionListener(new Size()); s2.addActionListener(new Size()); s3.addActionListener(new Size()); s4.addActionListener(new Size()); s5.addActionListener(new Size()); s6.addActionListener(new Size()); s7.addActionListener(new Size()); s8.addActionListener(new Size()); s9.addActionListener(new Size()); s10.addActionListener(new Size()); size.addActionListener(new FM()); fontmenu.add(size); Menu file=new Menu("File"); MenuItem n=new MenuItem("New",new MenuShortcut(KeyEvent.VK_N)); MenuItem o=new MenuItem("Open",new MenuShortcut(KeyEvent.VK_O)); MenuItem s=new MenuItem("Save",new MenuShortcut(KeyEvent.VK_S)); MenuItem e=new MenuItem("Exit",new MenuShortcut(KeyEvent.VK_E)); n.addActionListener(new New()); file.add(n); o.addActionListener(new Open()); file.add(o); s.addActionListener(new Save()); file.add(s); e.addActionListener(new Exit()); file.add(e); mb.add(file); addWindowListener(new Win()); Menu edit=new Menu("Edit"); MenuItem cut=new MenuItem("Cut",new MenuShortcut(KeyEvent.VK_X)); MenuItem copy=new MenuItem("Copy",new MenuShortcut(KeyEvent.VK_C)); MenuItem paste=new MenuItem("Paste",new MenuShortcut(KeyEvent.VK_V)); cut.addActionListener(new Cut()); edit.add(cut); copy.addActionListener(new Copy()); edit.add(copy); paste.addActionListener(new Paste()); edit.add(paste); Menu color =new Menu("Color"); MenuItem Bg=new MenuItem("Background"); MenuItem Fg=new MenuItem("Foreground"); Bg.addActionListener(new BC()); Fg.addActionListener(new BC()); Menu undo=new Menu("Undo&Redo"); MenuItem un=new MenuItem("Undo"); MenuItem re=new MenuItem("Redo"); re.addActionListener(new WW()); un.addActionListener(new WW()); undo.add(un); undo.add(re); color.add(Bg); color.add(Fg); mb.add(edit); mb.add(fontmenu); mb.add(fonttype); mb.add(color); mb.add(undo); setMenuBar(mb); mylistener mylist=new mylistener(); addWindowListener(mylist); } //Action performed defination class WW implements ActionListener { public void actionPerformed(ActionEvent e){ String se=e.getActionCommand(); if(se.equals("Undo")) txt.undo(); if(se.equals("Redo")) txt.redo(); } } //Event for window closeing class mylistener extends WindowAdapter { public void windowClosing(WindowEvent we){ if(!b) System.exit(0); } } //--Action performed for Menu bar options start-- class New implements ActionListener { public void actionPerformed(ActionEvent ae){ txt.setText(" "); setTitle(filename); fn="Untitled"; } } class Open implements ActionListener { public void actionPerformed(ActionEvent ae){ FileDialog fd=new FileDialog(TextEditor.this,"Select File",FileDialog.LOAD); fd.show(); if((fn=fd.getFile())!=null){ filename=fd.getDirectory()+fd.getFile(); dn=fd.getDirectory(); setTitle(filename); readFile(); } txt.requestFocus(); } } class Save implements ActionListener { public void actionPerformed(ActionEvent ae){ FileDialog fd=new FileDialog(TextEditor.this,"Save File",FileDialog.SAVE); fd.setFile(fn); fd.setDirectory(dn); fd.show(); if(fd.getFile()!=null){ filename=fd.getDirectory()+fd.getFile(); setTitle(filename); writeFile(); txt.requestFocus(); } } } class Exit implements ActionListener { public void actionPerformed(ActionEvent ae){ System.exit(0); } } void readFile() { BufferedReader d; StringBuffer sb=new StringBuffer(); try{ d=new BufferedReader(new FileReader(filename)); String line; while((line=d.readLine())!=null) sb.append(line+""); txt.setText(sb.toString()); d.close(); }catch(FileNotFoundException e){ System.out.println("File not found"); }catch(IOException e){ } } public void writeFile() { try{ DataOutputStream d=new DataOutputStream(new FileOutputStream(filename)); String line=txt.getText(); BufferedReader br=new BufferedReader(new StringReader(line)); while((line=br.readLine())!=null){ d.writeBytes(line+""); } d.close(); }catch(Exception e){ System.out.println("File not found"); } } class Cut implements ActionListener { public void actionPerformed(ActionEvent ae){ String sel=txt.getSelectedText(); StringSelection ss=new StringSelection(sel); clip.setContents(ss,ss); txt.replaceRange("",txt.getSelectionStart(),txt.getSelectionEnd()); } } class Copy implements ActionListener { public void actionPerformed(ActionEvent ae){ String sel=txt.getSelectedText(); StringSelection clipstring=new StringSelection(sel); clip.setContents(clipstring,clipstring); } } class Paste implements ActionListener{ public void actionPerformed(ActionEvent ae){ Transferable cliptran=clip.getContents(TextEditor.this); try{ String sel=(String)cliptran.getTransferData(DataFlavor.stringFlavor); txt.replaceRange(sel,txt.getSelectionStart(),txt.getSelectionEnd()); }catch(Exception e){ System.out.println("not starting flavor"); } } } //Confirmation before Closing Application class Win extends WindowAdapter{ public void windowClosing(WindowEvent we){ ConfirmDialog cd=new ConfirmDialog(); if(!b) System.exit(0); } } class ConfirmDialog extends JPanel { public ConfirmDialog(){ int result; result=JOptionPane.showConfirmDialog(this,fn+" not saved do you want to save"); switch(result){ case JOptionPane.YES_OPTION: FileDialog fd=new FileDialog(TextEditor.this,"Save File",FileDialog.SAVE); fd.setFile(fn); fd.setDirectory(dn); fd.show(); if(fd.getFile()!=null){ filename=fd.getDirectory()+fd.getFile(); setTitle(filename); writeFile(); txt.requestFocus(); } System.out.println("Yes button pressed"); break; case JOptionPane.NO_OPTION: dispose(); System.exit(0); System.out.println("NO button pressed"); break; case JOptionPane.CANCEL_OPTION: setVisible(true); repaint(); System.out.println("Cancel button pressed"); break; case JOptionPane.CLOSED_OPTION: System.out.println("Closed button pressed"); break; } } } class Size implements ActionListener { public void actionPerformed(ActionEvent e){ int style=f.getStyle(); String w=e.getActionCommand(); if(w=="10"){ f= new Font("Courier",style,10); txt.setFont(f); fsize=f.getSize(); repaint(); } if(w=="12"){ f= new Font("Courier",style,12); fsize=f.getSize(); txt.setFont(f); repaint(); } if(w=="14"){ f= new Font("Courier",style,14); fsize=f.getSize(); txt.setFont(f); repaint(); } if(w=="16"){ f= new Font("Courier",style,16); txt. setFont(f); fsize=f.getSize(); repaint(); } if(w=="18"){ f= new Font("Courier",style,18); txt.setFont(f); fsize=f.getSize(); repaint(); } if(w=="20"){ f= new Font("Courier",style,20); txt.setFont(f); fsize=f.getSize(); repaint(); } if(w=="22"){ f= new Font("Courier",style,22); txt.setFont(f); fsize=f.getSize(); repaint(); } if(w=="24"){ f= new Font("Courier",style,24); txt.setFont(f); fsize=f.getSize(); repaint(); } if(w=="26"){ f= new Font("Courier",style,26); txt.setFont(f); fsize=f.getSize(); repaint(); } if(w=="28"){ f= new Font("Courier",style,28); txt.setFont(f); fsize=f.getSize(); repaint(); } } } //Class for Font handling class FM extends Applet implements ActionListener{ public void actionPerformed(ActionEvent e){ String b=e.getActionCommand(); if(b=="Bold"){ f= new Font("Courier",Font.BOLD,fsize); style=f.getStyle(); txt.setFont(f); } if(b=="Plain"){ f= new Font("Courier",Font.PLAIN,fsize); style=f.getStyle(); txt.setFont(f); } if(b=="Italic"){ f= new Font("Courier",Font.ITALIC,fsize); txt.setFont(f); } repaint(); } } //Class for FontType handling class Type implements ActionListener { public void actionPerformed(ActionEvent e){ String lbl=e.getActionCommand(); if(lbl=="TimesRoman"){ f=new Font("TimesRoman",style,fsize); txt.setFont(f); } if(lbl=="Courier"){ f=new Font("Courier",style,fsize); txt.setFont(f); } if(lbl=="Helvetica"){ f=new Font("Helvetica",style,fsize); txt.setFont(f); } if(lbl=="Arial"){ f=new Font("Arial",style,fsize); txt.setFont(f); } if(lbl=="Arial Black"){ f=new Font("ArialBlack",style,fsize); txt.setFont(f); } if(lbl=="Century"){ f=new Font("Century",style,fsize); txt.setFont(f); } repaint(); } } //Class for Background Color class BC implements ActionListener { public void actionPerformed(ActionEvent e){ st=e.getActionCommand(); JFrame jf=new JFrame("JColorChooser"); colorChooser c=new colorChooser(); c.setSize(400,300); c.setVisible(true); } } //Class for color chooser class colorChooser extends JFrame { Button ok; JColorChooser jcc; public colorChooser(){ setTitle("JColorChooser"); jcc=new JColorChooser(); JPanel content=(JPanel)getContentPane(); content.setLayout(new BorderLayout()); content.add(jcc,"Center"); ok=new Button("OK"); content.add(ok,"South"); ok.addActionListener(new B()); } class B implements ActionListener { public void actionPerformed(ActionEvent e){ System.out.println("Color Is:"+jcc.getColor().toString()); if(st.equals("Background")) txt.setBackground(jcc.getColor()); if(st.equals("Foreground")) txt.setForeground(jcc.getColor()); setVisible(false); } } }//--Action performed for Menu bar options end-- //Main method of the application public static void main(String args[]) { Frame fm=new TextEditor(); fm.setSize(800,600); fm.setVisible(true); fm.show(); } }The above prograam looks like below -
Monday, January 18, 2010
Categories: Java
Related Posts
Java
Subscribe to:
Post Comments (Atom)
No Response to "Typical TextEditor in java (e.g NotePad)"
Post a Comment