📄 spellchecker.java
字号:
package myprojects_SpellChecker;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import javax.swing.text.*;
import javax.swing.undo.*;
import javax.swing.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.JTable;
public class SpellChecker extends JFrame{
public SpellChecker() {//构造函数
super("文本编辑分析大师");JTextArea a=new JTextArea();
if (System.getProperty("java.version").compareTo("1.5") < 0){
JOptionPane.showMessageDialog(SpellChecker.this,"this application must be run with a 1.5 or higher version VM!","WARNING!",JOptionPane.WARNING_MESSAGE);
System.exit(1);
}
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
SwingUtilities.updateComponentTreeUI(this);
//UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
} catch (Exception exc) {
System.err.println("Error loading L&F: " + exc);
}
styledpad=new StyledPad(SpellChecker.this);//创建StyledPad类对象
isDocumentModified=false;
isChecked=false;
isNeedAutoCheck=false;
strBuf=new StringBuffer();
wrongwordlog=new Vector();
timer = new javax.swing.Timer(TIME_TRIGGER_SPAN, new TimerListener());//创建定时器
timer.start();
this.initText_Analyze();
this.creattoolBar();//创建工具条
this.creatPopupMenu();//创建右键菜单
styledpad.getEditor().addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent event) {
if (event.isPopupTrigger())
popupmenu.show(event.getComponent(), event.getX(), event.getY());
}
});
this.setResizable(false);
setVisible(true);//显示窗口
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent we) {
if(isDocumentModified)
confirmExit();
else{
we.getWindow().dispose();
timer.stop();
System.exit(0);
}
}
});
}
private void creatPopupMenu(){
popupmenu=new JPopupMenu();
JMenuItem menuitem;
menuitem = new JMenuItem("复制");
menuitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
popupmenu.add(menuitem);
menuitem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
styledpad.getEditor().copy();
}
});
menuitem = new JMenuItem("剪切");
menuitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
popupmenu.add(menuitem);
menuitem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent actionevent){
styledpad.getEditor().cut();
}
}
);
menuitem = new JMenuItem("粘贴");
menuitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
popupmenu.add(menuitem);
menuitem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
styledpad.getEditor().paste();
}
});
popupmenu.addSeparator();
menuitem= new JMenuItem("恢复");
menuitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.CTRL_MASK));
popupmenu.add(menuitem);
menuitem.addActionListener(styledpad.undoAction);
menuitem= new JMenuItem("重做");
menuitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,InputEvent.CTRL_MASK));
popupmenu.add(menuitem);
menuitem.addActionListener(styledpad.redoAction);
popupmenu.addSeparator();
String[] StrPopupMenu={"标记错误单词","错误智能更正"};
for(int i=0;i<StrPopupMenu.length;i++){
menuitem=new JMenuItem(StrPopupMenu[i]);
if(i==0)
menuitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK));
else
menuitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I,InputEvent.CTRL_MASK));
popupmenu.add(menuitem);
menuitem.addActionListener(spellmenuListener);
}
popupmenu.addSeparator();
menuitem = new JMenuItem("导出词典...");
popupmenu.add(menuitem);
menuitem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
JFileChooser chooser = new JFileChooser();
int retval = chooser.showSaveDialog(SpellChecker.this);
if (retval != JFileChooser.APPROVE_OPTION) {
return;
}
File f = chooser.getSelectedFile();
dirProc.ExtraDictionary(f);
}
});
menuitem = new JMenuItem("自定义词典...");
popupmenu.add(menuitem);
menuitem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
JFileChooser chooser = new JFileChooser();
int retval = chooser.showOpenDialog(SpellChecker.this);
if (retval != JFileChooser.APPROVE_OPTION) {
return;
}
directoryfile = chooser.getSelectedFile();
dirProc=new DictionaryProcessor(directoryfile);//将词典文件中的单词存入TreeSet中
}
});
menuitem = new JMenuItem("导出分析记录...");
popupmenu.add(menuitem);
menuitem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
JFileChooser chooser = new JFileChooser();
int retval = chooser.showSaveDialog(SpellChecker.this);
if (retval != JFileChooser.APPROVE_OPTION) {
return;
}
File file = chooser.getSelectedFile();
logFileSaver(file);
}
});
}
private void creattoolBar(){
toolbar=new JToolBar();//工具条对象
toolbar.setLayout(new FlowLayout(FlowLayout.LEFT,2,0));
setVisible(true);
toolbutton=new JButton(new ImageIcon("images/new.png"));
toolbutton.setToolTipText("新建");
toolbar.add(toolbutton);
toolbutton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
styledpad.getEditor().setText("");
isDocumentModified=false;
}
});
toolbutton=new JButton(new ImageIcon("images/open.png"));
toolbutton.setToolTipText("打开");
toolbar.add(toolbutton);
toolbutton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
srcFileLoader();
}
});
toolbutton=new JButton(new ImageIcon("images/save.png"));
toolbutton.setToolTipText("保存");//设置组件的提示文字
toolbar.add(toolbutton);
toolbutton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
FileSaver(srcfile);
}
});
toolbar.addSeparator();
toolbutton=new JButton(new ImageIcon("images/cut.png"));
toolbutton.setToolTipText("剪切");//设置组件的提示文字
toolbar.add(toolbutton);
toolbutton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
styledpad.getEditor().cut();
}
});
toolbutton=new JButton(new ImageIcon("images/copy.png"));
toolbutton.setToolTipText("复制");//设置组件的提示文字
toolbar.add(toolbutton);
toolbutton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
styledpad.getEditor().copy();
}
});
toolbutton=new JButton(new ImageIcon("images/paste.png"));
toolbutton.setToolTipText("粘贴");//设置组件的提示文字
toolbar.add(toolbutton);
toolbutton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
styledpad.getEditor().paste();
}
});
toolbar.addSeparator();
toolbutton=new JButton(new ImageIcon("images/undo.png"));
toolbutton.setToolTipText("撤消");//设置组件的提示文字
toolbar.add(toolbutton);
toolbutton.addActionListener(styledpad.undoAction);
toolbutton=new JButton(new ImageIcon("images/redo.png"));
toolbutton.setToolTipText("恢复");//设置组件的提示文字
toolbar.add(toolbutton);
toolbutton.addActionListener(styledpad.redoAction);
toolbar.addSeparator();
toolbutton=new JButton(new ImageIcon("images/in.png"));
toolbutton.setToolTipText("自定义词典");//设置组件的提示文字
toolbar.add(toolbutton);
toolbutton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
JFileChooser chooser = new JFileChooser();
int retval = chooser.showOpenDialog(SpellChecker.this);
if (retval != JFileChooser.APPROVE_OPTION) {
return;
}
File file = chooser.getSelectedFile();
dirProc=new DictionaryProcessor(file);//将字典文件中的单词存入TreeSet中
}
});
toolbutton=new JButton(new ImageIcon("images/out.png"));
toolbutton.setToolTipText("导出词典");//设置组件的提示文字
toolbar.add(toolbutton);
toolbutton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
JFileChooser chooser = new JFileChooser();
int retval = chooser.showSaveDialog(SpellChecker.this);
if (retval != JFileChooser.APPROVE_OPTION) {
return;
}
File f = chooser.getSelectedFile();
dirProc.ExtraDictionary(f);
}
});
toolbar.addSeparator();
toolbutton=new JButton(new ImageIcon("images/wrong.png"));
toolbutton.addActionListener(spellmenuListener);
toolbutton.setToolTipText("标记错误单词");//设置组件的提示文字
toolbutton.setActionCommand("标记错误单词");
toolbar.add(toolbutton);
toolbutton=new JButton(new ImageIcon("images/right.png"));
toolbutton.addActionListener(spellmenuListener);
toolbutton.setToolTipText("错误智能更正");//设置组件的提示文字
toolbutton.setActionCommand("错误智能更正");
toolbar.add(toolbutton);
toolbutton=new JButton(new ImageIcon("images/analyse.png"));
toolbutton.setToolTipText("导出分析记录");//设置组件的提示文字
toolbar.add(toolbutton);
toolbutton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
JFileChooser chooser = new JFileChooser();
int retval = chooser.showSaveDialog(SpellChecker.this);
if (retval != JFileChooser.APPROVE_OPTION) {
return;
}
File file = chooser.getSelectedFile();
logFileSaver(file);
}
});
toolbar.addSeparator();
toolbutton=new JButton(new ImageIcon("images/help.png"));
toolbutton.setToolTipText("帮助");//设置组件的提示文字
toolbar.add(toolbutton);
toolbutton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
JOptionPane.showMessageDialog(SpellChecker.this,"帮助文档.","帮助",JOptionPane.INFORMATION_MESSAGE,new ImageIcon("help.png"));
}
});
contentPane.add(toolbar,BorderLayout.NORTH);
}
private void initText_Analyze(){
startWindow startwin=new startWindow();
startwin.start();//启动显示启动画面线程
try{Thread.sleep(99);}catch(InterruptedException ex){}
startwin.resume();
directoryfile=new File(directoryPath);
if(!directoryfile.exists()||!directoryfile.canRead())
System.out.println("词典文件读取失败!");
else{
dirProc=new DictionaryProcessor(directoryfile);//将词典文件中的单词存入TreeSet中
}
try{Thread.sleep(99);}catch(InterruptedException ex){}
startwin.resume();
contentPane = this.getContentPane();
contentPane.setLayout(new BorderLayout(1,1));
this.creatMenu();//创建菜单
statusbar = new StatusBar(); //创建菜单条
showlabelThread=new ShowJLabelThread();//creat a thread
statusbar.add(showlabelThread.showJLabel);
showlabelThread.start();
text_tablePanel=new JPanel();
table = new JTable();
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
scroller_table=new JScrollPane(table);
scroller_table.setBackground(new Color(204,204,255));
scroller_table.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder("统计结果"),BorderFactory.createEmptyBorder(1,1,1,1)));
scroller_text = new JScrollPane(styledpad.getEditor());
contentPane.add(scroller_text,BorderLayout.CENTER);
contentPane.add("South",statusbar);
setSize(800,600);//设置窗口大小
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -