用JAVA编写一个迷你编辑器Word格式.docx
- 文档编号:16956895
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:18
- 大小:21.33KB
用JAVA编写一个迷你编辑器Word格式.docx
《用JAVA编写一个迷你编辑器Word格式.docx》由会员分享,可在线阅读,更多相关《用JAVA编写一个迷你编辑器Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
privateStringfileName="
未命名"
;
privatebooleanisNamed=false;
privateStringcontent="
"
privateJMenuBarmb=newJMenuBar();
privateJMenu
file=newJMenu("
文件"
),
edit=newJMenu("
编辑"
),
style=newJMenu("
格式"
help=newJMenu("
帮助"
);
privateJMenuItemfileItem[]={
newJMenuItem("
新建"
打开"
保存"
另存为"
),
退出"
};
privateJMenuItemeditItem[]={
复制"
粘贴"
删除"
全选"
};
privateJMenuItemstyleItem[]={
自动换行"
字体"
日期"
Java"
privateJMenuItemhelpItem[]={
关于"
声明了文本区text作为编辑区域,声明了剪贴板对象Clipboardclipbd用于编辑操作。
fileName保存“打开或保存”的文件名,content
用来保存从文件读写的内容,booleanisNamed用来记录编辑区中的内容是否和一个文件相关联。
如果文件已经有了名字,“保存”菜单就直接写入该文件,否则要先打开“保存对话框”。
新建文件时isNamed为假,窗口标题显示“未命名”。
接着就生命了菜单条mb和四个菜单file,edit,style,help以及他们的菜单项。
用fileItem[]来定义菜单项,便于以后要扩充菜单,这要增加一行newJMenuItem("
XXX"
),和添加一个监听类XXXl就可以了。
、
㈡在构造器中构建视窗
在构造器中创建菜单,假如文本区,各菜单项添加监听器。
publicNotepad(){
setJMenuBar(mb);
//窗口设置菜单条
Containercp=getContentPane();
cp.add(newJScrollPane(text));
//添加有滚动条的文本区
text.setText("
);
mb.add(file);
//加入文件菜单
for(inti=0;
i<
fileItem.length;
i++)
file.add(fileItem[i]);
mb.add(edit);
//加入编辑菜单
editItem.length;
edit.add(editItem[i]);
mb.add(style);
for(inti=0;
styleItem.length;
style.add(styleItem[i]);
mb.add(help);
for(inti=0;
helpItem.length;
help.add(helpItem[i]);
text.setFont(newFont("
system"
0,14));
StringSelectionclipString=newStringSelection("
clipbd.setContents(clipString,clipString);
//为菜单项添加监听器。
fileItem[0].addActionListener(newNewL());
fileItem[1].addActionListener(newOpenL());
fileItem[2].addActionListener(newSaveL());
fileItem[3].addActionListener(newSaveAsL());
fileItem[4].addActionListener(newExitL());
editItem[0].addActionListener(newCopyL());
editItem[1].addActionListener(newPasteL());
editItem[2].addActionListener(newCutL());
editItem[3].addActionListener(newAllselectL());
styleItem[0].addActionListener(newWrapL());
styleItem[1].addActionListener(newWrapL());
styleItem[2].addActionListener(newDateL());
setTitle("
采摘器"
+"
--"
+fileName);
}
用循环语句加入菜单项,以后增加菜单项时此处代码不用修改。
而加入菜单时不用
循环方法,而个别加入是为了程序易读,增加菜单的几率是比较小的。
加入main()方法后程序就可以运行了。
(先把添加监听器的这断代码注释掉!
)
publicstaticvoidmain(String[]args){
Notepadnpd=newNotepad();
npd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
npd.setSize(400,240);
npd.setVisible(true);
}
三菜单功能的实现
每一个菜单功能都需要为之建立一个监听器类,并重载活动监听方法addActionListener()。
㈠ 编辑菜单——复制、删除和粘贴
1复制
“编辑/复制”功能是把从文本区中选择的内容selection送到剪贴板clipbd中。
复制监听器类CopyL的代码如下:
classCopyLimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
Stringselection=text.getSelectedText();
if(selection=="
)return;
StringSelectionclipString=newStringSelection(selection);
clipbd.setContents(clipString,clipString);
利用文本区的getSelectedText()方法获取你所选择的内容,存放在Notepad的字段(成员变量)selection中。
要把selection设置到剪贴板中,使用Clipboard类的setContents方法:
clipbd.setContents(clipString,clipString);
不要StringSelection类的对象作为参数,所以声明了
。
设置剪贴板内容的方法声明如下:
publicvoidsetContents(Transferable
contents,ClipboardOwner
owner)
它将剪贴板的当前内容设置到指定的transferable对象contents中,并将指定的剪贴板所有者owner作为新内容的所有者注册。
如果剪贴板当前不可用,则该方法抛出IllegalStateException。
例如,在某些平台上,系统剪贴板在被别的应用程序访问时是不可用的。
2删除
“编辑/删除”功能只要利用文本区的replaceRange方法,把选择的文本替换为空字符串。
监听器类CopyL的代码如下:
classCutLimplementsActionListener{
text.replaceRange("
text.getSelectionStart(),text.getSelectionEnd());
content=selection;
3粘贴
“编辑/粘贴”功能是把剪贴板中的数据来替换窗口中选择的内容,也要利用的replaceRange方法。
监听器类PasteL的代码如下:
classPasteLimplementsActionListener{
ransferableclipData=clipbd.getContents(Notepad.this);
try{
StringclipString=(String)clipData.getTransferData(DataFlavor.stringFlavor);
text.replaceRange(clipString,text.getSelectionStart(),text.getSelectionEnd());
}catch(Exceptionex){
System.err.println("
没有信息粘贴"
}
先从剪贴板中获取内容getContents(),返回的数据clipData是ransferable类型的。
因为需要使用该类型的方法getTransferData()方法把数据转化成字符串。
其参数DataFlavor.stringFlavor是DataFlavor的一个静态,表示JavaUnicodeString的字符串。
函数返回一个数据对象Object,所以要用强制转换。
使用该方法是可能会抛出一个异常的。
剪贴板和数据传输类ransferable都在包ava.awt.datatransfer中。
获得了选择的内容clipString,用一个replaceRange方法就把当前选择的内容替换成前面从剪贴板中获取的内容了。
如果当前没有选择内容,那么开始和结束位置相同,就把文本粘贴当光标位置了。
作为练习,请读者自行增加一个“撤消删除”和一个“剪切”的菜单功能。
㈡读入文件和保存文件
为了实现文件菜单的功能,在主类中先建立读写文件的方法read()和write()。
privatevoidread(Stringfile)throwsIOException{
Stringline="
Stringstr="
;
try{
BufferedReaderin=newBufferedReader(
newFileReader(file));
while((line=in.readLine())!
=null)
str+=(line+"
\n"
content=str;
in.close();
}catch(IOExceptione){
e.printStackTrace();
System.exit
(1);
read(file)的功能是把文件file的内容按行读入储存在字段content中。
file是文件名也许在对话框中获得。
privatevoidwrite(Stringfile)throwsIOException{
PrintWriterout=newPrintWriter(
newBufferedWriter(newFileWriter(file)));
out.write(content);
out.close();
return;
write(file)的功能是把字段content写入到文件file中。
使用这两个方法是为了简化打开和保存文件的代码。
㈢文件菜单——打开、保存和另存为
1打开文件监听器
“文件/打开”菜单的主要功能是打开一个JAVA系统提供的文件对话框,它由类JFileChooser的方法showOpenDialog()来打开。
类似的,showSaveDialog()方法可打开保存文件的对话框。
classOpenLimplementsActionListener{
try{
JFileChooserc=newJFileChooser();
intrVal=c.showOpenDialog(Notepad.this);
if(rVal==JFileChooser.APPROVE_OPTION){
fileName=c.getSelectedFile().getPath();
isNamed=true;
read(fileName);
text.setText(content);
setTitle("
return;
}
if(rVal==JFileChooser.CANCEL_OPTION)
}catch(IOExceptionex){
ex.printStackTrace();
}
c.showOpenDialog(Notepad.this)方法中的参数类型是Component,代码中用参数Notepad.this表示主程序本身,意思就是从主窗口Frame打开的对话框。
它返回一个整数rVal,用来判断用户在对话框中选择的结果。
当你选择了一个存在的文件后,返回值是JFileChooser.APPROVE_OPTION,如果你放弃选择,那么返回值是JFileChooser.CANCEL_OPTION。
如果你选择了一个存在的文件名,用getSelectedFile()得到一个File类型对象,因此可以获取药打开的文件名,然后可调用read(fileName)方法读出文件到content中。
因为要使用文件的输入输出,所以可能会抛出IO异常。
2另存为监听器
“文件/另存为”菜单的功能是打开一个保存文件对话框,调用showSaveDialog方法获取文件名,用write(fileName)把content写进文件中。
同时要把
isNamed设置为true,为的是以后点“保存”菜单时不用再打开对话框。
classSaveAsLimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
try{
intrVal=c.showSaveDialog(Notepad.this);
content=text.getText();
//forinvocatewrite()
write(fileName);
return;
3保存监听器
“文件/保存”菜单与另存为不同的是:
如果文件名已经有了(用isNamed=true表示),那就直接调用read方法读入文件,如果是未命名,那就打开保存文件对话框。
所以先使用了if(isNamed)
write(fileName),其他与“另存为”的都一样。
classSaveLimplementsActionListener{
if(isNamed){
else{//isNamedisfalse
}//else
4“新建”监听器
新建文件时只提供一个空白的编辑区,文件名设为"
,可写入标记isNamed设为假,待写入内容content置为空白。
classNewLimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
isNamed=false;
fileName="
content="
四完整的源程序代码
//Notepad.java是一个记事本式的采摘器
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.awt.datatransfer.*;
importjava.io.*;
importjava.util.*;
importjava.lang.String;
privateClipboardclipbd=getToolkit().getSystemClipboard();
//为读写文件用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 编写 一个 迷你 编辑器