⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 correcterdlg.java

📁 文本编辑分析大师
💻 JAVA
字号:
package myprojects_SpellChecker;

import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
class CorrecterDlg extends JDialog{
    public boolean isDirectoryUpdated;
    private int curCaretPosition;
    private int precurCaretPosition;
    private String CurWrongWord; 
    private String preWrongWord,preCorrectWord;
    
    private Container contentPanel;
    private JButton btn;
    public JButton btnRollbck;
    private JButton btnCancel;
    private JTextPane wrongTextPane;
    private JList advisedList;
    private JProgressBar progress;
    private Style def;//默认文本属性
    private Style wrongword;//错误单词的文本属性
    private StyleContext sc_dlg;
    private DefaultStyledDocument doc_dlg ;
    private Document doc;
    private Thread depdendthread;
    private DictionaryProcessor dirProc;
    public CorrecterDlg(Document doc,JFrame frame){
        super(frame,"智能更正",false);
        Point point=frame.getLocation();
        point.x+=170;
        point.y+=100;
        this.setLocation(point);        
        this.doc=doc;
        isDirectoryUpdated=false;
        contentPanel=this.getContentPane();//获取内容面板
        this.setLayout(null);
        sc_dlg = new StyleContext();
        doc_dlg = new DefaultStyledDocument(sc_dlg);
        wrongTextPane = new JTextPane(doc_dlg);
        JScrollPane textpanescroller=new JScrollPane(wrongTextPane);
        textpanescroller.setBounds(new Rectangle(10,10,310,95));
        contentPanel.add(textpanescroller);
        advisedList = new JList();
        advisedList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        advisedList.setSelectedIndex(0);
        JScrollPane listScrollPane = new JScrollPane(advisedList);
        listScrollPane.setBounds(new Rectangle(10,120,310,95));
        contentPanel.add(listScrollPane);
        
        JPanel east_Panel=new JPanel();
        east_Panel.setLayout(new GridLayout(3,1,20,20));
        String[] strbtn_e={"忽略","更正","添加到词典"};
        for(int i=0;i<strbtn_e.length;i++){
            btn=new JButton(strbtn_e[i]);
            east_Panel.add(btn);
            btn.addActionListener(btnListener);
        }
        east_Panel.setBounds(new Rectangle(330,20,120,180));
        contentPanel.add(east_Panel);
        
        btnRollbck=new JButton("撤销");
        btnRollbck.setEnabled(false);
        btnRollbck.setBounds(new Rectangle(70,230,120,30));
        contentPanel.add(btnRollbck);
        btnRollbck.addActionListener(btnListener);
        btnCancel=new JButton("取消");
        btnCancel.setBounds(new Rectangle(280,230,120,30));
        contentPanel.add(btnCancel);
        btnCancel.addActionListener(btnListener);
        this.setSize(470,320);
    }
    public void getDepdendThread(Thread depdendthread){
        this.depdendthread=depdendthread;
    }
    public void setDictionary(DictionaryProcessor dirProc){
        this.dirProc=dirProc;
    }
    public void setCaretPos_Token(int curCaretPosition,String currentToken){
        this.curCaretPosition=curCaretPosition;
        CurWrongWord=currentToken;
    }
    public int getCurCartPosition(){
        return 	curCaretPosition;
    }
    public void setDefaultStyle(Style def){
        this.def=def;
    }
    public void setWrongWordStyle(Style wrongword){
        this.wrongword=wrongword;
    }
    public void setWrongTextPaneltext(){
        try{
            doc_dlg.remove(0,doc_dlg.getLength());
            int maxindex=Math.max(curCaretPosition-16,0);
            int spanTemp=curCaretPosition-maxindex;
            String str;
            if(spanTemp>0) {
                str=doc.getText(maxindex,spanTemp);
                doc_dlg.insertString(0,str,def);//取当前处理单词的前8字符,并以默认属性插入
            }
            else
                spanTemp=0;
            doc_dlg.insertString(spanTemp,CurWrongWord,wrongword);//以特殊属性插入出错的单词
            int minindex=Math.min(curCaretPosition+24+CurWrongWord.length()-1,doc.getLength()-1);
            int spanTemp1=minindex-curCaretPosition-CurWrongWord.length()+1;
            str=doc.getText(curCaretPosition+CurWrongWord.length(),spanTemp1);
            doc_dlg.insertString(spanTemp+CurWrongWord.length(),str,def);
        }
        catch(BadLocationException ex){
            System.out.println("pre word load"+ex.getClass()+"    "+ex.getMessage());
        }
    }
    private void setCancelTextPaneltext(){//将TextPanel中的错误单词风格该为def
        try{
            doc.remove(curCaretPosition,CurWrongWord.length());
            doc.insertString(curCaretPosition,CurWrongWord,def);
            curCaretPosition+=CurWrongWord.length();
        }
        catch(BadLocationException ex){
            System.out.println("Exception Occured!\n"+ex.getClass()+ex.getMessage());
        }
    }
    private void setDocCorrectedText(){////更正编辑文本框中的中的错误单词
        try{
            int lengthTemp =CurWrongWord.length();
            String strTemp=null;
            strTemp=(String)advisedList.getSelectedValue();
            if(!strTemp.equals(null)&&!strTemp.equals("没有推荐的相似单词")){//如果选取了单词
                precurCaretPosition=curCaretPosition;
                preWrongWord=CurWrongWord;
                preCorrectWord=strTemp;
                doc.remove(curCaretPosition,CurWrongWord.length());
                doc.insertString(curCaretPosition,strTemp,def);
                curCaretPosition+=strTemp.length();
            }
        }
        catch(BadLocationException ex){
            System.out.println(ex.getClass()+ex.getMessage());
        }
    }
    private void setRollbackText(){
        try{
            doc.remove(precurCaretPosition,preCorrectWord.length());
            doc.insertString(precurCaretPosition,preWrongWord,def);
            System.out.println("preWrongWord="+preWrongWord+"   preCorrectWord="+preCorrectWord);
            curCaretPosition=curCaretPosition+(preWrongWord.length()-preCorrectWord.length());
        }
        catch(BadLocationException ex){
            System.out.println("Exception Occured!\n"+ex.getClass()+ex.getMessage());
        }
    }
    public void setAdvisedList(String[] similarWords){    	
        advisedList.setListData(similarWords);
    }
    class BtnListener implements ActionListener{
        public void actionPerformed(ActionEvent event) {
            if(event.getActionCommand().equals("忽略")){
                setCancelTextPaneltext();
                depdendthread.resume();
            }
            else if(event.getActionCommand().equals("更正")){
                setDocCorrectedText();
                btnRollbck.setEnabled(true);
                depdendthread.resume();
            }
            else if(event.getActionCommand().equals("添加到词典")){
                dirProc.addWordToDictionary(CurWrongWord);
                dirProc.NewDictionary();//保存更新后的词典文件
                System.out.println("current caret position:"+curCaretPosition);
            }
            else if(event.getActionCommand().equals("撤销")){
                setRollbackText();
                System.out.println("current caret position:"+curCaretPosition);
                btnRollbck.setEnabled(false);
            }
            else if(event.getActionCommand().equals("取消")){  
            	//depdendthread.resume();
                //depdendthread.stop();
                CorrecterDlg.this.setVisible(false);
                CorrecterDlg.this.dispose();

            }
        }
    }
    BtnListener btnListener=new BtnListener();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -