📄 correcterdlg.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 + -