import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.JOptionPane;
import java.awt.datatransfer.*;
import javax.swing.JColorChooser;
//文本编辑器
class Editor extends Frame implements ActionListener
{
MenuBar menubar ;//声明菜单条对象
Menu menuFile ,menuEdit,menuGS,menuAbout,ztf;//声明菜单对象
MenuItem newf,openf,savef,xf,vf,cf,delf,apf,about,colorf,closef,colorb,ktf,stf;//声明菜单项对象
TextArea text;//声明文本区域对象
FileDialog filesave,fileopen;//声明文件对话筐对象
BufferedReader in;
FileReader filereader;
BufferedWriter out;
FileWriter tofile;
Clipboard clip=null;// 声明剪贴板对象
//*******************************************************
Editor(String s)
{
setTitle(s);
// Toolkit tool=getToolkit();
//Dimension dim=tool.getScreenSize();
//setBounds(0,0,dim.width,dim.height);
text=new TextArea();//实例化文本区域
menubar = new MenuBar();//实例化菜单条
menuFile = new Menu("文件"); //实例化菜单
menuEdit = new Menu("编辑");
menuGS = new Menu("格式");
menuAbout = new Menu("帮助");
//**********************
newf=new MenuItem("新建");
openf=new MenuItem("打开");
savef=new MenuItem("保存");
closef=new MenuItem("关闭");
//************************
xf=new MenuItem("剪贴");
cf=new MenuItem("复制");
vf=new MenuItem("粘贴");
delf=new MenuItem("删除");
//***************************
colorf=new MenuItem("字体颜色");
colorb=new MenuItem("背景颜色");
ztf=new Menu("字体");
stf=new MenuItem("宋体");
ktf=new MenuItem("楷体");
//**************************
about=new MenuItem("帮助主题");
apf=new MenuItem("关于作者");
clip=getToolkit().getSystemClipboard();
menuFile.add(newf);//将菜单项添加到菜单中
menuFile.add(openf);
menuFile.add(savef);
menuFile.add(closef);
//*************************
menuEdit.add(xf);
menuEdit.add(cf);
menuEdit.add(vf);
menuEdit.add(delf);
//**************************
menuGS.add(colorf);
menuGS.add(colorb);
menuGS.add(ztf);
ztf.add(stf);
ztf.add(ktf);
//**************************
menuAbout.add(apf);
menuAbout.add(about);
//**************************
menubar.add(menuFile); //将菜单添加到菜单条中
menubar.add(menuEdit);
menubar.add(menuGS);
menubar.add(menuAbout);
setMenuBar(menubar);
newf.addActionListener(this);//添加到监视器
openf.addActionListener(this);
savef.addActionListener(this);
apf.addActionListener(this);
about.addActionListener(this);
xf.addActionListener(this);
cf.addActionListener(this);
vf.addActionListener(this);
colorf.addActionListener(this);
colorb.addActionListener(this);
delf.addActionListener(this);
closef.addActionListener(this);
stf.addActionListener(this);
ktf.addActionListener(this);
filesave=new FileDialog(this,"保存文件",FileDialog.SAVE);//实例化文件对话筐对象
fileopen=new FileDialog(this,"打开文件",FileDialog.LOAD);
Font f1=new Font("宋体",Font.PLAIN,20);//建立字体
text.setFont(f1);//设置默认字体
setSize(500, 500); //设置窗口尺寸
setVisible(true); //设置窗口可视;
add(text,BorderLayout.CENTER);
addWindowListener(new WindowAdapter()//处理窗口关闭事件
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
validate();
}
//***************************************
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==openf)//处理打开文件事件
{
fileopen.setVisible(true);//设置文件对话筐可见
text.setText("");//清空文本区
String s;
try {
File file =new File(fileopen.getDirectory(),fileopen.getFile());//声明并实例化file对象,得到路径和文件名
filereader=new FileReader(file);
in=new BufferedReader(filereader);
while((s=in.readLine())!=null)
text.append(s+'\n');
}
catch(FileNotFoundException e1){}
catch(IOException exp) {}
try
{
in.close();
filereader.close();
}
catch (IOException exp){}
}
else if(e.getSource()== savef)//处理保存文件事件
{
filesave.setVisible(true);
try{//声明并实例化file对象,得到路径和文件名
File file =new File(filesave.getDirectory(),filesave.getFile());
tofile=new FileWriter(file);
out=new BufferedWriter(tofile);
out.write(text.getText(),0,(text.getText()).length());
out.flush();
}
catch(FileNotFoundException e1)
{}
catch(IOException e2){}
try {
out.close();//关闭流
tofile.close();
}
catch(IOException exp){}
}
else if(e.getSource()== newf)//处理新建文件事件
{
text.setText("");
}
else if(e.getSource()==apf)//处理帮助
{
JOptionPane.showMessageDialog(this,"记事本作者:安培飞","关于作者",JOptionPane.WARNING_MESSAGE);
}
else if(e.getSource()==about)//处理帮助
{
JOptionPane.showMessageDialog(this,"你笨死了!这么简单还需要帮助!!","记事本",JOptionPane.WARNING_MESSAGE);
}
else if(e.getSource()==xf)//处理剪贴
{
String temp=text.getSelectedText();
StringSelection textp=new StringSelection(temp);
clip.setContents(textp,null);
int start=text.getSelectionStart();
int end=text.getSelectionEnd();
text.replaceRange("",start,end);//删除选中的文本
}
else if(e.getSource()==cf)//处理复制
{
String temp=text.getSelectedText();
StringSelection textp=new StringSelection(temp);
clip.setContents(textp,null);
}
else if(e.getSource()==vf)//处理粘贴
{
Transferable contents=clip.getContents(this);
DataFlavor flavor=DataFlavor.stringFlavor;
if(contents.isDataFlavorSupported(flavor))
try{
String str;
str=(String)contents.getTransferData(flavor);
text.append(str);
}
catch(Exception ee){}
}
else if(e.getSource()==delf)//处理删除
{
int start=text.getSelectionStart();
int end=text.getSelectionEnd();
text.replaceRange("",start,end);//删除选中的文本
}
else if(e.getSource()==colorf)//处理字体颜色
{
Color newcolor=JColorChooser.showDialog(this,"",Color.lightGray); //实例化颜色选择器
if (newcolor==null) //如果未选取
newcolor=Color.black; //则设置颜色为黑色
text.setForeground(newcolor);
}
else if(e.getSource()==colorb)//处理背景颜色
{
Color newcolor=JColorChooser.showDialog(this,"",Color.lightGray); //实例化颜色选择器
if (newcolor==null) //如果未选取
newcolor=Color.white; //则设置颜色为白色
text.setBackground(newcolor);//改变面板的背景色
}
else if(e.getSource()==stf)//处理黑体
{
Font fs=new Font("隶书",Font.PLAIN,28);//建立字体
text.setFont(fs);//设置字体
}
else if(e.getSource()==ktf)//处理楷体
{
Font fk=new Font("楷体",Font.PLAIN,30);//建立字体
text.setFont(fk);//设置字体
}
else if(e.getSource()==closef)//处理退出
{
System.exit(0);
}
}
//*********、以下为主函数********
}
public class Editors
{
public static void main(String args[])
{
new Editor("记事本");
}
}