有或没有javax.swing.text.Document

时间:2012-05-12 08:11:54

标签: java swing jtextarea

鉴于此

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

2 个答案:

答案 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]