鉴于此
JTextArea t = new JTextArea();
Document d = t.getDocument();
String word1 = "someWord";
String word2 = "otherWord"
int pos = t.getText().indexOf(word1,i);
...之间有什么区别? 此
if(pos!= -1){
t.replaceRange(word2.toUpperCase(), pos, pos+ word1.length());
}
和这个
if(pos!= -1){
d.remove(pos, word1.length());
d.insertString(pos, word2.toUpperCase(), null);
}
答案 0 :(得分:8)
最终它会做同样的事情。
转到JTextArea
here的源代码,在那里你可以发现它正在做同样的事情。
我在这里也复制了这个方法,你可以在那里找到它正在做的事情
d.remove(pos, word1.length());
d.insertString(pos, word2.toUpperCase(), null);
如果打电话:
t.replaceRange(word2.toUpperCase(), pos, pos+ word1.length());
方法
该类方法的源代码如下
public void replaceRange(String str, int start, int end) {
490 if (end < start) {
491 throw new IllegalArgumentException ("end before start");
492 }
493 Document doc = getDocument();
494 if (doc != null) {
495 try {
496 if (doc instanceof AbstractDocument) {
497 ((AbstractDocument)doc).replace(start, end - start, str,
498 null);
499 }
500 else {
501 doc.remove(start, end - start);
502 doc.insertString(start, str, null);
503 }
504 } catch (BadLocationException e) {
505 throw new IllegalArgumentException (e.getMessage());
506 }
507 }
508 }
答案 1 :(得分:0)
我同意Bhavik,即使文件听众也不会有任何不同之处:
txt.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent pE) {
System.out.println("removeUpdate: "+pE);
}
@Override
public void insertUpdate(DocumentEvent pE) {
System.out.println("insertUpdate: "+pE);
}
@Override
public void changedUpdate(DocumentEvent pE) {
System.out.println("changedUpdate: "+pE);
}
});
将在两种情况下产生:
removeUpdate: [javax.swing.text.GapContent$RemoveUndo@97c87a4 hasBeenDone: true alive: true]
insertUpdate: [javax.swing.text.GapContent$InsertUndo@4ead24d9 hasBeenDone: true alive: true]