用java写一一个简易的记事本



  1. import java.awt.Color;
  2. import java.awt.Dimension;
  3. import java.awt.EventQueue;
  4. import java.awt.Font;
  5. import java.awt.GraphicsEnvironment;
  6. import java.awt.Insets;
  7. import java.awt.Toolkit;
  8. import java.awt.event.ActionEvent;
  9. import java.awt.event.ActionListener;
  10. import java.io.File;
  11. import java.io.FileReader;
  12. import java.io.FileWriter;
  13. import java.io.IOException;
  14. import javax.swing.JCheckBoxMenuItem;
  15. import javax.swing.JColorChooser;
  16. import javax.swing.JFileChooser;
  17. import javax.swing.JFrame;
  18. import javax.swing.JList;
  19. import javax.swing.JMenu;
  20. import javax.swing.JMenuBar;
  21. import javax.swing.JMenuItem;
  22. import javax.swing.JOptionPane;
  23. import javax.swing.JScrollPane;
  24. import javax.swing.JTextArea;
  25. import javax.swing.UIManager;
  26. import javax.swing.UnsupportedLookAndFeelException;
  27. import javax.swing.undo.UndoManager;
  28. /**
  29. * swing 简单记事本
  30. * @author kissy小强
  31. *
  32. */
  33. public class Note extends JFrame {
  34. private static final long serialVersionUID = 1L;
  35. UndoManager manager = new UndoManager();
  36. JTextArea text = new JTextArea();
  37. JFileChooser chooser;
  38. String s = "新建记事本";
  39. int result = 0;
  40. private File file;
  41. JMenuBar Mb;
  42. JMenu M1, M2, M3, M4;
  43. JMenuItem m11, m12, m13, m14, m15, m21, m22, m23, m24, m25, m32, m33, m41;
  44. private final static int HEIGHT= 450;
  45. private final static int WIDTH= 750;
  46. JCheckBoxMenuItem m31 = new JCheckBoxMenuItem( "自动换行", true);
  47. public static void main(String args[]) {
  48. String lookAndFeel = UIManager.getSystemLookAndFeelClassName();
  49. try {
  50. UIManager.setLookAndFeel(lookAndFeel);
  51. } catch (ClassNotFoundException | InstantiationException
  52. | IllegalAccessException | UnsupportedLookAndFeelException e1) {
  53. e1.printStackTrace();
  54. }
  55. EventQueue.invokeLater( new Runnable() {
  56. public void run() {
  57. try {
  58. Note n = new Note();
  59. } catch (Exception e) {
  60. e.printStackTrace();
  61. }
  62. }
  63. });
  64. }
  65. public Note() {
  66. setTitle(s);
  67. setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  68. Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  69. // 离显示屏上边缘x像素,里显示屏左边缘y像素
  70. setLocation(screenSize.width / 2 - WIDTH / 2, screenSize.height / 2- HEIGHT / 2);
  71. setSize(WIDTH, HEIGHT);
  72. setResizable( true); // 窗体是否可变
  73. setVisible( true); // 窗体是否可见
  74. init();
  75. }
  76. private void init(){
  77. Mb = new JMenuBar();
  78. this.setJMenuBar(Mb);
  79. text.getDocument().addUndoableEditListener(manager); // 设置文本框编辑监听(可撤销)
  80. text.setFont( new Font( "宋体", Font.PLAIN, 14));
  81. text.setCaretColor(Color.RED); // 光标颜色
  82. text.setSelectedTextColor(Color.RED); // 选中字体颜色
  83. text.setSelectionColor(Color.GREEN); // 选中背景颜色
  84. text.setLineWrap( true); // 是否换行
  85. text.setWrapStyleWord( true); // 是否单词边界换行(即有空白)
  86. text.setMargin( new Insets( 3, 5, 3, 5)); // 文本区与边框的间距,四个参数分别为上、左、下、右
  87. text.setDragEnabled( true); // 开启或关闭自动拖动处理
  88. add( new JScrollPane(text, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
  89. JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED));
  90. M1 = this.AddBar( "文件", Mb);
  91. M2 = this.AddBar( "编辑", Mb);
  92. M3 = this.AddBar( "格式", Mb);
  93. M4 = this.AddBar( "帮助", Mb);
  94. /* 新建选项 */
  95. m11 = this.AddItem( "新建", M1);
  96. m11.addActionListener( new ActionListener() {
  97. public void actionPerformed(ActionEvent event) {
  98. text.setText( "");
  99. setTitle(s);
  100. file = null;
  101. }
  102. });
  103. /* 打开选项 */
  104. m12 = this.AddItem( "打开", M1);
  105. m12.addActionListener( new ActionListener() {
  106. public void actionPerformed(ActionEvent event) {
  107. try {
  108. // 设置打开时的默认目录,两种方式
  109. chooser = new JFileChooser( "C:\\Users\\xiaozhx\\Desktop");
  110. // chooser.setCurrentDirectory(new File("C:\\Users\\xiaozhx\\Desktop"));
  111. chooser.setFileFilter( new filter());
  112. result = chooser.showOpenDialog( null);
  113. if (result == JFileChooser.APPROVE_OPTION) {
  114. // 点击了打开按钮
  115. file = chooser.getSelectedFile();
  116. int length = ( int) file.length();
  117. FileReader reader = new FileReader(file);
  118. char[] ch = new char[length];
  119. reader.read(ch);
  120. reader.close();
  121. text.setText( new String(ch).trim());
  122. setTitle(file.getName());
  123. } else if (result == JFileChooser.CANCEL_OPTION) {
  124. // 点击了取消按钮
  125. }
  126. } catch (Exception e) {
  127. JOptionPane.showMessageDialog( null, e);
  128. }
  129. }
  130. });
  131. /* 保存选项 */
  132. m13 = this.AddItem( "保存", M1);
  133. m13.addActionListener( new ActionListener() {
  134. public void actionPerformed(ActionEvent event) {
  135. if (file == null)
  136. try {
  137. chooser = new JFileChooser(
  138. "C:\\Users\\xiaozhx\\Desktop");
  139. chooser.setFileFilter( new filter());
  140. result = chooser.showSaveDialog( null);
  141. if (result == JFileChooser.APPROVE_OPTION) {
  142. File selectfile = chooser.getSelectedFile(); // 获得文件名
  143. // 获得被选中的过滤器中的文件扩展名
  144. String end = chooser.getFileFilter().getDescription();
  145. File newFile = null;
  146. if (selectfile.getAbsolutePath().toUpperCase().endsWith(end.toUpperCase())) {
  147. // 如果文件是以选定扩展名结束的,则使用原名
  148. newFile = selectfile;
  149. } else {
  150. // 否则加上选定的扩展名
  151. newFile = new File(selectfile.getAbsolutePath()+ end);
  152. }
  153. try {
  154. if (newFile.exists() == false) {
  155. newFile.createNewFile();
  156. }
  157. FileWriter writer = new FileWriter(newFile);
  158. char[] arry = text.getText().toCharArray();
  159. writer.write(arry);
  160. writer.flush();
  161. writer.close();
  162. setTitle(newFile.getName());
  163. file = newFile;
  164. } catch (IOException e) {
  165. }
  166. } else if (result == JFileChooser.CANCEL_OPTION) {
  167. // 点击了取消按钮
  168. }
  169. } catch (Exception e) {
  170. JOptionPane.showMessageDialog( null, e);
  171. }
  172. else
  173. try {
  174. FileWriter writer = new FileWriter(file);
  175. char[] arry = text.getText().toCharArray();
  176. writer.write(arry);
  177. writer.flush();
  178. writer.close();
  179. } catch (Exception e) {
  180. JOptionPane.showMessageDialog( null, e);
  181. }
  182. }
  183. });
  184. /* 另存为选项 */
  185. m14 = this.AddItem( "另存为", M1);
  186. m14.addActionListener( new ActionListener() {
  187. public void actionPerformed(ActionEvent event) {
  188. try {
  189. chooser = new JFileChooser( "C:\\Users\\xiaozhx\\Desktop");
  190. chooser.setFileFilter( new filter());
  191. result = chooser.showSaveDialog( null);
  192. if (result == JFileChooser.APPROVE_OPTION) {
  193. File selectfile = chooser.getSelectedFile(); // 获得文件名
  194. // 获得被选中的过滤器中的文件扩展名
  195. String end = chooser.getFileFilter().getDescription();
  196. File newFile = null;
  197. if (selectfile.getAbsolutePath().toUpperCase().endsWith(end.toUpperCase())) {
  198. // 如果文件是以选定扩展名结束的,则使用原名
  199. newFile = selectfile;
  200. } else {
  201. // 否则加上选定的扩展名
  202. newFile = new File(selectfile.getAbsolutePath()+ end);
  203. }
  204. try {
  205. if (newFile.exists() == false) {
  206. newFile.createNewFile();
  207. }
  208. FileWriter writer = new FileWriter(newFile);
  209. char[] arry = text.getText().toCharArray();
  210. writer.write(arry);
  211. writer.flush();
  212. writer.close();
  213. setTitle(newFile.getName());
  214. file = newFile;
  215. } catch (IOException e) {
  216. }
  217. } else if (result == JFileChooser.CANCEL_OPTION) {
  218. // 点击了取消按钮
  219. }
  220. } catch (Exception e) {
  221. JOptionPane.showMessageDialog( null, e);
  222. }
  223. }
  224. });
  225. M1.addSeparator(); // 横杆
  226. /* 退出选项 */
  227. m15 = this.AddItem( "退出", M1);
  228. m15.addActionListener( new ActionListener() {
  229. public void actionPerformed(ActionEvent event) {
  230. System.exit( 0);
  231. }
  232. });
  233. /* 撤消选项 */
  234. m21 = this.AddItem( "撤消", M2);
  235. m21.addActionListener( new ActionListener() {
  236. public void actionPerformed(ActionEvent event) {
  237. if (manager.canUndo())
  238. manager.undo();
  239. }
  240. });
  241. /* 剪切选项 */
  242. M2.addSeparator();
  243. m22 = this.AddItem( "剪切", M2);
  244. m22.addActionListener( new ActionListener() {
  245. public void actionPerformed(ActionEvent event) {
  246. text.cut();
  247. }
  248. });
  249. /* 复制选项 */
  250. m23 = this.AddItem( "复制", M2);
  251. m23.addActionListener( new ActionListener() {
  252. public void actionPerformed(ActionEvent event) {
  253. text.copy();
  254. }
  255. });
  256. /* 粘贴选项 */
  257. m24 = this.AddItem( "粘贴", M2);
  258. m24.addActionListener( new ActionListener() {
  259. public void actionPerformed(ActionEvent event) {
  260. text.paste();
  261. }
  262. });
  263. /* 删除选项 */
  264. m25 = this.AddItem( "删除", M2);
  265. m25.addActionListener( new ActionListener() {
  266. public void actionPerformed(ActionEvent event) {
  267. text.replaceRange( "", text.getSelectionStart(),
  268. text.getSelectionEnd());
  269. }
  270. });
  271. /* 自动换行选项 */
  272. M3.add(m31);
  273. m31.addActionListener( new ActionListener() {
  274. public void actionPerformed(ActionEvent event) {
  275. if (m31.getState())
  276. text.setLineWrap( true);
  277. else
  278. text.setLineWrap( false);
  279. }
  280. });
  281. /* 字体格式设置选项 */
  282. m32 = this.AddItem( "字体选择", M3);
  283. m32.addActionListener( new ActionListener() {
  284. public void actionPerformed(ActionEvent event) {
  285. GraphicsEnvironment ge = GraphicsEnvironment
  286. .getLocalGraphicsEnvironment();
  287. //获取系统字体
  288. JList<String> fontNames = new JList<String>(ge.getAvailableFontFamilyNames());
  289. int response = JOptionPane.showConfirmDialog( null,
  290. new JScrollPane(fontNames), "请选择字体",
  291. JOptionPane.OK_CANCEL_OPTION);
  292. Object selectedFont = fontNames.getSelectedValue();
  293. if (response == JOptionPane.OK_OPTION && selectedFont != null)
  294. text.setFont( new Font(fontNames.getSelectedValue()
  295. .toString(), Font.PLAIN, 20));
  296. }
  297. });
  298. /* 字体颜色设置选项 */
  299. m33 = this.AddItem( "字体颜色", M3);
  300. m33.addActionListener( new ActionListener() {
  301. public void actionPerformed(ActionEvent event) {
  302. Color color = JColorChooser.showDialog( null, "文字颜色选择",
  303. Color.WHITE);
  304. text.setForeground(color);
  305. }
  306. });
  307. m41 = this.AddItem( "关于记事本", M4);
  308. m41.addActionListener( new ActionListener() {
  309. public void actionPerformed(ActionEvent event) {
  310. JOptionPane.showMessageDialog( null, "记事本\n开发语言:JAVA\n开发者:袁健强",
  311. "关于", JOptionPane.PLAIN_MESSAGE);
  312. }
  313. });
  314. }
  315. /** 文件格式过滤器 **/
  316. private class filter extends javax.swing.filechooser.FileFilter {
  317. public boolean accept(File file) {
  318. String name = file.getName();
  319. name.toLowerCase();
  320. if (name.endsWith( ".txt") || file.isDirectory())
  321. return true;
  322. else
  323. return false;
  324. }
  325. public String getDescription() {
  326. return ".txt";
  327. }
  328. }
  329. /** 将菜单项JMenuItem添加到菜单JMenu **/
  330. public JMenuItem AddItem(String name, JMenu menu) {
  331. JMenuItem MI = new JMenuItem(name);
  332. menu.add(MI);
  333. return MI;
  334. }
  335. /** 将菜单JMenu添加到菜栏JMenuBar **/
  336. public JMenu AddBar(String name, JMenuBar mb) {
  337. JMenu Mb = new JMenu(name);
  338. mb.add(Mb);
  339. return Mb;
  340. }
  341. }

  1. import java.awt.Color;
  2. import java.awt.Dimension;
  3. import java.awt.EventQueue;
  4. import java.awt.Font;
  5. import java.awt.GraphicsEnvironment;
  6. import java.awt.Insets;
  7. import java.awt.Toolkit;
  8. import java.awt.event.ActionEvent;
  9. import java.awt.event.ActionListener;
  10. import java.io.File;
  11. import java.io.FileReader;
  12. import java.io.FileWriter;
  13. import java.io.IOException;
  14. import javax.swing.JCheckBoxMenuItem;
  15. import javax.swing.JColorChooser;
  16. import javax.swing.JFileChooser;
  17. import javax.swing.JFrame;
  18. import javax.swing.JList;
  19. import javax.swing.JMenu;
  20. import javax.swing.JMenuBar;
  21. import javax.swing.JMenuItem;
  22. import javax.swing.JOptionPane;
  23. import javax.swing.JScrollPane;
  24. import javax.swing.JTextArea;
  25. import javax.swing.UIManager;
  26. import javax.swing.UnsupportedLookAndFeelException;
  27. import javax.swing.undo.UndoManager;
  28. /**
  29. * swing 简单记事本
  30. * @author kissy小强
  31. *
  32. */
  33. public class Note extends JFrame {
  34. private static final long serialVersionUID = 1L;
  35. UndoManager manager = new UndoManager();
  36. JTextArea text = new JTextArea();
  37. JFileChooser chooser;
  38. String s = "新建记事本";
  39. int result = 0;
  40. private File file;
  41. JMenuBar Mb;
  42. JMenu M1, M2, M3, M4;
  43. JMenuItem m11, m12, m13, m14, m15, m21, m22, m23, m24, m25, m32, m33, m41;
  44. private final static int HEIGHT= 450;
  45. private final static int WIDTH= 750;
  46. JCheckBoxMenuItem m31 = new JCheckBoxMenuItem( "自动换行", true);
  47. public static void main(String args[]) {
  48. String lookAndFeel = UIManager.getSystemLookAndFeelClassName();
  49. try {
  50. UIManager.setLookAndFeel(lookAndFeel);
  51. } catch (ClassNotFoundException | InstantiationException
  52. | IllegalAccessException | UnsupportedLookAndFeelException e1) {
  53. e1.printStackTrace();
  54. }
  55. EventQueue.invokeLater( new Runnable() {
  56. public void run() {
  57. try {
  58. Note n = new Note();
  59. } catch (Exception e) {
  60. e.printStackTrace();
  61. }
  62. }
  63. });
  64. }
  65. public Note() {
  66. setTitle(s);
  67. setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  68. Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  69. // 离显示屏上边缘x像素,里显示屏左边缘y像素
  70. setLocation(screenSize.width / 2 - WIDTH / 2, screenSize.height / 2- HEIGHT / 2);
  71. setSize(WIDTH, HEIGHT);
  72. setResizable( true); // 窗体是否可变
  73. setVisible( true); // 窗体是否可见
  74. init();
  75. }
  76. private void init(){
  77. Mb = new JMenuBar();
  78. this.setJMenuBar(Mb);
  79. text.getDocument().addUndoableEditListener(manager); // 设置文本框编辑监听(可撤销)
  80. text.setFont( new Font( "宋体", Font.PLAIN, 14));
  81. text.setCaretColor(Color.RED); // 光标颜色
  82. text.setSelectedTextColor(Color.RED); // 选中字体颜色
  83. text.setSelectionColor(Color.GREEN); // 选中背景颜色
  84. text.setLineWrap( true); // 是否换行
  85. text.setWrapStyleWord( true); // 是否单词边界换行(即有空白)
  86. text.setMargin( new Insets( 3, 5, 3, 5)); // 文本区与边框的间距,四个参数分别为上、左、下、右
  87. text.setDragEnabled( true); // 开启或关闭自动拖动处理
  88. add( new JScrollPane(text, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
  89. JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED));
  90. M1 = this.AddBar( "文件", Mb);
  91. M2 = this.AddBar( "编辑", Mb);
  92. M3 = this.AddBar( "格式", Mb);
  93. M4 = this.AddBar( "帮助", Mb);
  94. /* 新建选项 */
  95. m11 = this.AddItem( "新建", M1);
  96. m11.addActionListener( new ActionListener() {
  97. public void actionPerformed(ActionEvent event) {
  98. text.setText( "");
  99. setTitle(s);
  100. file = null;
  101. }
  102. });
  103. /* 打开选项 */
  104. m12 = this.AddItem( "打开", M1);
  105. m12.addActionListener( new ActionListener() {
  106. public void actionPerformed(ActionEvent event) {
  107. try {
  108. // 设置打开时的默认目录,两种方式
  109. chooser = new JFileChooser( "C:\\Users\\xiaozhx\\Desktop");
  110. // chooser.setCurrentDirectory(new File("C:\\Users\\xiaozhx\\Desktop"));
  111. chooser.setFileFilter( new filter());
  112. result = chooser.showOpenDialog( null);
  113. if (result == JFileChooser.APPROVE_OPTION) {
  114. // 点击了打开按钮
  115. file = chooser.getSelectedFile();
  116. int length = ( int) file.length();
  117. FileReader reader = new FileReader(file);
  118. char[] ch = new char[length];
  119. reader.read(ch);
  120. reader.close();
  121. text.setText( new String(ch).trim());
  122. setTitle(file.getName());
  123. } else if (result == JFileChooser.CANCEL_OPTION) {
  124. // 点击了取消按钮
  125. }
  126. } catch (Exception e) {
  127. JOptionPane.showMessageDialog( null, e);
  128. }
  129. }
  130. });
  131. /* 保存选项 */
  132. m13 = this.AddItem( "保存", M1);
  133. m13.addActionListener( new ActionListener() {
  134. public void actionPerformed(ActionEvent event) {
  135. if (file == null)
  136. try {
  137. chooser = new JFileChooser(
  138. "C:\\Users\\xiaozhx\\Desktop");
  139. chooser.setFileFilter( new filter());
  140. result = chooser.showSaveDialog( null);
  141. if (result == JFileChooser.APPROVE_OPTION) {
  142. File selectfile = chooser.getSelectedFile(); // 获得文件名
  143. // 获得被选中的过滤器中的文件扩展名
  144. String end = chooser.getFileFilter().getDescription();
  145. File newFile = null;
  146. if (selectfile.getAbsolutePath().toUpperCase().endsWith(end.toUpperCase())) {
  147. // 如果文件是以选定扩展名结束的,则使用原名
  148. newFile = selectfile;
  149. } else {
  150. // 否则加上选定的扩展名
  151. newFile = new File(selectfile.getAbsolutePath()+ end);
  152. }
  153. try {
  154. if (newFile.exists() == false) {
  155. newFile.createNewFile();
  156. }
  157. FileWriter writer = new FileWriter(newFile);
  158. char[] arry = text.getText().toCharArray();
  159. writer.write(arry);
  160. writer.flush();
  161. writer.close();
  162. setTitle(newFile.getName());
  163. file = newFile;
  164. } catch (IOException e) {
  165. }
  166. } else if (result == JFileChooser.CANCEL_OPTION) {
  167. // 点击了取消按钮
  168. }
  169. } catch (Exception e) {
  170. JOptionPane.showMessageDialog( null, e);
  171. }
  172. else
  173. try {
  174. FileWriter writer = new FileWriter(file);
  175. char[] arry = text.getText().toCharArray();
  176. writer.write(arry);
  177. writer.flush();
  178. writer.close();
  179. } catch (Exception e) {
  180. JOptionPane.showMessageDialog( null, e);
  181. }
  182. }
  183. });
  184. /* 另存为选项 */
  185. m14 = this.AddItem( "另存为", M1);
  186. m14.addActionListener( new ActionListener() {
  187. public void actionPerformed(ActionEvent event) {
  188. try {
  189. chooser = new JFileChooser( "C:\\Users\\xiaozhx\\Desktop");
  190. chooser.setFileFilter( new filter());
  191. result = chooser.showSaveDialog( null);
  192. if (result == JFileChooser.APPROVE_OPTION) {
  193. File selectfile = chooser.getSelectedFile(); // 获得文件名
  194. // 获得被选中的过滤器中的文件扩展名
  195. String end = chooser.getFileFilter().getDescription();
  196. File newFile = null;
  197. if (selectfile.getAbsolutePath().toUpperCase().endsWith(end.toUpperCase())) {
  198. // 如果文件是以选定扩展名结束的,则使用原名
  199. newFile = selectfile;
  200. } else {
  201. // 否则加上选定的扩展名
  202. newFile = new File(selectfile.getAbsolutePath()+ end);
  203. }
  204. try {
  205. if (newFile.exists() == false) {
  206. newFile.createNewFile();
  207. }
  208. FileWriter writer = new FileWriter(newFile);
  209. char[] arry = text.getText().toCharArray();
  210. writer.write(arry);
  211. writer.flush();
  212. writer.close();
  213. setTitle(newFile.getName());
  214. file = newFile;
  215. } catch (IOException e) {
  216. }
  217. } else if (result == JFileChooser.CANCEL_OPTION) {
  218. // 点击了取消按钮
  219. }
  220. } catch (Exception e) {
  221. JOptionPane.showMessageDialog( null, e);
  222. }
  223. }
  224. });
  225. M1.addSeparator(); // 横杆
  226. /* 退出选项 */
  227. m15 = this.AddItem( "退出", M1);
  228. m15.addActionListener( new ActionListener() {
  229. public void actionPerformed(ActionEvent event) {
  230. System.exit( 0);
  231. }
  232. });
  233. /* 撤消选项 */
  234. m21 = this.AddItem( "撤消", M2);
  235. m21.addActionListener( new ActionListener() {
  236. public void actionPerformed(ActionEvent event) {
  237. if (manager.canUndo())
  238. manager.undo();
  239. }
  240. });
  241. /* 剪切选项 */
  242. M2.addSeparator();
  243. m22 = this.AddItem( "剪切", M2);
  244. m22.addActionListener( new ActionListener() {
  245. public void actionPerformed(ActionEvent event) {
  246. text.cut();
  247. }
  248. });
  249. /* 复制选项 */
  250. m23 = this.AddItem( "复制", M2);
  251. m23.addActionListener( new ActionListener() {
  252. public void actionPerformed(ActionEvent event) {
  253. text.copy();
  254. }
  255. });
  256. /* 粘贴选项 */
  257. m24 = this.AddItem( "粘贴", M2);
  258. m24.addActionListener( new ActionListener() {
  259. public void actionPerformed(ActionEvent event) {
  260. text.paste();
  261. }
  262. });
  263. /* 删除选项 */
  264. m25 = this.AddItem( "删除", M2);
  265. m25.addActionListener( new ActionListener() {
  266. public void actionPerformed(ActionEvent event) {
  267. text.replaceRange( "", text.getSelectionStart(),
  268. text.getSelectionEnd());
  269. }
  270. });
  271. /* 自动换行选项 */
  272. M3.add(m31);
  273. m31.addActionListener( new ActionListener() {
  274. public void actionPerformed(ActionEvent event) {
  275. if (m31.getState())
  276. text.setLineWrap( true);
  277. else
  278. text.setLineWrap( false);
  279. }
  280. });
  281. /* 字体格式设置选项 */
  282. m32 = this.AddItem( "字体选择", M3);
  283. m32.addActionListener( new ActionListener() {
  284. public void actionPerformed(ActionEvent event) {
  285. GraphicsEnvironment ge = GraphicsEnvironment
  286. .getLocalGraphicsEnvironment();
  287. //获取系统字体
  288. JList<String> fontNames = new JList<String>(ge.getAvailableFontFamilyNames());
  289. int response = JOptionPane.showConfirmDialog( null,
  290. new JScrollPane(fontNames), "请选择字体",
  291. JOptionPane.OK_CANCEL_OPTION);
  292. Object selectedFont = fontNames.getSelectedValue();
  293. if (response == JOptionPane.OK_OPTION && selectedFont != null)
  294. text.setFont( new Font(fontNames.getSelectedValue()
  295. .toString(), Font.PLAIN, 20));
  296. }
  297. });
  298. /* 字体颜色设置选项 */
  299. m33 = this.AddItem( "字体颜色", M3);
  300. m33.addActionListener( new ActionListener() {
  301. public void actionPerformed(ActionEvent event) {
  302. Color color = JColorChooser.showDialog( null, "文字颜色选择",
  303. Color.WHITE);
  304. text.setForeground(color);
  305. }
  306. });
  307. m41 = this.AddItem( "关于记事本", M4);
  308. m41.addActionListener( new ActionListener() {
  309. public void actionPerformed(ActionEvent event) {
  310. JOptionPane.showMessageDialog( null, "记事本\n开发语言:JAVA\n开发者:袁健强",
  311. "关于", JOptionPane.PLAIN_MESSAGE);
  312. }
  313. });
  314. }
  315. /** 文件格式过滤器 **/
  316. private class filter extends javax.swing.filechooser.FileFilter {
  317. public boolean accept(File file) {
  318. String name = file.getName();
  319. name.toLowerCase();
  320. if (name.endsWith( ".txt") || file.isDirectory())
  321. return true;
  322. else
  323. return false;
  324. }
  325. public String getDescription() {
  326. return ".txt";
  327. }
  328. }
  329. /** 将菜单项JMenuItem添加到菜单JMenu **/
  330. public JMenuItem AddItem(String name, JMenu menu) {
  331. JMenuItem MI = new JMenuItem(name);
  332. menu.add(MI);
  333. return MI;
  334. }
  335. /** 将菜单JMenu添加到菜栏JMenuBar **/
  336. public JMenu AddBar(String name, JMenuBar mb) {
  337. JMenu Mb = new JMenu(name);
  338. mb.add(Mb);
  339. return Mb;
  340. }
  341. }

import java.awt.BorderLayout; import java.awt.Container; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import javax.swing.BorderFactory; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.KeyStroke; import javax.swing.ScrollPaneConstants; import javax.swing.SwingConstants; public class JNotePadUI extends JFrame { private JMenuItem menuOpen; private JMenuItem menuSave; private JMenuItem menuSaveAs; private JMenuItem menuClose; private JMenu editMenu; private JMenuItem menuCut; private JMenuItem menuCopy; private JMenuItem menuPaste; private JMenuItem menuAbout; private JTextArea textArea; private JLabel stateBar; private JFileChooser fileChooser; private JPopupMenu popUpMenu; public JNotePadUI() { super("新建文本文件"); setUpUIComponent(); setUpEventListener(); setVisible(true); } private void setUpUIComponent() { setSize(640, 480); // 菜单栏 JMenuBar menuBar = new JMenuBar(); // 设置「文件」菜单 JMenu fileMenu = new JMenu("文件"); menuOpen = new JMenuItem("打开"); // 快捷键设置 menuOpen.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_O, InputEvent.CTRL_MASK)); menuSave = new JMenuItem("保存"); menuSave.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_S, InputEvent.CTRL_MASK)); menuSaveAs = new JMenuItem("另存为"); menuClose = new JMenuItem("关闭"); menuClose.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_Q, InputEvent.CTRL_MASK)); fileMenu.add(menuOpen); fileMenu.addSeparator(); // 分隔线 fileMenu.add(menuSave); fileMenu.add(menuSaveAs); fileMenu.addSeparator(); // 分隔线 fileMenu.add(menuClose); // 设置「编辑」菜单 JMenu editMenu = new JMenu("编辑"); menuCut = new JMenuItem("剪切"); menuCut.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK)); menuCopy = new JMenuItem("复制"); menuCopy.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK)); menuPaste = new JMenuItem("粘贴"); menuPaste.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK)); editMenu.add(menuCut); editMenu.add(menuCopy); editMenu.add(menuPaste); // 设置「关于」菜单 JMenu aboutMenu = new JMenu("关于"); menuAbout = new JMenuItem("关于JNotePad"); aboutMenu.add(menuAbout); menuBar.add(fileMenu); menuBar.add(editMenu); menuBar.add(aboutMenu); setJMenuBar(menuBar); // 文字编辑区域 textArea = new JTextArea(); textArea.setFont(new Font("宋体", Font.PLAIN, 16)); textArea.setLineWrap(true); JScrollPane panel = new JScrollPane(textArea, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); Container contentPane = getContentPane(); contentPane.add(panel, BorderLayout.CENTER); // 状态栏 stateBar = new JLabel("未修改"); stateBar.setHorizontalAlignment(SwingConstants.LEFT); stateBar.setBorder( BorderFactory.createEtchedBorder()); contentPane.add(stateBar, BorderLayout.SOUTH); popUpMenu = editMenu.getPopupMenu(); fileChooser = new JFileChooser(); } private void setUpEventListener() { // 按下窗口关闭钮事件处理 addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { closeFile(); } } ); // 菜单 - 打开 menuOpen.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { openFile(); } } ); // 菜单 - 保存 menuSave.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { saveFile(); } } ); // 菜单 - 另存为 menuSaveAs.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { saveFileAs(); } } ); // 菜单 - 关闭文件 menuClose.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { closeFile(); } } ); // 菜单 - 剪切 menuCut.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { cut(); } } ); // 菜单 - 复制 menuCopy.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { copy(); } } ); // 菜单 - 粘贴 menuPaste.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { paste(); } } ); // 菜单 - 关于 menuAbout.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { // 显示对话框 JOptionPane.showOptionDialog(null, "程序名称:\n JNotePad \n" + "程序设计:\n \n" + "简介:\n 一个简单的文字编辑器\n" + " 可作为验收Java的实现对象\n" + " 欢迎网友下载研究交流\n\n" + " /", "关于JNotePad", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null); } } ); // 编辑区键盘事件 textArea.addKeyListener( new KeyAdapter() { public void keyTyped(KeyEvent e) { processTextArea(); } } ); // 编辑区鼠标事件 textArea.addMouseListener( new MouseAdapter() { public void mouseReleased(MouseEvent e) { if(e.getButton() == MouseEvent.BUTTON3) popUpMenu.show(editMenu, e.getX(), e.getY()); } public void mouseClicked(MouseEvent e) { if(e.getButton() == MouseEvent.BUTTON1) popUpMenu.setVisible(false); } } ); } private void openFile() { if(isCurrentFileSaved()) { // 文件是否为保存状态 open(); // 打开 } else { // 显示对话框 int option = JOptionPane.showConfirmDialog( null, "文件已修改,是否保存?", "保存文件?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null); switch(option) { // 确认文件保存 case JOptionPane.YES_OPTION: saveFile(); // 保存文件 break; // 放弃文件保存 case JOptionPane.NO_OPTION: open(); break; } } } private boolean isCurrentFileSaved() { if(stateBar.getText().equals("未修改")) { return false; } else { return true; } } private void open() { // fileChooser 是 JFileChooser 的实例 // 显示文件选取的对话框 int option = fileChooser.showDialog(null, null); // 使用者按下确认键 if(option == JFileChooser.APPROVE_OPTION) { try { // 开启选取的文件 BufferedReader buf = new BufferedReader( new FileReader( fileChooser.getSelectedFile())); // 设定文件标题 setTitle(fileChooser.getSelectedFile().toString()); // 清除前一次文件 textArea.setText(""); // 设定状态栏 stateBar.setText("未修改"); // 取得系统相依的换行字符 String lineSeparator = System.getProperty("line.separator"); // 读取文件并附加至文字编辑区 String text; while((text = buf.readLine()) != null) { textArea.append(text); textArea.append(lineSeparator); } buf.close(); } catch(IOException e) { JOptionPane.showMessageDialog(null, e.toString(), "开启文件失败", JOptionPane.ERROR_MESSAGE); } } } private void saveFile() { // 从标题栏取得文件名称 File file = new File(getTitle()); // 若指定的文件不存在 if(!file.exists()) { // 执行另存为 saveFileAs(); } else { try { // 开启指定的文件 BufferedWriter buf = new BufferedWriter( new FileWriter(file)); // 将文字编辑区的文字入文件 buf.write(textArea.getText()); buf.close(); // 设定状态栏为未修改 stateBar.setText("未修改"); } catch(IOException e) { JOptionPane.showMessageDialog(null, e.toString(), "入文件失败", JOptionPane.ERROR_MESSAGE); } } } private void saveFileAs() { // 显示文件对话框 int option = fileChooser.showSaveDialog(null); // 如果确认选取文件 if(option == JFileChooser.APPROVE_OPTION) { // 取得选择的文件 File file = fileChooser.getSelectedFile(); // 在标题栏上设定文件名称 setTitle(file.toString()); try { // 建立文件 file.createNewFile(); // 进行文件保存 saveFile(); } catch(IOException e) { JOptionPane.showMessageDialog(null, e.toString(), "无法建立新文件", JOptionPane.ERROR_MESSAGE); } } } private void closeFile() { // 是否已保存文件 if(isCurrentFileSaved()) { // 释放窗口资源,而后关闭程序 dispose(); } else { int option = JOptionPane.showConfirmDialog( null, "文件已修改,是否保存?", "保存文件?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null); switch(option) { case JOptionPane.YES_OPTION: saveFile(); break; case JOptionPane.NO_OPTION: dispose(); } } } private void cut() { textArea.cut(); stateBar.setText("已修改"); popUpMenu.setVisible(false); } private void copy() { textArea.copy(); popUpMenu.setVisible(false); } private void paste() { textArea.paste(); stateBar.setText("已修改"); popUpMenu.setVisible(false); } private void processTextArea() { stateBar.setText("已修改"); } public static void main(String[] args) { new JNotePadUI(); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值