Java中的记事本以及源代码

【Java中的记事本以及源代码】带有源代码的Java记事本:我们可以借助AWT / Swing和事件处理功能来开发Java记事本。让我们看看在Java中创建记事本的代码。

import java.io.*; import java.util.Date; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; /************************************/ class FileOperation { Notepad npd; boolean saved; boolean newFileFlag; String fileName; String applicationTitle="Notepad - srcmini"; 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, "< html> "+temp.getPath()+" already exists.< br> Do you want to replace it?< html> ", "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, "< html> "+temp.getName()+"< br> file not found.< br> "+ "Please verify the correct file name was given.< html> ", "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="< html> The text in the "+fileName+" file has been changed.< br> "+ "Do you want to save the changes?< html> "; 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 Notepadimplements 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 textif(findReplaceDialog==null) statusBar.setText("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 textif(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***/ 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"; }

Java中的记事本以及源代码

文章图片

    推荐阅读