import java.awt.*;
import java.awt.event.*;
import java.awt.Color;
import java.io.*;
import java.util.*;
import java.util.HashSet;
import java.util.Set;
import java.awt.datatransfer.*;
import java.awt.event.*;
import java.text.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.Caret;
import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
import javax.swing.undo.*;
public class ok{
public static void main(String[] args)
{
myfr fr=new myfr ("我的java编辑器");
fr.setSize(600,400);
}
}
///////////////////////////myfr主窗体类//////////////////////////////////////
class myfr extends JFrame implements ActionListener
{
String str,strnext,path,fname; //部分变量的声明
JPanel mainpane;
JFileChooser choose = new JFileChooser(); //文件对话框
Dialog find,replace; //find为查找对话框,replace对话框
JTextField findtxt,repltxt; //find为查找对话框的输入文本区,replace对话框的输入文本区
Font newfont;
JButton findenter,replb,but; //find为查找对话框,replace对话框的确定按钮
JLabel state=new JLabel("java编辑器------未命名文档"); //状态栏
JTextPane txt1; //主输入文本区
File newfiles;
JPopupMenu popm; //弹出菜单声明
JMenu m1,m2,m3,m4,m5,m6; //各菜单项
JMenuItem m61,m62,m26,m271,m34,m51,m52,m53,m54,p_copy,p_cut,p_paste,p_del,font;
int startp,endp,nexttemp,newstartp,newendp; //查找替换时所用的临时变量
JToolBar toolbar = new JToolBar(); //工具条
private Set<String> keywords;
private Set<String> classwords;
private Style keywordStyle;
private Style classwordStyle;
private Style normalStyle;
myfr(String sss) /////构造函数开始
{
super(sss);
JMenuBar mb=new JMenuBar();
fname=null; //初始文件名为空
findenter=new JButton("确定");
findenter.addActionListener(this); //声明对话框中上确定按钮,并注册事件
replb=new JButton("确定");
replb.addActionListener(this);
mainpane=(JPanel)this.getContentPane();
mainpane.setLayout(new BorderLayout());
txt1=new JTextPane();
txt1.getDocument().addDocumentListener(new SyntaxHighlighter(txt1));
txt1.addMouseListener(new handlemouse(this));//注册鼠标右击事件
txt1.setFont(new Font("宋体",Font.PLAIN,18));
mainpane.add(txt1, BorderLayout.CENTER);
mainpane.add("North",toolbar);
mainpane.add("South",state);
JScrollPane sll = new JScrollPane(); //创建滚动条
mainpane.add("Center", sll); ;
sll.getViewport().add(txt1); //将滚动条装入文本区
popm=new JPopupMenu(); ////POPMeun 开始
p_copy=new JMenuItem("复制 ");
p_copy.addActionListener(this);
KeyStroke keycopyp=KeyStroke.getKeyStroke(KeyEvent.VK_C,Event.CTRL_MASK);
p_copy.setAccelerator(keycopyp);
p_cut=new JMenuItem("剪切 ");
p_cut.addActionListener(this);
KeyStroke keycutp=KeyStroke.getKeyStroke(KeyEvent.VK_X,Event.CTRL_MASK);
p_cut.setAccelerator(keycutp);
p_paste=new JMenuItem("粘贴 ");
p_paste.addActionListener(this);
KeyStroke keypp=KeyStroke.getKeyStroke(KeyEvent.VK_V,Event.CTRL_MASK);
p_paste.setAccelerator(keypp);
p_del=new JMenuItem("删除 ");
p_del.addActionListener(this);
KeyStroke keydelp=KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0);
p_del.setAccelerator(keydelp);
popm.add(p_copy);
popm.add(p_cut);
popm.add(p_paste);
popm.add(p_del);
txt1.add(popm); ////POPMenu 结束
m1=new JMenu("文件(F)");
m1.setMnemonic('F'); //定义快捷方式
JMenuItem m10=new JMenuItem("新建 ");
m10.addActionListener(this); //注册事件监听器
KeyStroke keynew=KeyStroke.getKeyStroke(KeyEvent.VK_N,Event.CTRL_MASK); //定义快捷键
m10.setAccelerator(keynew);
JMenuItem m11=new JMenuItem("打开 ");
m11.addActionListener(this);
KeyStroke keyopen=KeyStroke.getKeyStroke(KeyEvent.VK_O,Event.CTRL_MASK);
m11.setAccelerator(keyopen);
JMenuItem m12=new JMenuItem("保存 ");
m12.addActionListener(this);
KeyStroke keysave=KeyStroke.getKeyStroke(KeyEvent.VK_S,Event.CTRL_MASK);
m12.setAccelerator(keysave);
JMenuItem m13=new JMenuItem("另保存为 ");
m13.addActionListener(this);
JMenuItem m14=new JMenuItem("退出 ");
m14.addActionListener(this);
KeyStroke keyexit=KeyStroke.getKeyStroke(KeyEvent.VK_F4,Event.ALT_MASK);
m14.setAccelerator(keyexit);
////////////////////////////////////////////
m2=new JMenu("编辑(E)");
m2.setMnemonic('E');
JMenuItem m21=new JMenuItem("复制 ");
m21.addActionListener(this);
KeyStroke keycopy=KeyStroke.getKeyStroke(KeyEvent.VK_C,Event.CTRL_MASK);
m21.setAccelerator(keycopy);
JMenuItem m22=new JMenuItem("剪切 ");
m22.addActionListener(this);
KeyStroke keycut=KeyStroke.getKeyStroke(KeyEvent.VK_X,Event.CTRL_MASK);
m22.setAccelerator(keycut);
JMenuItem m23=new JMenuItem("粘贴 ");
m23.addActionListener(this);
KeyStroke keyp=KeyStroke.getKeyStroke(KeyEvent.VK_V,Event.CTRL_MASK);
m23.setAccelerator(keyp);
JMenuItem m24=new JMenuItem("删除 ");
m24.addActionListener(this);
KeyStroke keydel=KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0);
m24.setAccelerator(keydel);
JMenuItem m25=new JMenuItem("查找 ");
m25.addActionListener(this);
KeyStroke keyfind=KeyStroke.getKeyStroke(KeyEvent.VK_F,Event.CTRL_MASK);
m25.setAccelerator(keyfind);
m26=new JMenuItem("查找下一个 ");
m26.addActionListener(this);
KeyStroke keyfn=KeyStroke.getKeyStroke(KeyEvent.VK_F3,0);
m26.setAccelerator(keyfn);
m26.setEnabled(false);
JMenuItem m27=new JMenuItem("替换 ");
m27.addActionListener(this);
KeyStroke keyrepl=KeyStroke.getKeyStroke(KeyEvent.VK_H,Event.CTRL_MASK);
m27.setAccelerator(keyrepl);
m271=new JMenuItem("替换下一个");
m271.setEnabled(false);
m271.addActionListener(this);
KeyStroke keyrepn=KeyStroke.getKeyStroke(KeyEvent.VK_F6,0);
m271.setAccelerator(keyrepn);
JMenuItem m28=new JMenuItem("全选 ");
m28.addActionListener(this);
KeyStroke keyall=KeyStroke.getKeyStroke(KeyEvent.VK_A,Event.CTRL_MASK);
m28.setAccelerator(keyall);
JMenuItem m29=new JMenuItem("日期/时间 ");
m29.addActionListener(this);
///////////////////////////////////////////
m3=new JMenu("格式(O)");
m3.setMnemonic('O');
font=new JMenuItem("字体[F]");
font.addActionListener(this);
JMenuItem m33=new JMenuItem("字体颜色 ");
m33.addActionListener(this);
//////////////////////////////////////////
m5=new JMenu("视图风格(V)");
m5.setMnemonic('V');
m54=new JMenuItem("状态栏 ");
m54.addActionListener(this);
//////////////////////////////////////////
m6=new JMenu("帮助(H)");
m6.setMnemonic('H');
m61=new JMenuItem("帮助主题 ");
m61.addActionListener(this);
m62=new JMenuItem("关于 ");
m62.addActionListener(this);
//添加各项
m1.add(m10); m1.add(m11); m1.add(m12); m1.add(m13); m1.addSeparator(); m1.add(m14);m3.add(font);
m2.add(m21); m2.add(m22); m2.add(m23); m2.add(m24); m2.addSeparator(); m2.add(m25);
m2.add(m26); m2.add(m27); m2.add(m271); m2.addSeparator(); m2.add(m28);
m2.add(m29); m3.add(m33); m5.add(m54); m6.add(m61);
m6.addSeparator(); m6.add(m62); mb.add(m1); mb.add(m2); mb.add(m3);
mb.add(m5); mb.add(m6); this.setJMenuBar(mb); //设置菜单栏
setVisible(true);
pack();
show();
this.addWindowListener(new xxx(this));
}///构造函数结束///
////////////////事件处理/////////////////////////////////////
public void actionPerformed(ActionEvent p)
{
if(p.getActionCommand()=="新建 ") //响应菜单及工具栏事件
{
fname=null; //置文件名为空,便于判断文件是否保存过
txt1.setText("");
state.setText(" 我的java编辑器------未命名文档");
}
if(p.getActionCommand()=="打开 ")
{
try {
if(this.choose.APPROVE_OPTION==this.choose.showOpenDialog(this))
{
path=this.choose.getSelectedFile().getPath();
fname=this.choose.getSelectedFile().getName();
File file=new File(path);
int flength=(int)file.length();
FileReader fReader=new FileReader(file);
char[] data=new char[flength];
fReader.read(dat