java项目7——模仿记事本

设计一个JAVA程序模仿记事本(NotePad)的部分功能

已实现功能:
1.简易笔记本,加入了io流操作
2.实现功能:新建、打开、保存、另存、退出、复制、粘贴、关于
3.功能都有小窗口提示
4.复制能复制在windows的粘贴板中
5.程序左上角文件名会更新

自我反省为未实现功能:
1.没写ctrl+c是复制的功能、ctrl+v是粘贴
2.窗口size大小变化时,滑动窗口不改变


实现思路:
1.添加键盘事件,写判断
2.使用窗口事件

代码仅供参考:

/**
 * 简易笔记本,加入了io流操作
 * 实现功能:新建、打开、保存、另存、退出、复制、粘贴、关于
 * 复制能复制在windows的粘贴板中
 * 程序左上角文件名会更新
 */
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class Notebook extends JFrame implements ActionListener{
	JMenuBar jmb;//菜单栏
	JMenu mFile,mEdit,mHelp;//菜单
	JMenuItem mNew,mOpen,mSave,mSaveAs,mExit,mCopy,mPaste,mAbout;//菜单项
	JTextArea jta;//文本框
	JScrollPane jsp;//滚动窗格
	JFileChooser jfc;//
	File f;//保存文件目录是否改变
	String s=new String("");//记录用于打开文件与最后操作的文件是否一样
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Notebook();
	}

	Notebook()
	{
		//菜单栏
		jmb=new JMenuBar();
		//菜单
		mFile=new JMenu("文件");
		mEdit=new JMenu("编辑");
		mHelp=new JMenu("帮助");
		jmb.add(mFile);
		jmb.add(mEdit);
		jmb.add(mHelp);
		//菜单项
		mNew=new JMenuItem("新建");
		mOpen=new JMenuItem("打开");
		mSave=new JMenuItem("保存");
		mSaveAs=new JMenuItem("另存");
		mExit=new JMenuItem("退出");
		mCopy=new JMenuItem("复制");
		mPaste=new JMenuItem("粘贴");
		mAbout=new JMenuItem("关于");
		
		//加入组件
		mFile.add(mNew);
		mFile.add(mOpen);
		mFile.add(mSave);
		mFile.add(mSaveAs);
		mFile.add(mExit);
		mEdit.add(mCopy);
		mEdit.add(mPaste);
		mHelp.add(mAbout);
		
		//加入事件
		mNew.addActionListener(this);
		mOpen.addActionListener(this);
		mSave.addActionListener(this);
		mSaveAs.addActionListener(this);
		mExit.addActionListener(this);
		mCopy.addActionListener(this);
		mPaste.addActionListener(this);
		mAbout.addActionListener(this);
		//文本框
		JPanel jp=new JPanel();
		jta=new JTextArea(17,44);
		jta.setFont(new Font("黑体",Font.PLAIN,25));//黑体,普通字体,大小
		JScrollPane jsp=new JScrollPane(jta);//新建一个滚动条界面,将文本框传入
		jp.add(jsp);//注意:将滚动条界面添加到组建中。而不是添加文本框了
		
		//加入JFrame
		this.setJMenuBar(jmb);
		this.add(jp);
		
		//属性
		this.setTitle("简易记事本");
		this.setVisible(true);
		this.setSize(600,600);
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public void actionPerformed(ActionEvent e)
	{
		int n=0;
		if(e.getSource()==mNew)//新建按钮
			{
			if(!s.equals(jta.getText()))//对比文本内容是否改变
				{
					n=JOptionPane.showConfirmDialog(this,"文件还未保存,确认是否保存","确认对话框",JOptionPane.YES_NO_OPTION);
					if(n==JOptionPane.YES_OPTION)
						{save();}
					else{
							jta.setText("");
						}
				}
			else
				{
					this.setTitle("简易记事本");
					jta.setText("");
				}
			}
		if(e.getSource().equals(mOpen))//打开按钮
		{
			if(s.equals(jta.getText()))//对比文本内容是否改变
				open();
			else
			{
				n=JOptionPane.showConfirmDialog(this,"是否保存文件","确认对话框",JOptionPane.YES_NO_OPTION);
				if(n==JOptionPane.YES_OPTION)
					{save();}
				open();
			}
		}
		if(e.getSource().equals(mSave))//保存按钮
		{
			save();
		}
		if(e.getSource().equals(mSaveAs))//另存按钮
		{
			//判断另存的时候是否点了取消
			jfc=new JFileChooser();
		    int result=jfc.showSaveDialog(null);
		    if(result==jfc.CANCEL_OPTION)//判断是否点了取消按钮
			{}
			else{
				f= jfc.getSelectedFile();//文件保存目录
			}
			save();
		}
		if(e.getSource().equals(mCopy))//辅助
		{
			jta.copy();
		}
		if(e.getSource().equals(mPaste))
		{
			jta.paste();
		}
		if(e.getSource().equals(mExit))//退出按钮
		{
			//判断内容是否为空
			if(jta.getText()=="")
			System.exit(0);
			else
				{
					n=JOptionPane.showConfirmDialog(this,"是否保存文件","确认对话框",JOptionPane.YES_NO_OPTION);
					if(n==JOptionPane.YES_OPTION)
					{save();}
				else
					System.exit(0);
				}
		}
		if(e.getSource().equals(mAbout))
		{
			JOptionPane.showMessageDialog(this,"“长不大的少年”的记事本","版权",JOptionPane.INFORMATION_MESSAGE );
		}
	}
	
	void save()//保存
	{
		try{
			if(f==null)//新建按钮
			{
					jfc=new JFileChooser();
				    int result=jfc.showSaveDialog(null);
				    if(result==jfc.CANCEL_OPTION)//判断是否点了取消按钮
					{}
					else{
					    f= jfc.getSelectedFile();//文件保存目录
					    //System.out.println("save: "+f.getAbsolutePath());
					    FileWriter fw = new FileWriter(f.getAbsolutePath()+".txt");
					    String f1=jta.getText();
					    fw.write(f1);
					    fw.close();
					    this.setTitle(f.getName()+"-简易记事本");
						}
			}
			else//保存按钮
			{
				FileWriter fw = new FileWriter(f.getAbsolutePath());
				String f1=jta.getText();
				fw.write(f1);
				fw.close();
				s=jta.getText();
			}
	        }catch(Exception e1){}
	}
	void open()//打开
	{
		StringBuffer sb = new StringBuffer();
		try {
			jfc=new JFileChooser();
			int result=jfc.showOpenDialog(null);
			if(result==jfc.CANCEL_OPTION)//判断是否点了取消按钮
			{}
			else{
				f=jfc.getSelectedFile();
				this.setTitle(f.getName()+"-简易记事本");
				InputStreamReader read = new InputStreamReader(new FileInputStream(f),"GBK");
				BufferedReader br = new BufferedReader(read);//构造一个BufferedReader类来读取文件
	            while((s = br.readLine())!=null){
	            	//使用readLine方法,一次读一行
	                sb.append(s+"\n"/*System.lineSeparator()*/);
	            }
	            //消去最后一行的空行
	            sb.replace(sb.length()-1, sb.length(), "");
	            jta.setText(sb.toString());
	            s=sb.toString();
            }
		}catch(Exception e1){}
	}
}

实现图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 😃联系交流QQ:2283093518
  • 10
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值