Java编写的文本编辑器.docx
《Java编写的文本编辑器.docx》由会员分享,可在线阅读,更多相关《Java编写的文本编辑器.docx(23页珍藏版)》请在冰点文库上搜索。
Java编写的文本编辑器
界面:
代码(编译后可直接运行):
//简单的类似记事本的文档编辑器
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.event.*;
importjava.io.*;
importjava.awt.font.*;
importjavax.swing.undo.UndoManager;
publicclassMyTxt
{
publicstaticvoidmain(String[]args)
{
Aframeframe=newAframe();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
classAframeextendsJFrame
{
publicAframe()
{
setTitle("我的记事本");
setSize(WIDTH,HEIGHT);
ContainercontentPane=getContentPane();
JPaneltxtPanel=newJPanel();
JPanelcomboxPanel=newJPanel();
JPaneltextPanel=newJPanel();
txtArea=newJTextArea("",17,40);
JScrollPanescrollPane=newJScrollPane(txtArea);
txtPanel.add(scrollPane);
contentPane.add(comboxPanel,BorderLayout.NORTH);
contentPane.add(txtPanel);
contentPane.add(textPanel,BorderLayout.SOUTH);
//Caidanlan:
添加主菜单并设置快捷键
JMenuBarmenuBar=newJMenuBar();
setJMenuBar(menuBar);
fileMenu=newJMenu("文件(F)");
editMenu=newJMenu("编辑(E)");
typeMenu=newJMenu("格式(O)");
viewMenu=newJMenu("查看(V)");
helpMenu=newJMenu("帮助(H)");
aboutMenu=newJMenu("关于(A)");
fileMenu.setMnemonic('F');
editMenu.setMnemonic('E');
typeMenu.setMnemonic('O');
viewMenu.setMnemonic('V');
helpMenu.setMnemonic('H');
aboutMenu.setMnemonic('A');
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(typeMenu);
menuBar.add(viewMenu);
menuBar.add(aboutMenu);
menuBar.add(helpMenu);
//wenjian“文件”菜单的子菜单添加以及设置加速器,监听器
aa=fileMenu.add(newShowAction("新建"));
aa.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
ab=fileMenu.add(newShowAction("打开"));
ab.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
ac=fileMenu.add(newShowAction("保存"));
ac.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
ad=fileMenu.add(newShowAction("另存为"));
ad.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));
fileMenu.addSeparator();
ae=fileMenu.add(newShowAction("页面设置"));
ae.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U,InputEvent.CTRL_MASK));
af=fileMenu.add(newShowAction("打印"));
af.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));
fileMenu.addSeparator();//分割线
ag=fileMenu.add(newShowAction("退出"));
ag.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
//bianji“编辑”菜单的子菜单添加以及设置加速器,监听器
ah=editMenu.add(newShowAction("撤消"));
editMenu.addSeparator();
ah.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.CTRL_MASK));
ai=editMenu.add(newShowAction("剪切"));
ai.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
aj=editMenu.add(newShowAction("复制"));
aj.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
an=editMenu.add(newShowAction("粘贴"));
an.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
ak=editMenu.add(newShowAction("删除"));
ak.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L,InputEvent.CTRL_MASK));
editMenu.addSeparator();
al=editMenu.add(newShowAction("查找"));
al.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK));
am=editMenu.add(newShowAction("全选"));
am.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));
//geshi“格式”菜单的子菜单添加以及设置加速器,监听器
zdhh=newJMenu("自动换行(L)");
zdhh.setMnemonic('L');
typeMenu.add(zdhh);
ButtonGroupgroup=newButtonGroup();
xz=newJRadioButtonMenuItem("选择");
xz.addActionListener(newShowAction("选择"));
xz.setSelected(true);
qxxz=newJRadioButtonMenuItem("取消");
qxxz.addActionListener(newShowAction("取消"));
qxxz.setSelected(true);
group.add(xz);group.add(qxxz);
zdhh.add(xz);zdhh.add(qxxz);
bj=typeMenu.add(newShowAction("背景颜色"));
bj.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
zt=typeMenu.add(newShowAction("字体"));
zt.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK));
//字体弹出框中的“确定”按钮
que=newButton("确定");
que.addActionListener(newboxlistener());
//chakan“查看”菜单的子菜单添加以及设置加速器,监听器
ztl=viewMenu.add(newShowAction("状态栏"));
ztl.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
//guanyu“关于”菜单的子菜单添加以及设置加速器,监听器
zzxx=aboutMenu.add(newShowAction("作者信息"));
zzxx.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
bq=aboutMenu.add(newShowAction(""));
bq.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B,InputEvent.CTRL_MASK));
sm=aboutMenu.add(newShowAction("声明"));
sm.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
//bangzhu“帮助”菜单的子菜单添加以及设置加速器,监听器
shm=helpMenu.add(newShowAction("说明"));
shm.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
//文本框底部工具栏的设置
toolbar2=newJToolBar();
textPanel.add(toolbar2);
text1=newJTextField("就绪",10);
text2=newJTextField("欢迎使用该记事本!
",10);
text3=newJTextField("",10);
text4=newJTextField("",10);
textPanel.setLayout(newGridLayout(1,4));
toolbar2.add(text1);
toolbar2.add(text2);
toolbar2.add(text3);
toolbar2.add(text4);
text1.setEditable(false);
text2.setEditable(false);
text3.setEditable(false);
text4.setEditable(false);
//组合框的设置
//字体
zitiLabel=newJLabel("字体");comboxPanel.add(zitiLabel);
Stringzit[]={"宋体","华文行楷","楷体","黑体","幼圆"};
zitibox=newJComboBox(zit);
comboxPanel.add(zitibox);
//颜色
yanseLabel=newJLabel("颜色");comboxPanel.add(yanseLabel);
Stringyans[]={"黑色","蓝色","绿色","红色","黄色","蓝绿色","浅灰色"};
yansebox=newJComboBox(yans);
comboxPanel.add(yansebox);
//大小
daxiaoLabel=newJLabel("大小");comboxPanel.add(daxiaoLabel);
Stringdax[]={"15","10","5","20","25","30","35","40","..."};
daxiaobox=newJComboBox(dax);
comboxPanel.add(daxiaobox);
zitibox.setEditable(true);
yansebox.setEditable(true);
daxiaobox.setEditable(true);
comboxPanel.setLayout(newFlowLayout(FlowLayout.LEFT));//靠左排列
//组合框注册监听器
yansebox.addActionListener(newboxlistener());
zitibox.addActionListener(newboxlistener());
daxiaobox.addActionListener(newboxlistener());
txtPanel.setLayout(newGridLayout(1,1));
//实例化“撤销”
um=newUndoManager();
txtArea.getDocument().addUndoableEditListener(um);
}
//菜单栏的接口实现
privateclassShowActionextendsAbstractAction
{
publicShowAction(Stringname){super(name);}
publicvoidactionPerformed(ActionEvente)
{
Objects=e.getSource();
//新建
if(s==aa)
{
if(txtArea.getText().equals(""))
{
txtArea.setText("");
}
else{
intn=JOptionPane.showConfirmDialog(Aframe.this,"无标题记事本已改变。
\n想要保存吗?
","记事本",JOptionPane.YES_NO_CANCEL_OPTION);
if(n==JOptionPane.NO_OPTION){
txtArea.setText("");
setTitle("无标题"+"——"+"记事本");
}
elseif(n==JOptionPane.YES_OPTION)
{
save.setVisible(true);
Stringname=save.getDirectory()+save.getFile();
try
{
FileOutputStreamout=newFileOutputStream(name);
out.write(txtArea.getText().getBytes());
out.close();
}
catch(IOExceptiona)
{
System.err.println("保存失败。
。
!
");
}
}
}
}
//打开
if(s==ab)
{
open.setVisible(true);
Stringname=open.getDirectory()+open.getFile();
Stringname2=open.getFile();
setTitle(name2);
try
{
FileInputStreamin=newFileInputStream(name);
byte[]ia=newbyte[in.available()];
in.read(ia);
txtArea.setText(newString(ia));
in.close();
}
catch(IOExceptiona)
{
System.err.println("获取文件失败!
");
}
}
//另存为
if(s==ad)
{
save.setVisible(true);
Stringname=save.getDirectory()+save.getFile();
try
{
FileOutputStreamout=newFileOutputStream(name);
out.write(txtArea.getText().getBytes());
out.close();
}
catch(IOExceptiona)
{
System.err.println("保存失败。
。
!
");
}
shifulingcun=1;
}
//保存
if(s==ac)
{
if(shifulingcun!
=1)
{save.setVisible(true);}
Stringname=save.getDirectory()+save.getFile();
try
{
FileOutputStreamout=newFileOutputStream(name);
out.write(txtArea.getText().getBytes());
out.close();
}
catch(IOExceptionb)
{
System.err.println("保存文件失败");
}
}
//退出
if(s==ag)
{
intselection=JOptionPane.showConfirmDialog(
Aframe.this,
"确定退出么?
","退出?
",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.WARNING_MESSAGE);
if(selection==JOptionPane.OK_OPTION)
{
System.exit(0);
}
}
//选择自动换行
if(s==xz)
{
txtArea.setLineWrap(true);
}
//取消自动换行
if(s==qxxz)
{
txtArea.setLineWrap(false);
}
//背景颜色
if(s==bj)
{
Colorcolor=JColorChooser.showDialog(Aframe.this,"调色板",txtArea.getBackground());
if(color!
=null)
txtArea.setBackground(color);
}
//作者信息
if(s==zzxx)
{intselection=JOptionPane.showConfirmDialog(
Aframe.this,
"“我的记事本”编写小组成员:
悦,王征,光辉","作者信息",
JOptionPane.DEFAULT_OPTION);
}
//
if(s==bq)
{intselection=JOptionPane.showConfirmDialog(
Aframe.this,
"所有,XX!
","",
JOptionPane.DEFAULT_OPTION);
}
//声明
if(s==sm)
{intselection=JOptionPane.showConfirmDialog(
Aframe.this,
"该程序仅用于实践交流","声明",
JOptionPane.DEFAULT_OPTION);
}
//说明
if(s==shm)
{intselection=JOptionPane.showConfirmDialog(
Aframe.this,
"由于种种原因,该版本记事本还存在很多缺陷,我们将在以后的工作中予以改进","说明",
JOptionPane.DEFAULT_OPTION);
}
//剪切复制粘贴
if(s==ai||s==cutTtem)
{
txtArea.cut();
}
if(s==aj)
{
txtArea.copy();
}
if(s==an)
{
txtArea.paste();
}
//删除
if(s==ak)
{
txtArea.replaceRange("",txtArea.getSelectionStart(),txtArea.getSelectionEnd());
}
//全选
if(s==am)
{
txtArea.selectAll();
}
//撤销
if(s==ah)
{
um.undo();
}
//字体
if(s==zt)
{
tishi.setFont(newFont("华文行楷",1,15));
tanchu.setLocation(300,250);
tanchu.setSize(200,150);
tanchu.setTitle("字体设置");
tanchu.setLayout(newGridLayout(2,2,2,2));
tanchu.add(tishi);
tanchu.add(daxiaobox);
tanchu.add(que);
tanchu.add(zitibox);
tanchu.setVisible(true);
}
//状态栏
aaaaa.setText("当前字体是"+f