📄 texteditor.java
字号:
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.regex.*;
public class TextEditor extends JFrame implements ActionListener
{
private String[] dic=new String[13792];
private JTextArea text=new JTextArea(); //用来显示文件内容
private String textContent=text.getText(),
changeContent=null;
private JScrollPane textScroll; //滚动条
private JFileChooser jFileChooser=new JFileChooser(); //显示文件名
private JFrame searchJFrame; //用来显示替换对话框
//下面是它们(查找与替换)的一些组建
private JTextField findText;
private JTextField replaceText;
private JButton jbFind,jbNext,jbPrevious,jbReplace,jbReplaceAll,jbExit;
private JCheckBox jcbIgnoreCase;
private boolean ignoreCase, //查找时是否区分大小写
isFind,
findNext=true; //向下查找
private int index=0;
DefaultHighlighter hl = new DefaultHighlighter();
//下面是用来标记颜色的,红色是用来标记错误的,而蓝色是用来标记双击选中单词的背景的。
DefaultHighlighter.DefaultHighlightPainter hp = new DefaultHighlighter.DefaultHighlightPainter(Color.red);
DefaultHighlighter.DefaultHighlightPainter hpBlue = new DefaultHighlighter.DefaultHighlightPainter(Color.blue);
JPopupMenu menu=new JPopupMenu();
public TextEditor()
{
int i=0;
try
{
BufferedReader inputStream=new BufferedReader(new FileReader("dic.txt"));
String line=inputStream.readLine();
while(line!=null)
{
dic[i]=line;
i++;
line=inputStream.readLine();
}
inputStream.close();
}
catch(FileNotFoundException e){}
catch(IOException e){}
JMenuItem jmiOpen,jmiSave,jmiNew,jmiExit,jmiSearch,jmiAbout,jmiCheck,
jmiCopy,jmiCut,jmiPaste,jmiAll,jmiRefush,jmiSaveAs;
setTitle("文本编辑器---未命名");
JMenuBar jmb=new JMenuBar();
setJMenuBar(jmb);
JMenu documentMenu=new JMenu("文件");
documentMenu.setMnemonic('o');
jmb.add(documentMenu);
JMenu searchMenu=new JMenu("搜索");
searchMenu.setMnemonic('f');
jmb.add(searchMenu);
JMenu editMenu=new JMenu("编辑");
editMenu.setMnemonic('f');
jmb.add(editMenu);
JMenu helpMenu=new JMenu("帮助");
helpMenu.setMnemonic('h');
jmb.add(helpMenu);
text.setLineWrap(true);
text.setWrapStyleWord(true);
textScroll=new JScrollPane(text);
//文件菜单
documentMenu.add(jmiNew=new JMenuItem("新建"));
documentMenu.add(jmiOpen=new JMenuItem("打开"));
documentMenu.add(jmiSave=new JMenuItem("保存"));
documentMenu.addSeparator();
documentMenu.add(jmiExit=new JMenuItem("退出"));
//帮助菜单
helpMenu.add(jmiAbout=new JMenuItem("关于"));
//查找菜单
searchMenu.add(jmiSearch=new JMenuItem("查找与替换"));
jmiSearch.setActionCommand("搜索");
documentMenu.addSeparator();
searchMenu.add(jmiCheck=new JMenuItem("查错"));
//编辑菜单
editMenu.add(jmiRefush=new JMenuItem("刷新"));
editMenu.add(jmiAll=new JMenuItem("全选"));
editMenu.addSeparator();
editMenu.add(jmiCopy=new JMenuItem("复制"));
editMenu.add(jmiCut=new JMenuItem("剪切"));
editMenu.add(jmiPaste=new JMenuItem("粘贴"));
//设置热键
jmiNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,ActionEvent.CTRL_MASK));
jmiOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,ActionEvent.CTRL_MASK));
jmiSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,ActionEvent.CTRL_MASK));
jmiExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,ActionEvent.CTRL_MASK));
jmiAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,ActionEvent.ALT_MASK));
jmiCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,ActionEvent.CTRL_MASK));
jmiCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,ActionEvent.CTRL_MASK));
jmiPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,ActionEvent.CTRL_MASK));
jmiSearch.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,ActionEvent.CTRL_MASK));
//创建查找,替换对话框
searchJFrame=new JFrame();
JPanel rpButton=new JPanel();
rpButton.setLayout(new GridLayout(3,3));
rpButton.add(jbFind=new JButton("查找"));
rpButton.add(jbReplace=new JButton("替换一个"));
rpButton.add(jbPrevious=new JButton("上一个"));
rpButton.add(jbReplaceAll=new JButton("全部替换"));
rpButton.add(jbNext=new JButton("下一个"));
rpButton.add(jbExit=new JButton("退出"));
JPanel rpPanel=new JPanel();
rpPanel.setLayout(new GridLayout(2,2));
JPanel j=new JPanel();
j.add(new JLabel("查找内容"));
j.add(findText=new JTextField("",20));
JPanel k=new JPanel();
k.add(new JLabel("替换为"));
k.add(replaceText=new JTextField("",20));
rpPanel.add(j);
rpPanel.add(k);
searchJFrame.setLayout(new BorderLayout());
searchJFrame.getContentPane().add(rpPanel,BorderLayout.NORTH);
searchJFrame.getContentPane().add(rpButton,BorderLayout.SOUTH);
searchJFrame.getContentPane().add(jcbIgnoreCase=new JCheckBox("区分大小写"),BorderLayout.CENTER);
searchJFrame.setSize(350,200);
searchJFrame.setTitle("查找与替换");
//创建工具栏
JToolBar tool=new JToolBar();
JButton New =new JButton("新建",new ImageIcon("Icon/new.jpg")),
open=new JButton("打开",new ImageIcon("Icon/open.jpg")),
save=new JButton("保存",new ImageIcon("Icon/save.jpg")),
copy=new JButton("复制",new ImageIcon("Icon/copy.jpg")),
cut=new JButton("剪切",new ImageIcon("Icon/cut.jpg")),
paste=new JButton("粘贴",new ImageIcon("Icon/paste.jpg")),
find=new JButton("搜索",new ImageIcon("Icon/find.jpg")),
check=new JButton("查错",new ImageIcon("Icon/check.jpg"));
New.setHorizontalTextPosition(SwingConstants.CENTER);
open.setHorizontalTextPosition(SwingConstants.CENTER);
save.setHorizontalTextPosition(SwingConstants.CENTER);
copy.setHorizontalTextPosition(SwingConstants.CENTER);
cut.setHorizontalTextPosition(SwingConstants.CENTER);
paste.setHorizontalTextPosition(SwingConstants.CENTER);
find.setHorizontalTextPosition(SwingConstants.CENTER);
check.setHorizontalTextPosition(SwingConstants.CENTER);
tool.add(New);
tool.add(open);
tool.add(save);
tool.add(copy);
tool.add(cut);
tool.add(paste);
tool.add(find);
tool.add(check);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(textScroll,BorderLayout.CENTER);
getContentPane().add(tool,BorderLayout.NORTH);
//注册所有的事件
jmiNew.addActionListener(this);
jmiOpen.addActionListener(this);
jmiSave.addActionListener(this);
jmiExit.addActionListener(this);
jmiRefush.addActionListener(this);
jmiAll.addActionListener(this);
jmiCopy.addActionListener(this);
jmiCut.addActionListener(this);
jmiPaste.addActionListener(this);
jmiSearch.addActionListener(this);
jmiCheck.addActionListener(this);
jmiAbout.addActionListener(this);
jbFind.addActionListener(this);
jbNext.addActionListener(this);
jbPrevious.addActionListener(this);
jbExit.addActionListener(this);
jbReplace.addActionListener(this);
jbReplaceAll.addActionListener(this);
jcbIgnoreCase.addActionListener(this);
New.addActionListener(this);
open.addActionListener(this);
save.addActionListener(this);
copy.addActionListener(this);
cut.addActionListener(this);
paste.addActionListener(this);
find.addActionListener(this);
check.addActionListener(this);
text.addMouseListener(new PopupListener());
addMouseListener(new PopupListener());
}
//侦听所有的事件
//1.鼠标事件
class PopupListener extends MouseAdapter
{
public void mousePressed(MouseEvent e) {maybeShowPopup(e);}
public void mouseReleased(MouseEvent e) {maybeShowPopup(e);}
private void maybeShowPopup(MouseEvent e)
{
if(e.getClickCount()==2)
{
text.setHighlighter(hl);
try{hl.addHighlight(text.getSelectionStart(),text.getSelectionEnd(),hpBlue);}
catch(Exception ex){}
}
if(e.isPopupTrigger()&&!isFind(text.getSelectedText(),0,13791))
{
showOpinion();
menu.show(((JTextArea)e.getComponent()), e.getX(), e.getY());
}
}
}
//菜单和按钮事件
public void actionPerformed(ActionEvent e)
{
String c=e.getActionCommand();
if(c.equals("查找") &&!findText.getText().equals(""))
{
find(findText.getText());
}
else if(c.equals("下一个")&&!findText.getText().equals(""))
{
findNext=true;
find(findText.getText());
}
else if(c.equals("上一个")&&!findText.getText().equals(""))
{
findNext=false;
find(findText.getText());
}
else if(c.equals("替换一个")&&!replaceText.getText().equals("")&&isFind)
{
replace();
}
else if(c.equals("全部替换")&&!replaceText.getText().equals("")&&isFind)
{
replaceAll();
}
else if(c.equals("退出"))
{
searchJFrame.setVisible(false);
text.setText(text.getText());
index=0;
}
else if(c.equals("新建"))
{
newDocument();
}
else if(c.equals("打开"))
{
open();
}
else if(c.equals("保存"))
{
save();
}
else if(c.equals("复制"))
{
text.copy();
}
else if(c.equals("剪切"))
{
text.cut();
}
else if(c.equals("粘贴"))
{
text.paste();
}
else if(c.equals("搜索"))
{
index=0;
searchJFrame.setVisible(true);
}
else if(c.equals("查错"))
{
check();
}
else if(c.equals("退出"))
{
System.exit(0);
}
else if(c.equals("刷新"))
{
text.setHighlighter(hl);
hl.removeAllHighlights();
}
else if(c.equals("全选"))
{
text.selectAll();
}
else if(c.equals("关于"))
{
JOptionPane.showMessageDialog(this,"作者:吴悠强\n学号:041251135\n创建日期:2005-06-02",
"About",JOptionPane.INFORMATION_MESSAGE,new ImageIcon("Icon/about.jpg"));
}
else if(e.getSource() instanceof JCheckBox)
{
ignoreCase=false;
if(jcbIgnoreCase.isSelected())
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -