eclipse 实现简单文本框的各项功能(新建,保存,退出,复制,粘贴)
package test;
importjava.awt.FileDialog;
importjava.awt.HeadlessException;
importjava.awt.Point;
importjava.awt.TextArea;
importjava.awt.TextComponent;
importjava.awt.Toolkit;
importjava.awt.datatransfer.Clipboard;
importjava.awt.datatransfer.DataFlavor;
importjava.awt.datatransfer.StringSelection;
importjava.awt.datatransfer.Transferable;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.WindowAdapter;
importjava.awt.event.WindowEvent;
importjava.awt.event.WindowListener;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileReader;
importjava.io.FileWriter;
importjava.io.IOException;
importjavax.swing.AbstractButton;
importjavax.swing.JFrame;
importjavax.swing.JMenu;
importjavax.swing.JMenuBar;
importjavax.swing.JMenuItem;
importjavax.swing.JPanel;
publicclassJMenuDemoextendsJFrame {
privateJPanelp;
privateJMenuBarmenuBar;
private JMenu menuFile,menuEdit,menuHelp;
private JMenuItem miSave,miCopy,miPaste,miNew,miOpen,miExit;
private FileDialog openDia,saveDia,newDia;
privateTextArea ta;
private File file=null;
//Clipboard剪切板
privateClipboardclipbd= getToolkit().getSystemClipboard();//获取系统剪切板
publicJMenuDemo()throwsHeadlessException {
super("文本编辑器");
p=newJPanel();
menuBar=newJMenuBar();
this.setJMenuBar(menuBar);//将菜单设置到窗体中
menuFile=newJMenu("文件");
menuEdit=newJMenu("编辑");
menuHelp=newJMenu("帮助");
menuBar.add(menuFile);
menuBar.add(menuEdit);
menuBar.add(menuHelp);
miNew=newJMenuItem("新建");
miOpen=newJMenuItem("打开");
miExit=newJMenuItem("退出");
miSave=newJMenuItem("保存");
miCopy=newJMenuItem("复制");
miPaste=newJMenuItem("粘贴");
menuFile.add(miNew);
menuFile.add(miOpen);
menuFile.add(miExit);
menuEdit.add(miSave);
menuEdit.add(miCopy);
menuEdit.add(miPaste);
this.add(p);
this.setSize(400,300);
this.setLocation(200,100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
openDia=newFileDialog(this,"我要打开",FileDialog.LOAD);
saveDia=newFileDialog(this,"我要保存",FileDialog.SAVE);
newDia=newFileDialog(this,"我要新建",FileDialog.LOAD);
/*(FileDialog(Frame parent, String title,intmode)
intmode 有SAVE(保存)和LOAD(读写)两种
getDirectory()+getFile() = 文件路径)*/
ta=newTextArea();//新建文本框
this.add(ta);//加入文本框
myEvent();
this.setVisible(true);
}
publicvoidmyEvent() {
//退出
miExit.addActionListener(newActionListener() {
publicvoidactionPerformed(ActionEvente) {
System.exit(0);
}
});
//新建
miNew.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente) {
ta.setText("");
}
});
//复制
miCopy.addActionListener(newActionListener() {
publicvoidactionPerformed(ActionEvente) {
Stringselection=ta.getSelectedText();
if(selection==null)
return;
StringSelectionclipString=newStringSelection(selection);// 封装文本内容
clipbd.setContents(clipString,clipString); // 把文本内容设置到系统剪贴板
}
});
//粘贴
miPaste.addActionListener(newActionListener() {
publicvoidactionPerformed(ActionEvente) {
Clipboardclipboard= Toolkit.getDefaultToolkit().getSystemClipboard();
// 获取剪贴板中的内容
Transferabletrans=clipboard.getContents(null);
if(trans!=null) {
// 判断剪贴板中的内容是否支持文本
if(trans.isDataFlavorSupported(DataFlavor.stringFlavor)) {
try{
// 获取剪贴板中的文本内容
Stringtext= (String)trans.getTransferData(DataFlavor.stringFlavor);
// 获得当前光标位置
intcur=ta.getCaretPosition();
// 得到光标之后的字符串
StringtailString=ta.getText().substring(cur);
// 得到光标之前的字符串
StringheadString=ta.getText().substring(0,cur);
// 拼接字符串 并输出
ta.setText(headString+text+tailString);
}catch(Exceptione1) {
e1.printStackTrace();
}
}
}
}
});
//打开
miOpen.addActionListener(newActionListener() {
@Override
publicvoidactionPerformed(ActionEvente) {
openDia.setVisible(true);
Stringstr=openDia.getFile();//获取选中的文件名称
Stringdir=openDia.getDirectory();//获取目录
if(str==null||dir==null)//用户不想打开文件
return;
ta.setText("");//将之前的文件的文本删除
file=newFile(dir,str);
BufferedReaderbr=null;
try
{
//将硬盘上的文件内容写到文本区域中
br=newBufferedReader(newFileReader(file));
Stringlen=null;
try
{
while((len=br.readLine())!=null)
{
ta.append(len+"\r\n");
}
}
catch(IOExceptione1)
{
e1.printStackTrace();
}
}
catch(FileNotFoundExceptione1)
{
e1.printStackTrace();
}
finally
{
try
{
br.close();
}
catch(IOExceptione1)
{
e1.printStackTrace();
}
}
}
});
//保存
miSave.addActionListener(newActionListener() {
@Override
publicvoidactionPerformed(ActionEvente) {
if(file==null) //如果已经有路径则在原路径上进行保存
{
saveDia.setVisible(true);
Stringstr=saveDia.getFile();
Stringdir=saveDia.getDirectory();
System.out.println(dir+"------------"+str);//用户文件保存位置
if(dir==null||str==null)//新写的文件没保存
return;
file=newFile(dir,str);
}
BufferedWriterbufw=null;
try
{
bufw=newBufferedWriter(newFileWriter(file));
Stringtext=ta.getText();//从文本区域中获取数据,写入文件中
bufw.write(text);
bufw.flush();
}
catch(IOExceptione1)
{
thrownewRuntimeException("没这文件");
}
finally{
try
{
bufw.close();
}
catch(IOExceptione1)
{
e1.printStackTrace();
}
}
}
});
this.addWindowListener((WindowListener)newWindowAdapter() {
publicvoidwindowClosing(WindowEvente) {
System.exit(0);
}
});
}
publicstaticvoidmain(String[]args) {
newJMenuDemo();
}
}
网友评论