📄 texteditor.java
字号:
//文件TextEditor,java
package texteditor;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.lang.String;
import java.net.URL.*;
public class TextEditor extends Frame{
//定义
private Frame f;
private TextArea ta;
private MenuBar mb;
private Menu fm1; //定义文件菜单变量
private MenuItem nmi;
private MenuItem omi;
private MenuItem smi;
private MenuItem sami;
private MenuItem emi;
private Menu em; //定义编辑菜单变量
private MenuItem cmi1;
private MenuItem pmi;
private MenuItem cmi2;
private MenuItem fmi;
private Menu fm2; //定义格式菜单变量
private CheckboxMenuItem cbmi;
private MenuItem wfmi;
private Menu vm; //定义查看菜单变量
private MenuItem sbmi;
private Menu hm; //定义帮助菜单变量
private MenuItem htmi;
private MenuItem ami;
private boolean changed; //定义文件是否已经保存的布尔型的类成员变量
private String fileName =null,s=null;
public static void main(String args[]){
TextEditor te = new TextEditor();
te.init();
}
public void init(){
f=new Frame("记事本");
mb=new MenuBar(); //创建菜单栏对象
//创建文件菜单及其菜单项对象
fm1=new Menu("文件(F)");
nmi=new MenuItem("新建(N)",new MenuShortcut(KeyEvent.VK_N));
omi=new MenuItem("打开(O)...",new MenuShortcut(KeyEvent.VK_O));
smi=new MenuItem("保存(S)",new MenuShortcut(KeyEvent.VK_S));
sami=new MenuItem("另存为(A)...",new MenuShortcut(KeyEvent.VK_A));
emi=new MenuItem("退出(X)");
//创建编辑菜单及其菜单项对象
em=new Menu("编辑(E)");
cmi1=new MenuItem("复制(C)",new MenuShortcut(KeyEvent.VK_C));
pmi=new MenuItem("粘贴(V)",new MenuShortcut(KeyEvent.VK_V));
cmi2=new MenuItem("剪切(T)",new MenuShortcut(KeyEvent.VK_X));
fmi=new MenuItem("查找(F)...",new MenuShortcut(KeyEvent.VK_F));
//创建格式菜单及其菜单项对象
fm2=new Menu("格式(O)");
cbmi=new CheckboxMenuItem("自动换行(W)",true);
wfmi=new MenuItem("字体(F)...");
//创建查看菜单及其菜单项对象
vm=new Menu("查看(V)");
sbmi=new MenuItem("状态栏(S)");
//创建帮助菜单及其菜单项对象
hm=new Menu("帮助(H)");
htmi=new MenuItem("帮助主题(H)");
ami=new MenuItem("关于记事本(A)");
//文件菜单设置开始
//设置新建菜单项动作监听
nmi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
int n;
Object[] option={
"YES","NO","CANCEL"
};
if(changed==true){
n=JOptionPane.showOptionDialog(null,"你的文件还没有保存,你想现在保存吗?","保存",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,null,option,option[0]);
switch(n){
case JOptionPane.YES_OPTION:{
doSave(fileName);
fileName="";
ta.setText("");
changed=false;
break;
}
case JOptionPane.NO_OPTION:{
fileName="";
ta.setText("");
changed=false;
break;
}
case JOptionPane.CANCEL_OPTION:{
break;
}
default:
}
}
else{
fileName="";
ta.setText("");
}
}
});
fm1.add(nmi); //将新建菜单项加入到文件菜单
//打开菜单项的设置
omi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//被选择时会显示一个文件对话框让用户选择文本编辑
FileDialog dk=new FileDialog(f,"Open...",FileDialog.LOAD);
dk.show();
if(dk.getFile()==null){
return;
}
//取得文件名(包括路径)
fileName=dk.getDirectory() + File.separator + dk.getFile();
FileInputStream fis=null; //定义输入流
String str=null;
try{
fis=new FileInputStream(fileName); //创建打开文件的输入流
int size=fis.available();
byte[] bytes=new byte[size];
fis.read(bytes);
str=new String(bytes);
}
catch(IOException e1){}
finally{
try{
fis.close();
}
catch(IOException e2){}
}
if(str !=null){
ta.setText(str);
}
changed=false;
}
});
fm1.add(omi);
//保存菜单项的设置
smi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//被选择时,保存当前文件
doSave(fileName);
}
});
fm1.add(smi);
//另存为菜单项的设置
sami.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//被选择时,实现对文件的保存
doSaveAs();
}
});
fm1.add(sami);
fm1.addSeparator(); //加入分隔符到文件菜单中
//退出菜单项的设置
emi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//被选择时,关闭当前程序
int n;
Object[] option={
"YES","NO"
};
n=JOptionPane.showOptionDialog(null,"你的文件还没有保存,你想现在保存吗?","记事本",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,option,option[0]);
if(n==JOptionPane.YES_OPTION){
doSave(fileName);
System.exit(0);
}
else if(n==JOptionPane.NO_OPTION){
System.exit(0);
}
}
});
fm1.add(emi);
mb.add(fm1); //添加文件菜单
//文件菜单设置结束
//编辑菜单设置开始
//设置复制菜单项
cmi1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//当前选定的文字被复制到"剪贴板"
s=ta.getText();
}
});
em.add(cmi1);
//设置粘贴菜单项
pmi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//"剪贴板"中的文字被粘贴到文本区域中
ta.setText(s);
}
});
em.add(pmi);
//设置剪切菜单项
cmi2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//当前选定的文字被剪切到"剪贴板"
s=ta.getText();
ta.setText("");
}
});
em.add(cmi2);
em.addSeparator();
//设置查找菜单项
fmi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//创建一个查找对话框
FileDialog fd=new FileDialog(f,"查找");
fd.show();
}
});
em.add(fmi);
mb.add(em);
//编辑菜单设置结束
//格式菜单设置开始
//设置自动换行菜单项
cbmi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//未实现
}
});
fm2.add(cbmi);
//设置字体菜单项
wfmi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//未实现
}
});
fm2.add(wfmi);
mb.add(fm2);
//格式菜单设置结束
//查看菜单设置开始
//设置状态栏菜单项
sbmi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//未实现
}
});
vm.add(sbmi);
mb.add(vm);
//查看菜单设置结束
//帮助菜单设置开始
//设置帮助主题菜单项
htmi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//显示一个关于帮助信息的对话框
Dialog h=new Dialog(f,"帮助主题");
h.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
}
});
Label la = new Label("'记事本'概述");
h.add("Center",la);
h.setLocation(120, 150);
h.setResizable(false);
h.setSize(400,200);
h.setVisible(true);
}
});
hm.add(htmi);
hm.addSeparator();
//设置关于记事本菜单项
ami.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//显示一个关于记事本的对话框
Dialog gh=new Dialog(f,"关于记事本");
gh.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
}
});
Label lab = new Label("本产品符合最终用户协议,授权给gam rat");
gh.add("Center",lab);
gh.setLocation(120, 150);
gh.setResizable(false);
gh.setSize(400,200);
gh.setVisible(true);
}
});
hm.add(ami);
mb.add(hm);
//帮助菜单设置结束
//结束创建菜单
ta=new TextArea(); //创建文本区对象
f.setMenuBar(mb);
f.add("Center",ta);
f.setSize(600,350);
f.setVisible(true);
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
//关闭应用程序
int n;
Object[] option={
"YES","NO"
};
n=JOptionPane.showOptionDialog(null,"你的文件还没有保存,你想现在保存吗?","保存",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,option,option[0]);
if(n==JOptionPane.YES_OPTION){
doSave(fileName);
System.exit(0);
}
else if(n==JOptionPane.NO_OPTION){
System.exit(0);
}
}
});
}//init()结束
//将文本区中的内容保存到文件
private void doSave(String fileName){
FileOutputStream fos = null;
if(fileName ==""){
doSaveAs();
}
else{
String str = ta.getText();
try{
fos = new FileOutputStream(fileName);
fos.write(str.getBytes());
}
catch(IOException e1){}
finally{
try{
fos.close();
}
catch(IOException e2){}
}
changed = false;
}
}
//将当前文件保存为另外一个与原来文件名不同的文件
private void doSaveAs(){
FileOutputStream fos = null;
String str = ta.getText();
FileDialog bc = new FileDialog(f,"Save As...",FileDialog.SAVE);
bc.show();
if(bc.getFile() == null){
return;
}
fileName =bc.getDirectory() + File.separator + bc.getFile();
try{
fos = new FileOutputStream(fileName);
fos.write(str.getBytes());
}
catch(IOException e1){}
finally{
try{
fos.close();
}
catch(IOException e2){}
}
changed = false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -