package com.notepad.pojo;
import java.awt.;
import java.awt.event.;
import java.io.*;
import java.text.Format;
import javax.swing.*;
import javax.swing.undo.UndoManager;
public class View_notepad extends JFrame implements ActionListener{
//第一步:定义记事本所需要的组件
//1--菜单面板组件。
JMenuBar menuBar;
//2--定义一级菜单组件 (六个一级菜单,分别是:文件,编辑,格式,查看,帮助,新建(这里注意,新建放到了文件菜单选项下面,后面会有相关的操作))
JMenu menu1,menu2,menu3,menu4,menu5,menu6;
//3--定义二级菜单组件()
JMenuItem menuitem1,menuitem2,menuitem3,menuitem4,menuitem5,menuitem6,menuitem7,menuitem8,menuitem9;
//4--定义工具条
JToolBar toolBar;
//5--定义功能按钮
JButton button1,button2,button3,button4,button5,button6;
//6--定义文本域
JTextArea textarea;
//7--定义滚动条
JScrollPane scroll;
//第二步:定义构造方法
public View_notepad() {
//1--将第一步定义的组件进行实例化。
JMenuBar menuBar=new JMenuBar();
//提示,实例化菜单组件的时候,给每个菜单组件加上名称。
menu1=new JMenu("文件");
menu2=new JMenu("编辑");
menu3=new JMenu("格式");
menu4=new JMenu("查看");
menu5=new JMenu("帮助");
menu6=new JMenu("新建");//添加到menu1里面
menuitem1=new JMenuItem("打开");//添加到menu1里面
menuitem1.addActionListener(this); //添加监听者
menuitem1.setActionCommand("open");
menuitem2=new JMenuItem("保存");//添加到menu1里面
menuitem2.addActionListener(this);
menuitem2.setActionCommand("save");
menuitem3=new JMenuItem("另存为");//添加到menu1里面
menuitem3.addActionListener(this);
menuitem3.setActionCommand("lsave");
menuitem6=new JMenuItem("全选");
menuitem6.addActionListener(this);
menuitem6.setActionCommand("selectAll");
menuitem7=new JMenuItem("复制");
menuitem7.addActionListener(this);
menuitem7.setActionCommand("copy");
menuitem8=new JMenuItem("粘贴");
menuitem8.addActionListener(this);
menuitem8.setActionCommand("paste");
menuitem9=new JMenuItem("剪切");
menuitem9.addActionListener(this);
menuitem9.setActionCommand("cut");
menuitem4=new JMenuItem("文件");//添加到menu6里面
menuitem4.addActionListener(this);
menuitem4.setActionCommand("new");
toolBar=new JToolBar();//工具条
button1=new JButton(new ImageIcon("image/xinjian.png"));
button1.setToolTipText("新建");//实现对图片进行提示的效果。
button1.addActionListener(this);
button1.setActionCommand("new");
button2=new JButton(new ImageIcon("image/chehui.png"));
button2.setToolTipText("撤回");
button2.addActionListener(this);
button2.setActionCommand("withdraw");
button3=new JButton(new ImageIcon("image/baocun.png"));
button3.setToolTipText("保存");
button3.addActionListener(this);
button3.setActionCommand("save");
button4=new JButton(new ImageIcon("image/jianqie.png"));
button4.setToolTipText("剪切");
button4.addActionListener(this);
button4.setActionCommand("cut");
button5=new JButton(new ImageIcon("image/fuzhi.png"));
button5.setToolTipText("复制");
button5.addActionListener(this);
button5.setActionCommand("copy");
button6=new JButton(new ImageIcon("image/zhantie.png"));
button6.setToolTipText("粘贴");
button6.addActionListener(this);
button6.setActionCommand("paste");
textarea=new JTextArea();
textarea.getDocument().addUndoableEditListener(um);//创建撤消操作管理器
scroll =new JScrollPane(textarea); //将滚动条和文本域关联起来.
//2--将实例化过后的组件进行添加
//提示,这里更具自己想要实现的效果,安排添加顺序。在这里,我将按照我要实现的效果进行添加。
try {
//a--menuitem4和menuitem5添加到menu6里面。
menu6.add(menuitem4);
//b--将menu6和menuitem1,menuitem2,menuitem3添加到menu1里面.
menu1.add(menu6);
menu1.addSeparator();//作用是,增加一条横线。(有没有均可);
menu1.add(menuitem1); menu1.add(menuitem2); menu1.add(menuitem3);
menu2.add(menuitem6);menu2.add(menuitem7);menu2.add(menuitem8);menu2.add(menuitem9);
//c--将menu1,menu2,menu3,menu4,menu5添加到菜单面板里面(即:menuBar)
menuBar.add(menu1);menuBar.add(menu2);menuBar.add(menu3);menuBar.add(menu4);menuBar.add(menu5);
//d--将button组件添加到工具条组件里
toolBar.add(button1);
toolBar.add(button2);
toolBar.add(button3);
toolBar.add(button4);
toolBar.add(button5);
toolBar.add(button6);
}
catch(Exception e1) {
}
//e--将toolBar,menuBar,scroll添加到Frame里面,注意顺序
this.setJMenuBar(menuBar);//菜单面板
this.add(toolBar,BorderLayout.NORTH);
this.add(scroll);
//第三步:设置视图属性
this.setTitle("记事本");
this.setSize(400,280);
this.setLocation(100, 100);
this.setIconImage((new ImageIcon("image/notepad.PNG")).getImage());
this.setResizable(true); //此处代码是控制页面是否课可以变化大小。
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
}
// public void
//增加监听的方法
String file_path;//这个定义一个地址变量。
UndoManager um = new UndoManager();
public void actionPerformed(ActionEvent e) {
//这里采用if语句来判断,用户点击的是哪一个按钮。
if(e.getActionCommand().equals("open")) {
//System.out.println("打开");
//实现效果部分的代码
JFileChooser wjxz=new JFileChooser();
wjxz.setDialogTitle("打开文件");
wjxz.showOpenDialog(null);
wjxz.setVisible(true);
//得到用户选择的路径
file_path=wjxz.getSelectedFile().getAbsolutePath();
// System.out.println(file_path);
// FileReader file_path1=null;
InputStreamReader file_path1=null;
BufferedReader file_path2=null;
//定义一个io流
try {
//抛异常
file_path1 = new InputStreamReader( new FileInputStream(file_path),"UTF-8");
// file_path1=new FileReader(file_path);
file_path2=new BufferedReader(file_path1);
String text1="";
String text2="";
while((text1=file_path2.readLine())!=null) {
text2+=text1+"\n";
}
textarea.setText(text2);//将读出来的内容,显示到文本域里面。
} catch (Exception e1) {}
finally {
try {
file_path1.close();
file_path2.close();
}
catch(Exception e1) {}
}
}else if(e.getActionCommand().equals("save")&&(file_path==null)) {
//文件保存
//提示:如果当前的地址file_path为空的话,那就在打开一个页面,进行存储,此处的操作和另存为的操作相同。
JFileChooser chooser = new JFileChooser();
chooser.setDialogTitle("保存");
chooser.showSaveDialog(null);
chooser.setVisible(true);
try {
file_path=chooser.getSelectedFile().getPath();
PrintStream text4=new PrintStream(file_path);
System.setOut(text4);
System.out.println(this.textarea.getText());
}
catch(Exception e1) {
}
}else if(e.getActionCommand().equals("save")&&(file_path!=null)) {
//文件保存。
try {
//提示,如果当前的地址file_path不为空的话,直接采用这个地址进行存储就行。
PrintStream text4=new PrintStream(file_path);
System.setOut(text4);
System.out.println(this.textarea.getText());
}catch(Exception e1) {
}
}else if(e.getActionCommand().equals("lsave")) {
JFileChooser ljxz=new JFileChooser();
ljxz.setDialogTitle("将文件另存为");
ljxz.showSaveDialog(null);
ljxz.setVisible(true);
//得到用户选择的保存路径
String save_path=ljxz.getSelectedFile().getAbsolutePath();
try {
PrintStream text3=new PrintStream(save_path);
System.setOut(text3);
System.out.println(this.textarea.getText());
} catch (Exception e1) {
}
}else if(e.getActionCommand().equals("selectAll")) {
//全选文本
textarea.selectAll(); //这是java给我们封装好的方法
}else if(e.getActionCommand().equals("copy")) {
//复制文本
textarea.copy(); //这是java给我们封装好的方法
}else if(e.getActionCommand().equals("paste")) {
//粘贴文本
textarea.paste(); //这是java给我们封装好的方法
}else if(e.getActionCommand().equals("cut")) {
//剪切文本
textarea.cut(); //这是java给我们封装好的方法
}else if(e.getActionCommand().equals("withdraw")) {
//注意这里需要创建撤销管理器。
if (um.canUndo()) {
um.undo();
}
}else if(e.getActionCommand().equals("new")) {
//新建
textarea.setText("");//清空文本内容
file_path = null; //存储地址设置为空。
}
}
}