//导入java类包
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
class EditFile
{
//默认构造函数
EditFile(){}
//保存文件函数
void SaveFile(String name,String str)
{
try
{
//声明文件输出对象
FileOutputStream fos = new FileOutputStream(name);
//输出保存文件
fos.write(str.getBytes());
}
catch (IOException e)
{
//发生错误打印错误信息
System.out.PRintln(e.toString());
}
}
//打开文件函数
String OpenFile(String name)
{
//定义字符串str来保存文件内容
String str=null;
//定义计数器
int ch=0;
try
{
//声明文件输入对象
FileInputStream fis = new FileInputStream(name);
//遍历输入对象,将内存存储到str中
while ((ch=fis.read())!=-1)
{
str=str+(char)ch;
}
//关闭文件对象
fis.close();
}
catch (IOException e)
{
//发生错误打印错误信息
System.out.println(e.toString());
}
//返回str
return str;
}
}
class MyMainFrame extends JFrame implements ActionListener
{
//文件名
String filename=null;
//查找字符串
String findtxt=null;
//替换字符串
String replacetxt=null;
//查找开始位
int findtxton=-1;
//查找结束位
int findtxtoff=-1;
//中间面版
Container c=getContentPane();
//菜单
JMenuBar mainMb=new JMenuBar();
//菜单按钮
JMenu fileMenu=new JMenu("文件");
JMenu editMenu=new JMenu("编辑");
JMenu typeMenu=new JMenu("格式");
JMenuItem newItem=new JMenuItem("新建");
JMenuItem openItem=new JMenuItem("打开");
JMenuItem saveItem=new JMenuItem("保存");
JMenuItem saveasItem=new JMenuItem("另存为");
JMenuItem exitItem=new JMenuItem("退出");
JMenuItem findItem=new JMenuItem("查找");
JMenuItem findnextItem=new JMenuItem("查找下一个");
JMenuItem changeItem=new JMenuItem("替换");
JCheckBoxMenuItem changelineItem=new JCheckBoxMenuItem("自动换行",false);
//文本域
JTextArea txt=new JTextArea();
JTextArea txt2=new JTextArea();
//滚动条
JScrollPane jsp;
//文件操作对象
EditFile ef=new EditFile();
//构造函数
MyMainFrame()
{
//绘制界面
c.setLayout(new BorderLayout());
jsp= new JScrollPane(txt);
jsp.setHorizontalScrollBarPolicy(jsp.HORIZONTAL_SCROLLBAR_AS_NEEDED);
c.add(jsp,BorderLayout.CENTER);
mainMb.add(fileMenu);
fileMenu.add(newItem);
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(saveasItem);
fileMenu.addSeparator();
fileMenu.add(exitItem);
mainMb.add(editMenu);
editMenu.add(findItem);
editMenu.add(findnextItem);
editMenu.add(changeItem);
mainMb.add(typeMenu);
typeMenu.add(changelineItem);
setJMenuBar(mainMb);
//为菜单添加事件监听
newItem.addActionListener(this);
openItem.addActionListener(this);
saveItem.addActionListener(this);
saveasItem.addActionListener(this);
exitItem.addActionListener(this);
findItem.addActionListener(this);
findnextItem.addActionListener(this);
changeItem.addActionListener(this);
changelineItem.addActionListener(this);
}
//事件处理函数
public void actionPerformed(ActionEvent e)
{
//建立一个文件操作对象
EditFile ef=new EditFile();
//如果点击按钮为新建
if(e.getActionCommand()=="新建")
{
//将文本域置为空
txt.setText(null);
//文件名为空
filename=null;
}
//如果点击按钮为打开
if(e.getActionCommand()=="打开")
{
//定义一个文件窗体
FileDialog openDialog=new FileDialog(this,"打开文件...",FileDialog.LOAD);
//显示窗体
openDialog.show();
//如果返回文件不为空
if(openDialog.getFile()!=null)
{
//获得文件名
filename=openDialog.getFile();
//获得文件内容
txt.setText(ef.OpenFile(openDialog.getFile()));
}
}
//如果点击按钮为保存
if(e.getActionCommand()=="保存")
{
//如果没有文件名
if(filename==null)
{
//定义一个文件窗体
FileDialog saveDialog=new FileDialog(this,"另存为...",FileDialog.SAVE);
//显示窗体
saveDialog.show();
//如果返回文件不为空
if(saveDialog.getFile()!=null)
{
//获得文件名
filename=saveDialog.getFile();
//保存文件
ef.SaveFile(filename,txt.getText());
}
}
else
{
//直接保存文件
ef.SaveFile(filename,txt.getText());
}
}
//如果点击按钮为另存为
if(e.getActionCommand()=="另存为")
{
//定义一个文件窗体
FileDialog saveDialog=new FileDialog(this,"另存为...",FileDialog.SAVE);
//显示窗体
saveDialog.show();
//如果返回文件不为空
if(saveDialog.getFile()!=null)
{
//获得文件名
filename=saveDialog.getFile();
//保存文件
ef.SaveFile(filename,txt.getText());
}
}
//如果点击按钮为推出
if(e.getActionCommand()=="退出")
{
//退出
System.exit(0);
}
//如果点击按钮为查找
if(e.getActionCommand()=="查找")
{
//定义一个对话框
JOptionPane inputdia=new JOptionPane();
//定义对话框获得查找文本
findtxt=inputdia.showInputDialog("请输入要查找的文本",null);
//定义其实坐标
findtxton=-1;
findtxtoff=-1;
//调用查找函数
find();
}
//如果点击按钮为查找下一个
if(e.getActionCommand()=="查找下一个")
{
//调用查找函数
find();
}
//如果点击按钮为替换
if(e.getActionCommand()=="替换")
{
//定义一个对话框
JOptionPane inputdia=new JOptionPane();
//获得查找和替换文本
findtxt=inputdia.showInputDialog("请输入要被替换的文本",null);
replacetxt=inputdia.showInputDialog("请输入替换后的文本",null);
//备份内容
txt2.setText(replacetxt);
txt2.selectAll();
txt2.copy();
//调用查找函数
find();
//如果没找到
if(findtxton==-1&&findtxtoff==-1)
{
}
//如果找到
else
{
//替换
txt.paste();
}
findtxton=-1;
findtxtoff=-1;
}
//如果点击按钮为自动换行
if(e.getActionCommand()=="自动换行")
{
//判断当前状态
if(changelineItem.isSelected()==true)
{
//设置滚动条状态
jsp.setHorizontalScrollBarPolicy(jsp.HORIZONTAL_SCROLLBAR_NEVER);
//设置是否换行
txt.setLineWrap(true);
}
else
{
jsp.setHorizontalScrollBarPolicy(jsp.HORIZONTAL_SCROLLBAR_AS_NEEDED);
txt.setLineWrap(false);
}
}
}
//查找函数
public void find()
{
//定义临时字符串
String tempstr;
//查找文本不为空的话
if(findtxt!=null)
{
try
{
//进行查找
tempstr=txt.getText(findtxton+1,(txt.getText().length()-findtxton-1));
findtxton=findtxton+1+tempstr.indexOf(findtxt);
}
catch(Exception e)
{
}
//如果开始位有变化,即找到
if(findtxton!=-1)
{
//设置结束位
findtxtoff=findtxton+findtxt.length();
}
else
{
//否则显示没有找到
findtxtoff=-1;
JOptionPane.showMessageDialog(null,"没有找到");
}
//将找到部分进行选择
txt.select(findtxton,findtxtoff);
}
}
}
public class TextEdit
{
//主函数
public static void main(String args[])
{
//声明设置主窗体
MyMainFrame f=new MyMainFrame();
f.setSize(640,480);
f.setTitle("文本编辑器");
//显示主窗体
f.setVisible(true);
}
}
/*
JTextArea的自动换行方面的问题
--------------------------------------------------------------------------------
如果水平滚动条设置为JSctollpane.
,则添加了这种JSctollpane对象的JTextArea将具备换行功能
是这样吗?
--------------------------------------------------------------------------------
JTextArea.setLineWrap(boolean wrap)
--------------------------------------------------------------------------------
JTextArea.setLineWrap(boolean wrap)//一般的换行。
JTextArea.setWrapStyleWorld(boolean world)//以单词边缘为界限分行
*/
新闻热点
疑难解答