5

鉴于

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);
}
4

2 回答 2

8

最终它会做同样的事情。

转到JTextArea 此处的源代码,您可以在其中发现它正在做同样的事情。我在这里也复制了该方法,您可以在其中找到它正在执行的操作

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     }
于 2012-05-12T08:23:35.960 回答
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]
于 2014-01-28T23:00:40.833 回答