【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 Swing中的在线考试项目
- Java Swing教程介绍
- 如何在Windows 10中修复Failed Ntfs.sys(解决办法教程)
- 移动web APP开发所用到的好网站 好代码
- 韩剧TV APP案例分析
- Xamarin.Android Binding-----百度地图SDK
- android ——后台下载
- apollo实现c#与android消息推送
- Android Studio中导入Eclipse项目后乱码的解决方法