Java案例分析
【案例11-1】 简易记事本
2024-10-25 18 0
简介 1.案例描述 本案例要求利用Java Swing 图形组件开发一个图形化简易记事本。记事本功能包括文本编辑、保存文本到指定路径、打开指定路径下的文本、退出等。
【案例11-1】 简易记事本
【案例介绍】
1.案例描述
本案例要求利用Java Swing 图形组件开发一个图形化简易记事本。记事本功能包括文本编辑、保存文本到指定路径、打开指定路径下的文本、退出等。
2.运行结果
运行结果
【案例目标】
l 学会分析“简易记事本”程序实现的逻辑思路。
l 能够独立完成“简易记事本”程序的源代码编写、编译及运行。
l 掌握Java Swing界面编程的应用。
【案例分析】
(1)记事本界面整体可以看做是一个容器窗口。
(2)从运行结果中的记事本界面的布局效果显示内容可以看出,该图形化界面有最小化、放大缩小以及关闭按钮,以及菜单栏、菜单、文本域。菜单栏可以使用JMenuBar实现,文本域可以使用JTextArea来实现,菜单可以使用JMenu来实现,菜单项可以使用JMenuItem来实现。
(3)为了使窗口可以最小化、放大缩小、关闭还必须为这些按钮注册监听器,进行相应的事件处理。
(4)定义一个程序入口,用于启动Swing案例程序。
【案例实现】
MyNotePad.java
1 package chapter1101;
2 import java.awt.*;
3 import java.awt.event.ActionEvent;
4 import java.awt.event.ActionListener;
5 import java.io.*;
6 import javax.swing.*;
7 class MyNotePad extends JFrame implements ActionListener {
8 private JTextArea jta = null;
9 private JMenuBar jmb = null;
10 private JMenu jm = null;
11 private JMenuItem jmiOpen = null;
12 private JMenuItem jmiSave = null;
13 private JMenuItem jmiExit = null;
14 private JFileChooser jfc = null;
15 public MyNotePad() {
16 jta = new JTextArea();
17 this.setLayout(new BorderLayout());
18 this.add(jta);
19 jmb = new JMenuBar();
20 jm = new JMenu("文件");
21 jmiOpen = new JMenuItem("打开");
22 jmiOpen.addActionListener(this);
23 jmiOpen.setActionCommand("打开");
24 jmiSave = new JMenuItem("保存");
25 jmiSave.addActionListener(this);
26 jmiSave.setActionCommand("保存");
27 jmiExit = new JMenuItem("退出");
28 jmiExit.addActionListener(this);
29 jmiExit.setActionCommand("退出");
30 jm.add(jmiOpen);
31 jm.add(jmiSave);
32 jm.add(jmiExit);
33 jmb.add(jm);
34 this.setJMenuBar(jmb);
35 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
36 this.setSize(400, 300);
37 this.setVisible(true);
38 }
39 @Override
40 public void actionPerformed(ActionEvent e) {
41 // TODO Auto-generated method stub
42 String str = e.getActionCommand();
43 if (str.equals("打开")) {
44 System.out.println("打开");
45 jfc = new JFileChooser();
46 jfc.setDialogTitle("请选择文件!");
47 jfc.showOpenDialog(null);
48 jfc.setVisible(true);
49 File file = jfc.getSelectedFile();
50 BufferedReader br = null;
51 try {
52 FileReader fReader = new FileReader(file);
53 br = new BufferedReader(fReader);
54 String readStr = "";
55 String allCode = "";
56 while ((readStr = br.readLine()) != null) {
57 allCode += readStr + "\r\n";
58 }
59 jta.setText(allCode);
60 } catch (Exception e2) {
61 e2.printStackTrace();
62 // TODO: handle exception
63 } finally {
64 try {
65 br.close();
66 } catch (IOException e1) {
67 // TODO Auto-generated catch block
68 e1.printStackTrace();
69 }
70 }
71 } else if (str.equals("保存")) {
72 JFileChooser jfc = new JFileChooser();
73 jfc.setDialogTitle("已保存");
74 jfc.showSaveDialog(null);
75 File file = jfc.getSelectedFile();
76 BufferedWriter bw = null;
77 try {
78 FileWriter fw = new FileWriter(file);
79 bw = new BufferedWriter(fw);
80 String jtaStr = jta.getText();
81 bw.write(jtaStr);
82 } catch (Exception e2) {
83 // TODO: handle exception
84 e2.printStackTrace();
85 } finally {
86 try {
87 bw.close();
88 } catch (IOException e1) {
89 // TODO Auto-generated catch block
90 e1.printStackTrace();
91 }
92 }
93 } else if (str.equals("退出")) {
94 System.exit(0);
95 }
96 }
97 }
上述代码中,第7-13行代码,声明了文本域、菜单栏、菜单、菜单项、打开、保存、退出以及选择文件等对象。MyNotePad()方法中,对文本域、菜单栏、菜单、菜单项、打开、保存、退出等对象进行实例化,并将打开、保存、退出放入菜单容器,将菜单容器放入菜单栏容器,将菜单栏放入窗口容器。并设置了窗口容器的大小。actionPerformed()方法中,编写了打开文件、保存、以及退出的逻辑。最后,在main()方法中对容器对象进行实例化,用于启动Swing案例程序。
MyMenu.java
1 package chapter1101;
2 public class MyMenu {
3 public static void main(String[] str) {
4 MyNotePad notePad = new MyNotePad();
5 }
6
7 }