JAVA 写一个记事本

亦凉 2021-05-03 05:29 644阅读 0赞

1、主要知识点:

1、处理事件的运用、IO流的运用、GUI组件的运用
2、具体案例:

  1. package IO流之小蓝记事本;
  2. import java.awt.BorderLayout;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import java.io.BufferedReader;
  6. import java.io.BufferedWriter;
  7. import java.io.File;
  8. import java.io.FileInputStream;
  9. import java.io.FileNotFoundException;
  10. import java.io.FileOutputStream;
  11. import java.io.IOException;
  12. import java.io.InputStreamReader;
  13. import java.io.OutputStream;
  14. import java.io.OutputStreamWriter;
  15. import javax.swing.JFileChooser;
  16. import javax.swing.JFrame;
  17. import javax.swing.JMenu;
  18. import javax.swing.JMenuBar;
  19. import javax.swing.JMenuItem;
  20. import javax.swing.JOptionPane;
  21. import javax.swing.JScrollPane;
  22. import javax.swing.JSplitPane;
  23. import javax.swing.JTabbedPane;
  24. import javax.swing.JTextArea;
  25. public class NoteJFreame extends JFrame{
  26. /*
  27. * 声明一个文本框,允许在文本区输入多行内容,JTextArea不自带滚动条,
  28. * 因此就需要把文本区放到一个滚动窗格中
  29. */
  30. JTextArea jTextArea=new JTextArea();
  31. //声明一个选项卡窗格容器作为中间容器
  32. JTabbedPane jTabbledPane=new JTabbedPane();
  33. //滚动窗格,只可以添加一个组件,可以把一个组件放到一个滚动窗格中,然后通过滚动条来观看该组件
  34. JScrollPane jScrollPane=new JScrollPane(jTextArea);
  35. BufferedReader br=null;
  36. //构造函数
  37. public NoteJFreame() {
  38. JMenuBar jMenuBar=new JMenuBar();//建立一个菜单栏
  39. setJMenuBar(jMenuBar);
  40. JMenu jMenu=new JMenu(“文件”);//负责在菜单栏里面创建菜单
  41. JMenu jMenu1=new JMenu(“编辑”);
  42. JMenu jMenu2=new JMenu(“格式”);
  43. jMenuBar.add(jMenu);
  44. jMenuBar.add(jMenu1);
  45. jMenuBar.add(jMenu2);
  46. JMenuItem item=new JMenuItem(“打开”);//负责在菜单里面创建菜单项
  47. JMenuItem item1=new JMenuItem(“另存为”);
  48. jMenu.add(item);
  49. jMenu.add(item1);
  50. add(jScrollPane,BorderLayout.CENTER);;
  51. setTitle(“小羊的记事本”);
  52. //打开的功能,本质是一个输入流,将磁盘里的字节输入到内存当中
  53. item.addActionListener(new ActionListener() {
  54. @Override
  55. public void actionPerformed(ActionEvent e) {
  56. // JFileChooser类提供了一个供用户选择文件或文件夹的对话框。
  57. //JFileChooser():构造一个指向用户默认目录的 JFileChooser。
  58. JFileChooser chooser=new JFileChooser();
  59. chooser.showOpenDialog(NoteJFreame.this);
  60. File file=chooser.getSelectedFile();//就是选择的文件
  61. //选择文件的目的,是为了获得文件的绝对路径,然后架构一个输入流
  62. try {
  63. br=new BufferedReader(new InputStreamReader(new FileInputStream(file)));
  64. while(true) {
  65. String str=br.readLine();
  66. if(str==null) {
  67. break;
  68. }
  69. //显示在文本框中
  70. jTextArea.append(str);
  71. jTextArea.append("\n");
  72. }
  73. } catch (FileNotFoundException e1) {
  74. // 抓异常的目的是为了处理异常,在图新界面这个地方就是提醒弹框
  75. System.out.println("出现异常了");//对客户来讲没意义
  76. JOptionPane.showMessageDialog(NoteJFreame.this, "不好意思,出现异常了");
  77. e1.printStackTrace();
  78. } catch (IOException e1) {
  79. // TODO Auto-generated catch block
  80. e1.printStackTrace();
  81. }finally {
  82. if(br!=null) {
  83. try {
  84. br.close();
  85. } catch (IOException e1) {
  86. // TODO Auto-generated catch block
  87. e1.printStackTrace();
  88. }
  89. }
  90. }
  91. }
  92. });
  93. //另存为的功能,本质上是一个输出流,将内存上的字节输出到磁盘上并保存
  94. item1.addActionListener(new ActionListener() {
  95. @Override
  96. public void actionPerformed(ActionEvent e) {
  97. // TODO Auto-generated method stub
  98. JFileChooser chooser=new JFileChooser();
  99. //显示打开对话框,这里是打开用户默认的磁盘路径
  100. chooser.showSaveDialog(NoteJFreame.this);
  101. File file=chooser.getSelectedFile();//选择文件,目的是为了获取文件的绝对路径
  102. //使用缓冲字符流构建输出流,缓冲流是一种包装流,还要用转换流转换一下,避免出现乱码
  103. BufferedWriter bw=null;
  104. try {
  105. bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
  106. //System.out.println(file.getAbsoluteFile());
  107. //我们要保存的是文本框中的内容,所以我们只要从文本框中得到字节
  108. String str=jTextArea.getText();//得到一个字符串,需要用字符串去接收一下
  109. //然后开始用缓冲输出流往磁盘上去读
  110. //bw.write(str);
  111. bw.write(str.replaceAll("\n", "\r\n"));//将换行符换成winows操作系统里面默认的换行符\r\n
  112. bw.flush();//刷新缓冲区
  113. } catch (Exception e1) {
  114. e1.printStackTrace();
  115. JOptionPane.showMessageDialog(NoteJFreame.this, "出现错误,请联系管理员!");
  116. }finally {
  117. try {
  118. bw.close();
  119. } catch (Exception e1) {
  120. e1.printStackTrace();
  121. }
  122. }
  123. }
  124. });
  125. }
  126. public static void main(String[] args) {
  127. // TODO Auto-generated method stub
  128. NoteJFreame noteJFreame=new NoteJFreame();
  129. noteJFreame.setSize(500,600);
  130. noteJFreame.setVisible(true);
  131. noteJFreame.setLocationRelativeTo(null);
  132. noteJFreame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  133. }
  134. }

发表评论

表情:
评论列表 (有 0 条评论,644人围观)

还没有评论,来说两句吧...

相关阅读

    相关 使用Vue记事本

    大家好鸭!又和大家见面了哦! 现在我给大家看的就是我今天早上写的一个记事本,现在有我来带大家看看吧! 我感觉把代码的注释或者不理解的地方写在外面的话,大家看的灰常迷,所

    相关 JAVA 一个记事本

    1、主要知识点: 1、处理事件的运用、IO流的运用、GUI组件的运用 2、具体案例: package IO流之小蓝记事本; import java.awt.Border...