一、问题提出
完成一个记事本程序的编写,以下是要求:
1、完成图像界面的设计。
2、完成读取、保存文件功能的设计。
3、完成菜单的设计。
4、能够实现文件对话框的使用。
根据完成的情况,酌情打分。
答案提交内容为:项目代码压缩包(.zip、.rar等)
二、效果截图
关于该记事本的一些操作截图如下:
格式编辑,可修改字体,字号,颜色,复制,粘贴等
三、程序代码
Ecplise 编写的完整源程序如下:
//MyListener 类
package Li.main;
import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.Font.*;
public class MyListener extends MyNotePad implements ActionListener, MouseListener {
int flag = 0;
public MyListener()
{
/*-----设置监听器接口-----*/
n.addActionListener(this);
open.addActionListener(this);
save.addActionListener(this);
save_as.addActionListener(this);
exit.addActionListener(this);
copy.addActionListener(this);
cut.addActionListener(this);
paste.addActionListener(this);
i11.addActionListener(this);
i12.addActionListener(this);
i13.addActionListener(this);
i21.addActionListener(this);
i22.addActionListener(this);
i23.addActionListener(this);
about.addActionListener(this);
item1.addActionListener(this);
item2.addActionListener(this);
item3.addActionListener(this);
editor.addMouseListener(this);
addWindowListener(new windowListener());
/*----编辑区键盘事件----*/
editor.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e){flag = 1;
}});
}
/*-----窗口监听器----*/
class windowListener extends WindowAdapter{
public void windowClosing(WindowEvent e) {
if(flag == 0)System.exit(0);
else close();
}
}
/*-----窗口监听器-----*/
public void actionPerformed(ActionEvent e)
{
Font f2 = editor.getFont();
JMenuItem mi = (JMenuItem)e.getSource();
if(mi == n)//新建
{
if(flag==0)editor.setText("");
else close2();
}
if(mi == open)//打开
{
loadFile();
}
if(mi == save||mi == save_as)//保存和另存为
{
saveFile();
}
if(mi == exit)//退出
{
if(flag == 0)System.exit(0);close();
}
if(mi == copy)//复制
{
editor.copy();
}
if(mi == cut)//剪切
{
editor.cut();
}
if(mi == paste)//粘贴
{
editor.paste();
}
if(mi == i11)//字体设置
{
editor.setFont(new java.awt.Font("宋体",java.awt.Font.PLAIN,f2.getSize()));
}
if(mi == i12)//字体设置
{
editor.setFont(new java.awt.Font("楷体",java.awt.Font.PLAIN,f2.getSize()));
}
if(mi == i13)//字体设置
{
editor.setFont(new java.awt.Font("黑体",java.awt.Font.PLAIN,f2.getSize()));
}
if(mi == i21)//字体颜色
{
editor.setForeground(Color.red);
}
if(mi == i22)//字体颜色
{
editor.setForeground(Color.blue);
}
if(mi == i23)//字体颜色
{
editor.setForeground(Color.green);
}
if(mi == about)//帮助菜单的关于
{
String message = "*---记事本---*"+"\n版本:2021/11/06"+"\n作者:Kirin Lee"+"\n版权:计算机科学与技术"+"\n感谢您的使用!";
JOptionPane.showMessageDialog(MyListener.this, message, "关于...",JOptionPane.PLAIN_MESSAGE);
}
/*-----弹出菜单-----*/
if(mi == item1)//复制
{
editor.copy();
}
if(mi == item2)//剪切
{
editor.cut();
}
if(mi == item3)//粘贴
{
editor.paste();
}
}
/*-----将文件读入到编辑区------*/
void loadFile()
{
JFileChooser fc = new JFileChooser();
int r = fc.showOpenDialog(this);
if (r == JFileChooser.APPROVE_OPTION)
{
File file = fc.getSelectedFile();
try {
editor.read(new FileReader(file), null);
} catch (IOException e) {
}
}
}
/*-----创建文件写入器-----*/
void saveFile()
{
JFileChooser fc = new JFileChooser();
int r = fc.showSaveDialog(this);
if(r == JFileChooser.APPROVE_OPTION)
{
File file = fc.getSelectedFile();
try {
editor.write(new FileWriter(file));
} catch (IOException e) {
}
}
}
/*-----文件的关闭或退出-----*/
void close()
{
try {
int option = JOptionPane.showConfirmDialog(null, "是否保存文件?", "保存文件?",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE,null);
switch (option) {
case JOptionPane.YES_OPTION:saveFile();break;
case JOptionPane.NO_OPTION:System.exit(0);break;
case JOptionPane .CANCEL_OPTION:return;}
} catch (Exception e) {e.printStackTrace();
// TODO: handle exception
}
}
void close2()
{
try {
int option = JOptionPane.showConfirmDialog(null, "是否保存文件?", "保存文件?",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE,null);
switch(option){
case JOptionPane.YES_OPTION:saveFile();editor.setText("");break;
case JOptionPane.NO_OPTION:editor.setText("");return;}
} catch (Exception e) {e.printStackTrace();
// TODO: handle exception
}
}
/*-------编辑区的鼠标事件------*/
public void mouseReleased(MouseEvent e)
{
if(e.isPopupTrigger())
pm.show(editor,e.getX(),e.getY());
}
public void mouseClicked(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mousePressed(MouseEvent e){}
public static void main(String[] args){
MyListener dListener = new MyListener();
}
}
//MyNotePad 类
package Li.main;
/*参考了书籍《Java开发与应用教程(王吴迪)》、《java案例开发集锦(第二版)》*/
/*请于MyListener程序下运行!*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
public class MyNotePad extends JFrame {
//定义菜单项
JMenuBar mb = new JMenuBar();
/*定义文件菜单及其菜单项*/
JMenu m1 = new JMenu("文件(F)");
JMenuItem n = new JMenuItem("新建");
JMenuItem open = new JMenuItem("打开(O)...Ctrl+O");
JMenuItem save = new JMenuItem("保存(S)...Ctrl+S");
JMenuItem save_as = new JMenuItem("另存为(A)...Ctrl+A");
JMenuItem exit = new JMenuItem("退出");
/*定义编辑菜单及其菜单项*/
JMenu m2 = new JMenu("编辑(E)");
JMenuItem copy = new JMenuItem("复制(C)...Ctrl+C");
JMenuItem cut = new JMenuItem("剪切(X)...Ctrl+X");
JMenuItem paste = new JMenuItem("粘贴(P)...Ctrl+P");
/*定义格式菜单及其菜单项*/
JMenu m3 = new JMenu("格式(O)");
//设置字体
JMenu f1 = new JMenu("字体(F)");
JMenuItem i11 = new JMenuItem("宋体");
JMenuItem i12 = new JMenuItem("楷体");
JMenuItem i13 = new JMenuItem("黑体");
//设置颜色
JMenu color = new JMenu("颜色(C)");
JMenuItem i21 = new JMenuItem("红");
JMenuItem i22 = new JMenuItem("蓝");
JMenuItem i23 = new JMenuItem("绿");
/*定义帮助菜单及其菜单项*/
JMenu m4 = new JMenu("帮助(H)");
JMenuItem about = new JMenuItem("关于");
/*定义弹出菜单及其菜单项*/
JPopupMenu pm = new JPopupMenu();
JMenuItem item1 = new JMenuItem("复制");
JMenuItem item2 = new JMenuItem("剪切");
JMenuItem item3 = new JMenuItem("粘贴");
/*-----编辑区----*/
String string;
Container container;
JTextArea editor = new JTextArea(string);
Font font = new Font("sanserif",Font.PLAIN,14);
MyNotePad(){
super("记事本");
setBounds(300, 300, 700, 500);//设置窗体长宽和屏幕上的位置
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {System.err.println("不能设置外观的原因;"+e);
}
container = getContentPane();
container.add(new JScrollPane(editor));
addFileMenu();
addEditMenu();
addFormMenu();
addHelpMenu();
addJMenuBar();
addJPopupMenu();
//设置可视化,点击“X”,自动关闭
setJMenuBar(mb);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void addFileMenu() {
m1.add(n);
m1.add(open);
m1.add(save);
m1.add(save_as);
m1.addSeparator();
m1.add(exit);
m1.setFont(font);
}
private void addEditMenu() {
m2.add(copy);
m2.add(cut);
m2.addSeparator();
m2.add(paste);
m2.setFont(font);
}
private void addFormMenu() {
m3.add(f1);
m3.add(color);
m3.setFont(font);
f1.add(i11);
f1.add(i12);
f1.add(i13);
color.add(i21);
color.add(i22);
color.add(i23);
}
private void addHelpMenu() {
m4.add(about);
m4.setFont(font);
}
private void addJMenuBar() {
mb.add(m1);
mb.add(m2);
mb.add(m3);
mb.add(m4);
mb.setBackground(Color.cyan);
}
private void addJPopupMenu() {
editor.add(pm);
pm.add(item1);
pm.add(item2);
pm.add(item3);
}
public static void main(String[] args) {
new MyNotePad();
}
}
如有需要源程序文件,可以去这里下载:JAVA上机实验一:图形界面和流操作 | 完成一个记事本程序的编写