一、设计思路:

本项目是基于java和maven项目对象模型的记事本程序,本程序共分为文件操作类GuiMenu.class和记事本启动类App.class两个类。文件操作类主要负责软件的图形化界面显示和文件的操作,记事本启动类作为入口函数,主要负责程序的运行。 文件操作类通过java.awt类和javax.swing类来建立软件的图形窗口,JMenuItem的setActionCommand方法给每一个按钮设置一个字符串,并在最后的equals方法来比较字符串,判定用户所选择的功能,通过InputStream和OutputStream来建立输入输出流,并使用try-catch来捕捉异常。

二、使用的接口及方法:

JFileChooser类:
approve_option

JButton类 JMenuItem类 setActionCommand Container类 containerAdd JToolBar类 BorderLayout ActionListener接口: ActionListenerInterface actionPerformed

体现面向对象的地方:

继承: guiMenu-extends 封装: 使用了private修饰符对数据成员进行访问控制。

代码:

1.文件操作类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205

package tech.codinglink.more;

import javax.swing.*;
import javax.swing.text.DefaultStyledDocument;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;

/**
* 记事本图形菜单类
*/
public class GuiMenu extends JFrame implements ActionListener{
//顶部菜单栏
private JMenuBar menuBar;
//菜单的文件、编辑、关于按键
private JMenu menuFile,menuEdit,menuAbout;
// 菜单项新建、打开、保存、退出、剪切、复制、粘贴、关于
private JMenuItem itemNewFile,itemOpen,itemSave,itemExit,itemCut,itemCopy,itemPaste,itemAbout;
//工具栏
private JToolBar toolBar;
//新建、打开、保存、退出、剪切、复制、粘贴、关于按钮
private JButton butNewFile,butOpen,butSave,butExit,butCut,butCopy,butPaste,butAbout;
//编辑窗口
private JTextPane textPane;
//底部标签栏
private JLabel label;
//文件选择器
private JFileChooser fileChooser;
//滚动条
private JScrollPane scrollPane;
/**
* 建立构造方法
*/
public GuiMenu(){
//实例化菜单栏
menuBar =new JMenuBar();
//实例化菜单
menuFile =new JMenu("文件");
menuEdit =new JMenu("编辑");
menuAbout=new JMenu("关于");
//实例化菜单并添加事件监听
itemNewFile =new JMenuItem("新建");
itemNewFile.addActionListener(this);
itemNewFile.setActionCommand("newFile");
itemOpen=new JMenuItem("打开");
itemOpen.addActionListener(this);
itemOpen.setActionCommand("open");
itemSave=new JMenuItem("保存");
itemSave.addActionListener(this);
itemSave.setActionCommand("save");
itemExit=new JMenuItem("退出");
itemExit.addActionListener(this);
itemExit.setActionCommand("exit");
itemCut=new JMenuItem("剪切");
itemCut.addActionListener(this);
itemCut.setActionCommand("cut");
itemCopy=new JMenuItem("复制");
itemCopy.addActionListener(this);
itemCopy.setActionCommand("copy");
itemPaste=new JMenuItem("粘贴");
itemPaste.addActionListener(this);
itemPaste.setActionCommand("paste");
itemAbout=new JMenuItem("关于");
itemAbout.addActionListener(this);
itemAbout.setActionCommand("about");
//文件设置菜单项
menuFile.add(itemNewFile);
menuFile.add(itemOpen);
menuFile.add(itemExit);
menuFile.add(itemSave);
//编辑设置菜单项
menuEdit.add(itemCut);
menuEdit.add(itemCopy);
menuEdit.add(itemPaste);
//关于设置菜单
menuAbout.add(itemAbout);
//菜单栏设置菜单
menuBar.add(menuFile);
menuBar.add(menuEdit);
menuBar.add(menuAbout);
this.setJMenuBar(menuBar);
//实例化工具栏
toolBar =new JToolBar();
//实例化按钮
butNewFile=new JButton("新建");
butNewFile.addActionListener((ActionListener) this);
butNewFile.setActionCommand("newFile");
butOpen=new JButton("打开");
butOpen.addActionListener((ActionListener) this);
butOpen.setActionCommand("open");
butSave=new JButton("保存");
butSave.addActionListener((ActionListener) this);
butSave.setActionCommand("save");
butExit=new JButton("退出");
butExit.addActionListener((ActionListener) this);
butExit.setActionCommand("exit");
butCut=new JButton("剪切");
butCut.addActionListener((ActionListener) this);
butCut.setActionCommand("cut");
butCopy=new JButton("复制");
butCopy.addActionListener((ActionListener) this);
butCopy.setActionCommand("copy");
butPaste=new JButton("粘贴");
butPaste.addActionListener((ActionListener) this);
butPaste.setActionCommand("paste");
butAbout=new JButton("关于");
butAbout.addActionListener((ActionListener) this);
butAbout.setActionCommand("about");
//工具条设置按钮
toolBar.add(butNewFile);
toolBar.add(butOpen);
toolBar.add(butSave);
toolBar.add(butExit);
toolBar.add(butCut);
toolBar.add(butCopy);
toolBar.add(butPaste);
toolBar.add(butAbout);
//实例化编辑窗口
textPane =new JTextPane();
label=new JLabel("www.codinglink.tech ---by palm");
//实例化文件选择器
fileChooser=new JFileChooser();
//实例化滚动条
scrollPane = new JScrollPane();
//窗口容器中添加组件
Container container=getContentPane();//得到容器
container.add(toolBar,BorderLayout.NORTH);//增加工具栏
container.add(textPane,BorderLayout.CENTER);//文本输入框
container.add(label,BorderLayout.SOUTH);//增加状态栏

/**
* 初始化窗口
*/
//窗口标题
this.setTitle("CLNote");
//窗体大小
this.setSize(600,400);
//设置图标
this.setIconImage(new ImageIcon("logo.jpeg").getImage());
//设置可关闭进程
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//获得屏幕宽度
int width=Toolkit.getDefaultToolkit().getScreenSize().width;
//获得屏幕高度
int height=Toolkit.getDefaultToolkit().getScreenSize().height;
//居中显示
this.setLocation((width-500)/2,(height-400)/2);
//设置窗体可见
this.setVisible(true);
//设置可改变窗体大小
this.setResizable(true);
}

@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("newFile")){
textPane.setDocument(new DefaultStyledDocument());//清空文档
}
else if(e.getActionCommand().equals("open")){
int i=fileChooser.showOpenDialog(GuiMenu.this);//显示打开文件的对话框
if(i==JFileChooser.APPROVE_OPTION){//点击对话框打开选项
File file=fileChooser.getSelectedFile();//得到选择的文件
try{
InputStream input=new FileInputStream(file);//创建文件输入流
textPane.read(input,"d");
input.close();
}catch (Exception ex){
ex.printStackTrace();//抛出异常
}
}
}
else if(e.getActionCommand().equals("save")){
int i=fileChooser.showSaveDialog(GuiMenu.this);//保存文件显示对话框
if(i==JFileChooser.APPROVE_OPTION){//点击选中对话框中保存按钮
File file=fileChooser.getSelectedFile();//得到选择的文件
try{
FileOutputStream output=new FileOutputStream(file);//创建文件输出流
output.write(textPane.getText().getBytes());//写入文件
}catch(Exception ex){
ex.printStackTrace();//抛出异常
}
}
}
else if(e.getActionCommand().equals("exit")){
System.exit(0);
}
else if(e.getActionCommand().equals("cut")){
textPane.cut();//调用文本剪切方法
}
else if(e.getActionCommand().equals("copy")){
textPane.copy();
}
else if(e.getActionCommand().equals("paste")){
textPane.paste();
}
else if(e.getActionCommand().equals("about")){
JOptionPane.showMessageDialog(GuiMenu.this,"www.codinglink.tech");
}
}
}

2.记事本启动类:

1
2
3
4
5
6
7
8
9
10
11
package tech.codinglink;

import tech.codinglink.more.GuiMenu;

public class App
{
public static void main( String[] args )
{
GuiMenu editor=new GuiMenu();
}
}