java写的记事本

这一个星期,写了一个记事本,其中看了从网上找的几个功能不是很完整的记事本的代码,从这些代码中借鉴了不少东西,然后再百度、谷歌加看文档,尽可能的完善记事本的功能。

之前在csdn上看到一篇文章说通过做项目学习是最好的学习方法,这句话我比较认同,从这几次做的几个小程序来看,确实让人进步蛮快,通过写这个记事本,关于java的更多知识点又让我了然于胸并且能够运用它们,下面不一一列举这些方方面面,具体说说这个记事本的功能及其实现吧:

 

在整个代码的编写过程中,我觉得比较困难的在于文件菜单选项下的:新建、打开、保存、关闭,再就是编辑菜单选项下的查找与替换等,等并不是说这几个模块的实现难,而是因为它们受制于别的状态。

 比如说点打开这个模块,分了好几种情况:

   (一)、直接在空白文档的基础上打开

   (二)、在非空白文档的基础上打开

           ①、还没保存过或不是打开的已存在文件

           ②、保存过或打开已存在的文件

即点击打开时,若是上面所列的第一种情况,则直接弹出打开对话框并选择文件即可,若是第二种情况,则要先弹出一个询问对话框问是否保存,选择了再继续,如果不保存,则同第一种情况;若选择保存,又分两种情况,第一种是(二)中的①情况,即还要选择保存路径,第二种是(二)  中的②情况,直接保存即可。

具体代码实现如下:

 

// 打开(O)按钮事件监听
openItem.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent event){
      if (selectedFile == null && textArea.getText().equals("")){

         } else {
	   int btn = JOptionPane.showConfirmDialog(container, "是否保存到"
	     + selectedFile + "?", "是否保存",
	     JOptionPane.YES_NO_CANCEL_OPTION);
	     if (btn == JOptionPane.CANCEL_OPTION) {
		  return;
	     } else if (btn == JOptionPane.YES_OPTION) {
		   if (selectedFile != null) {
		   try {
		       BufferedWriter bw = new BufferedWriter(
				new FileWriter(selectedFile));
				String str = textArea.getText();
				String[] lines = str.split("\n");
				for (String line : lines) {
				    bw.write(line + "\r\n");
				}
				bw.flush();
				bw.close();
				newPage = false;
				} catch (IOException e) {
				
				} else if (selectedFile == null) {
				     choose = new JFileChooser();
				     int state = choose.showSaveDialog(container);
				     if (state == JFileChooser.APPROVE_OPTION) {
				     try {
					 File file = choose.getSelectedFile();
				          BufferedWriter bw = new BufferedWriter(
						     new FileWriter(file));
					 String str = textArea.getText();
					 String[] lines = str.split("\n");
					 for (String line : lines) {		              
                                            bw.write(line + "\r\n");
					 }
					 bw.flush();
					 file.createNewFile();
				 	 bw.close();
				          newPage = false;
					 } catch (IOException e) {
				            JOptionPane.showConfirmDialog(container,
						"保存文件失败!", "ERROR",
						JOptionPane.ERROR_MESSAGE);
								}
							}
						}
					}
				}
				choose = new JFileChooser();
				choose.setFileFilter(new Filter());
				int state = choose.showOpenDialog(container);
				if (state == JFileChooser.APPROVE_OPTION) {
				   textField.setText(choose.getSelectedFile().toString());
				   try {
				        selectedFile = choose.getSelectedFile();
				        BufferedReader br = new BufferedReader(new FileReader(
				           selectedFile));
				        textArea.read(br, "");
				        br.close();
				        newPage = false;
				        }catch (IOException e) {
					  JOptionPane.showConfirmDialog(container, "打开文件失败!",
						"ERROR", JOptionPane.ERROR_MESSAGE);
					}
				}
			}
		});

 

然后新建、保存以及关闭都是类似处理,即处理前要判断然后询问是否先保存再进行相应操作,其中保存模块的代码如下:

 

// 保存(S)按钮监听
saveItem.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent event) {
	// TODO Auto-generated method stub
	if (newPage == true || selectedFile == null) {
	choose = new JFileChooser();
         int state = choose.showSaveDialog(container);
         if (state == JFileChooser.APPROVE_OPTION) {
	   try {
	         File file = choose.getSelectedFile();
		BufferedWriter bw = new BufferedWriter(
			new FileWriter(file));
		String str = textArea.getText();
		String[] lines = str.split("\n");
		for (String line : lines) {
		   bw.write(line + "\r\n");
		}
		bw.flush();
		file.createNewFile();
		bw.close();
		newPage = false;
		selectedFile = file;
	         } catch (IOException e) {
		    JOptionPane.showMessageDialog(container, "保存文件失败",
			"ERROR", JOptionPane.ERROR_MESSAGE);
		}
	    }
	} else if (newPage == false && selectedFile != null) {

	  try {
	    BufferedWriter bw = new BufferedWriter(new FileWriter(
		selectedFile));
	    String str = textArea.getText();
	    String[] lines = str.split("\n");
	    for (String line : lines) {
	        bw.write(line + "\r\n");
	    }
	    bw.flush();
	    bw.close();
	    newPage = false;
	} catch (IOException e) {
	    JOptionPane.showMessageDialog(container, "保存文件失败",
		"ERROR", JOptionPane.ERROR_MESSAGE);
		}
	}
      }
});


整个记事本的功能包括查找、查找与替换、字数统计、字数放大缩小、字体颜色的选择以及背景色的选择,都实现了,还有把编辑里的复制、粘贴、全选等功能也集成到右键里,等等,总之通过实现这个记事本,付出的努力比较多,当然回报也不少,由于整个代码有1000行,不能一一贴出来,有兴趣的朋友可以到CSDN的资源区:

http://download.csdn.net/detail/yanghai0321/3898890

下载。

 

你可能感兴趣的:(java,String,File,filter,null,文档)