这一个星期,写了一个记事本,其中看了从网上找的几个功能不是很完整的记事本的代码,从这些代码中借鉴了不少东西,然后再百度、谷歌加看文档,尽可能的完善记事本的功能。
之前在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
下载。