//package p1; import java.io.*; import java.util.Date; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; //import p1.FontChooser; //import p1.FontDialog; //import p1.FindDialog; //import p1.LookAndFeelMenu; //import p1.MyFileFilter; /************************************/ class FileOperation { Notepad npd; boolean saved; boolean newFileFlag; String fileName; String applicationTitle="Javapad"; File fileRef; JFileChooser chooser; ///////////////////////////// boolean isSave(){return saved;} void setSave(boolean saved){this.saved=saved;} String getFileName(){return new String(fileName);} void setFileName(String fileName){this.fileName=new String(fileName);} ///////////////////////// FileOperation(Notepad npd) { this.npd=npd; saved=true; newFileFlag=true; fileName=new String("Untitled"); fileRef=new File(fileName); this.npd.f.setTitle(fileName+" - "+applicationTitle); chooser=new JFileChooser(); chooser.addChoosableFileFilter(new MyFileFilter(".java","Java Source Files(*.java)")); chooser.addChoosableFileFilter(new MyFileFilter(".txt","Text Files(*.txt)")); chooser.setCurrentDirectory(new File(".")); } ////////////////////////////////////// boolean saveFile(File temp) { FileWriter fout=null; try { fout=new FileWriter(temp); fout.write(npd.ta.getText()); } catch(IOException ioe){updateStatus(temp,false);return false;} finally {try{fout.close();}catch(IOException excp){}} updateStatus(temp,true); return true; } //////////////////////// boolean saveThisFile() { if(!newFileFlag) {return saveFile(fileRef);} return saveAsFile(); } //////////////////////////////////// boolean saveAsFile() { File temp=null; chooser.setDialogTitle("Save As..."); chooser.setApproveButtonText("Save Now"); chooser.setApproveButtonMnemonic(KeyEvent.VK_S); chooser.setApproveButtonToolTipText("Click me to save!"); do { if(chooser.showSaveDialog(this.npd.f)!=JFileChooser.APPROVE_OPTION) return false; temp=chooser.getSelectedFile(); if(!temp.exists()) break; if( JOptionPane.showConfirmDialog( this.npd.f,""+temp.getPath()+" already exists.
Do you want to replace it?", "Save As",JOptionPane.YES_NO_OPTION )==JOptionPane.YES_OPTION) break; }while(true); return saveFile(temp); } //////////////////////// boolean openFile(File temp) { FileInputStream fin=null; BufferedReader din=null; try { fin=new FileInputStream(temp); din=new BufferedReader(new InputStreamReader(fin)); String str=" "; while(str!=null) { str=din.readLine(); if(str==null) break; this.npd.ta.append(str+"\n"); } } catch(IOException ioe){updateStatus(temp,false);return false;} finally {try{din.close();fin.close();}catch(IOException excp){}} updateStatus(temp,true); this.npd.ta.setCaretPosition(0); return true; } /////////////////////// void openFile() { if(!confirmSave()) return; chooser.setDialogTitle("Open File..."); chooser.setApproveButtonText("Open this"); chooser.setApproveButtonMnemonic(KeyEvent.VK_O); chooser.setApproveButtonToolTipText("Click me to open the selected file.!"); File temp=null; do { if(chooser.showOpenDialog(this.npd.f)!=JFileChooser.APPROVE_OPTION) return; temp=chooser.getSelectedFile(); if(temp.exists()) break; JOptionPane.showMessageDialog(this.npd.f, ""+temp.getName()+"
file not found.
"+ "Please verify the correct file name was given.", "Open", JOptionPane.INFORMATION_MESSAGE); } while(true); this.npd.ta.setText(""); if(!openFile(temp)) { fileName="Untitled"; saved=true; this.npd.f.setTitle(fileName+" - "+applicationTitle); } if(!temp.canWrite()) newFileFlag=true; } //////////////////////// void updateStatus(File temp,boolean saved) { if(saved) { this.saved=true; fileName=new String(temp.getName()); if(!temp.canWrite()) {fileName+="(Read only)"; newFileFlag=true;} fileRef=temp; npd.f.setTitle(fileName + " - "+applicationTitle); npd.statusBar.setText("File : "+temp.getPath()+" saved/opened successfully."); newFileFlag=false; } else { npd.statusBar.setText("Failed to save/open : "+temp.getPath()); } } /////////////////////// boolean confirmSave() { String strMsg="The text in the "+fileName+" file has been changed.
"+ "Do you want to save the changes?"; if(!saved) { int x=JOptionPane.showConfirmDialog(this.npd.f,strMsg,applicationTitle,JOptionPane.YES_NO_CANCEL_OPTION); if(x==JOptionPane.CANCEL_OPTION) return false; if(x==JOptionPane.YES_OPTION && !saveAsFile()) return false; } return true; } /////////////////////////////////////// void newFile() { if(!confirmSave()) return; this.npd.ta.setText(""); fileName=new String("Untitled"); fileRef=new File(fileName); saved=true; newFileFlag=true; this.npd.f.setTitle(fileName+" - "+applicationTitle); } ////////////////////////////////////// }// end defination of class FileOperation /************************************/ public class Notepad implements ActionListener, MenuConstants { JFrame f; JTextArea ta; JLabel statusBar; private String fileName="Untitled"; private boolean saved=true; String applicationName="Javapad"; String searchString, replaceString; int lastSearchIndex; FileOperation fileHandler; FontChooser fontDialog=null; FindDialog findReplaceDialog=null; JColorChooser bcolorChooser=null; JColorChooser fcolorChooser=null; JDialog backgroundDialog=null; JDialog foregroundDialog=null; JMenuItem cutItem,copyItem, deleteItem, findItem, findNextItem, replaceItem, gotoItem, selectAllItem; /****************************/ Notepad() { f=new JFrame(fileName+" - "+applicationName); ta=new JTextArea(30,60); statusBar=new JLabel("|| Ln 1, Col 1 ",JLabel.RIGHT); f.add(new JScrollPane(ta),BorderLayout.CENTER); f.add(statusBar,BorderLayout.SOUTH); f.add(new JLabel(" "),BorderLayout.EAST); f.add(new JLabel(" "),BorderLayout.WEST); createMenuBar(f); //f.setSize(350,350); f.pack(); f.setLocation(100,50); f.setVisible(true); f.setLocation(150,50); f.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); fileHandler=new FileOperation(this); ///////////////////// ta.addCaretListener( new CaretListener() { public void caretUpdate(CaretEvent e) { int lineNumber=0, column=0, pos=0; try { pos=ta.getCaretPosition(); lineNumber=ta.getLineOfOffset(pos); column=pos-ta.getLineStartOffset(lineNumber); }catch(Exception excp){} if(ta.getText().length()==0){lineNumber=0; column=0;} statusBar.setText("|| Ln "+(lineNumber+1)+", Col "+(column+1)); } }); ////////////////// DocumentListener myListener = new DocumentListener() { public void changedUpdate(DocumentEvent e){fileHandler.saved=false;} public void removeUpdate(DocumentEvent e){fileHandler.saved=false;} public void insertUpdate(DocumentEvent e){fileHandler.saved=false;} }; ta.getDocument().addDocumentListener(myListener); ///////// WindowListener frameClose=new WindowAdapter() { public void windowClosing(WindowEvent we) { if(fileHandler.confirmSave())System.exit(0); } }; f.addWindowListener(frameClose); ////////////////// /* ta.append("Hello dear hello hi"); ta.append("\nwho are u dear mister hello"); ta.append("\nhello bye hel"); ta.append("\nHello"); ta.append("\nMiss u mister hello hell"); fileHandler.saved=true; */ } //////////////////////////////////// void goTo() { int lineNumber=0; try { lineNumber=ta.getLineOfOffset(ta.getCaretPosition())+1; String tempStr=JOptionPane.showInputDialog(f,"Enter Line Number:",""+lineNumber); if(tempStr==null) {return;} lineNumber=Integer.parseInt(tempStr); ta.setCaretPosition(ta.getLineStartOffset(lineNumber-1)); }catch(Exception e){} } /////////////////////////////////// public void actionPerformed(ActionEvent ev) { String cmdText=ev.getActionCommand(); //////////////////////////////////// if(cmdText.equals(fileNew)) fileHandler.newFile(); else if(cmdText.equals(fileOpen)) fileHandler.openFile(); //////////////////////////////////// else if(cmdText.equals(fileSave)) fileHandler.saveThisFile(); //////////////////////////////////// else if(cmdText.equals(fileSaveAs)) fileHandler.saveAsFile(); //////////////////////////////////// else if(cmdText.equals(fileExit)) {if(fileHandler.confirmSave())System.exit(0);} //////////////////////////////////// else if(cmdText.equals(filePrint)) JOptionPane.showMessageDialog( Notepad.this.f, "Get ur printer repaired first! It seems u dont have one!", "Bad Printer", JOptionPane.INFORMATION_MESSAGE ); //////////////////////////////////// else if(cmdText.equals(editCut)) ta.cut(); //////////////////////////////////// else if(cmdText.equals(editCopy)) ta.copy(); //////////////////////////////////// else if(cmdText.equals(editPaste)) ta.paste(); //////////////////////////////////// else if(cmdText.equals(editDelete)) ta.replaceSelection(""); //////////////////////////////////// else if(cmdText.equals(editFind)) { if(Notepad.this.ta.getText().length()==0) return; // text box have no text if(findReplaceDialog==null) findReplaceDialog=new FindDialog(Notepad.this.ta); findReplaceDialog.showDialog(Notepad.this.f,true);//find } //////////////////////////////////// else if(cmdText.equals(editFindNext)) { if(Notepad.this.ta.getText().length()==0) return; // text box have no text if(findReplaceDialog==null) statusBar.setText("Nothing to search for, use Find option of Edit Menu first !!!!"); else findReplaceDialog.findNextWithSelection(); } //////////////////////////////////// else if(cmdText.equals(editReplace)) { if(Notepad.this.ta.getText().length()==0) return; // text box have no text if(findReplaceDialog==null) findReplaceDialog=new FindDialog(Notepad.this.ta); findReplaceDialog.showDialog(Notepad.this.f,false);//replace } //////////////////////////////////// else if(cmdText.equals(editGoTo)) { if(Notepad.this.ta.getText().length()==0) return; // text box have no text goTo(); } //////////////////////////////////// else if(cmdText.equals(editSelectAll)) ta.selectAll(); //////////////////////////////////// else if(cmdText.equals(editTimeDate)) ta.insert(new Date().toString(),ta.getSelectionStart()); //////////////////////////////////// else if(cmdText.equals(formatWordWrap)) { JCheckBoxMenuItem temp=(JCheckBoxMenuItem)ev.getSource(); ta.setLineWrap(temp.isSelected()); } //////////////////////////////////// else if(cmdText.equals(formatFont)) { if(fontDialog==null) fontDialog=new FontChooser(ta.getFont()); if(fontDialog.showDialog(Notepad.this.f,"Choose a font")) Notepad.this.ta.setFont(fontDialog.createFont()); } //////////////////////////////////// else if(cmdText.equals(formatForeground)) showForegroundColorDialog(); //////////////////////////////////// else if(cmdText.equals(formatBackground)) showBackgroundColorDialog(); //////////////////////////////////// else if(cmdText.equals(viewStatusBar)) { JCheckBoxMenuItem temp=(JCheckBoxMenuItem)ev.getSource(); statusBar.setVisible(temp.isSelected()); } //////////////////////////////////// else if(cmdText.equals(helpAboutNotepad)) { JOptionPane.showMessageDialog(Notepad.this.f,aboutText,"Dedicated 2 u!",JOptionPane.INFORMATION_MESSAGE); } else statusBar.setText("This "+cmdText+" command is yet to be implemented"); }//action Performed //////////////////////////////////// void showBackgroundColorDialog() { if(bcolorChooser==null) bcolorChooser=new JColorChooser(); if(backgroundDialog==null) backgroundDialog=JColorChooser.createDialog (Notepad.this.f, formatBackground, false, bcolorChooser, new ActionListener() {public void actionPerformed(ActionEvent evvv){ Notepad.this.ta.setBackground(bcolorChooser.getColor());}}, null); backgroundDialog.setVisible(true); } //////////////////////////////////// void showForegroundColorDialog() { if(fcolorChooser==null) fcolorChooser=new JColorChooser(); if(foregroundDialog==null) foregroundDialog=JColorChooser.createDialog (Notepad.this.f, formatForeground, false, fcolorChooser, new ActionListener() {public void actionPerformed(ActionEvent evvv){ Notepad.this.ta.setForeground(fcolorChooser.getColor());}}, null); foregroundDialog.setVisible(true); } /////////////////////////////////// JMenuItem createMenuItem(String s, int key,JMenu toMenu,ActionListener al) { JMenuItem temp=new JMenuItem(s,key); temp.addActionListener(al); toMenu.add(temp); return temp; } //////////////////////////////////// JMenuItem createMenuItem(String s, int key,JMenu toMenu,int aclKey,ActionListener al) { JMenuItem temp=new JMenuItem(s,key); temp.addActionListener(al); temp.setAccelerator(KeyStroke.getKeyStroke(aclKey,ActionEvent.CTRL_MASK)); toMenu.add(temp); return temp; } //////////////////////////////////// JCheckBoxMenuItem createCheckBoxMenuItem(String s, int key,JMenu toMenu,ActionListener al) { JCheckBoxMenuItem temp=new JCheckBoxMenuItem(s); temp.setMnemonic(key); temp.addActionListener(al); temp.setSelected(false); toMenu.add(temp); return temp; } //////////////////////////////////// JMenu createMenu(String s,int key,JMenuBar toMenuBar) { JMenu temp=new JMenu(s); temp.setMnemonic(key); toMenuBar.add(temp); return temp; } /*********************************/ void createMenuBar(JFrame f) { JMenuBar mb=new JMenuBar(); JMenuItem temp; JMenu fileMenu=createMenu(fileText,KeyEvent.VK_F,mb); JMenu editMenu=createMenu(editText,KeyEvent.VK_E,mb); JMenu formatMenu=createMenu(formatText,KeyEvent.VK_O,mb); JMenu viewMenu=createMenu(viewText,KeyEvent.VK_V,mb); JMenu helpMenu=createMenu(helpText,KeyEvent.VK_H,mb); createMenuItem(fileNew,KeyEvent.VK_N,fileMenu,KeyEvent.VK_N,this); createMenuItem(fileOpen,KeyEvent.VK_O,fileMenu,KeyEvent.VK_O,this); createMenuItem(fileSave,KeyEvent.VK_S,fileMenu,KeyEvent.VK_S,this); createMenuItem(fileSaveAs,KeyEvent.VK_A,fileMenu,this); fileMenu.addSeparator(); temp=createMenuItem(filePageSetup,KeyEvent.VK_U,fileMenu,this); temp.setEnabled(false); createMenuItem(filePrint,KeyEvent.VK_P,fileMenu,KeyEvent.VK_P,this); fileMenu.addSeparator(); createMenuItem(fileExit,KeyEvent.VK_X,fileMenu,this); temp=createMenuItem(editUndo,KeyEvent.VK_U,editMenu,KeyEvent.VK_Z,this); temp.setEnabled(false); editMenu.addSeparator(); cutItem=createMenuItem(editCut,KeyEvent.VK_T,editMenu,KeyEvent.VK_X,this); copyItem=createMenuItem(editCopy,KeyEvent.VK_C,editMenu,KeyEvent.VK_C,this); createMenuItem(editPaste,KeyEvent.VK_P,editMenu,KeyEvent.VK_V,this); deleteItem=createMenuItem(editDelete,KeyEvent.VK_L,editMenu,this); deleteItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0)); editMenu.addSeparator(); findItem=createMenuItem(editFind,KeyEvent.VK_F,editMenu,KeyEvent.VK_F,this); findNextItem=createMenuItem(editFindNext,KeyEvent.VK_N,editMenu,this); findNextItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3,0)); replaceItem=createMenuItem(editReplace,KeyEvent.VK_R,editMenu,KeyEvent.VK_H,this); gotoItem=createMenuItem(editGoTo,KeyEvent.VK_G,editMenu,KeyEvent.VK_G,this); editMenu.addSeparator(); selectAllItem=createMenuItem(editSelectAll,KeyEvent.VK_A,editMenu,KeyEvent.VK_A,this); createMenuItem(editTimeDate,KeyEvent.VK_D,editMenu,this).setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5,0)); createCheckBoxMenuItem(formatWordWrap,KeyEvent.VK_W,formatMenu,this); createMenuItem(formatFont,KeyEvent.VK_F,formatMenu,this); formatMenu.addSeparator(); createMenuItem(formatForeground,KeyEvent.VK_T,formatMenu,this); createMenuItem(formatBackground,KeyEvent.VK_P,formatMenu,this); createCheckBoxMenuItem(viewStatusBar,KeyEvent.VK_S,viewMenu,this).setSelected(true); /************For Look and Feel, May not work properly on different operating environment***/ LookAndFeelMenu.createLookAndFeelMenuItem(viewMenu,this.f); temp=createMenuItem(helpHelpTopic,KeyEvent.VK_H,helpMenu,this); temp.setEnabled(false); helpMenu.addSeparator(); createMenuItem(helpAboutNotepad,KeyEvent.VK_A,helpMenu,this); MenuListener editMenuListener=new MenuListener() { public void menuSelected(MenuEvent evvvv) { if(Notepad.this.ta.getText().length()==0) { findItem.setEnabled(false); findNextItem.setEnabled(false); replaceItem.setEnabled(false); selectAllItem.setEnabled(false); gotoItem.setEnabled(false); } else { findItem.setEnabled(true); findNextItem.setEnabled(true); replaceItem.setEnabled(true); selectAllItem.setEnabled(true); gotoItem.setEnabled(true); } if(Notepad.this.ta.getSelectionStart()==ta.getSelectionEnd()) { cutItem.setEnabled(false); copyItem.setEnabled(false); deleteItem.setEnabled(false); } else { cutItem.setEnabled(true); copyItem.setEnabled(true); deleteItem.setEnabled(true); } } public void menuDeselected(MenuEvent evvvv){} public void menuCanceled(MenuEvent evvvv){} }; editMenu.addMenuListener(editMenuListener); f.setJMenuBar(mb); } /*************Constructor**************/ //////////////////////////////////// public static void main(String[] s) { new Notepad(); } } /**************************************/ //public interface MenuConstants { final String fileText="File"; final String editText="Edit"; final String formatText="Format"; final String viewText="View"; final String helpText="Help"; final String fileNew="New"; final String fileOpen="Open..."; final String fileSave="Save"; final String fileSaveAs="Save As..."; final String filePageSetup="Page Setup..."; final String filePrint="Print"; final String fileExit="Exit"; final String editUndo="Undo"; final String editCut="Cut"; final String editCopy="Copy"; final String editPaste="Paste"; final String editDelete="Delete"; final String editFind="Find..."; final String editFindNext="Find Next"; final String editReplace="Replace"; final String editGoTo="Go To..."; final String editSelectAll="Select All"; final String editTimeDate="Time/Date"; final String formatWordWrap="Word Wrap"; final String formatFont="Font..."; final String formatForeground="Set Text color..."; final String formatBackground="Set Pad color..."; final String viewStatusBar="Status Bar"; final String helpHelpTopic="Help Topic"; final String helpAboutNotepad="About Javapad"; final String aboutText= "Your Javapad

" +"

Prepared by a Ducatian!" +"


I Used jdk1.5 to compile the source code.

" +"Thanx 4 using Javapad
" +"Ur Comments as well as bug reports r very welcome at

" +"


radialgoal@gmail.com
"; }