6

So I've created my own text pane class (extending JTextPane) and I'm using the method below to add text to it. However, the pane needs to be editable for it to add the text, but this allows a user to edit what is in the pane as well.

Can anyone tell me how to add text to the pane without letting the user manipulate what is there?

public void appendColor(Color c, String s) { 
    StyleContext sc = StyleContext.getDefaultStyleContext(); 
    AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, c);

    int len = getDocument().getLength(); 

    setCaretPosition(len); 

    setCharacterAttributes(aset, false);

    replaceSelection(s); 

    setCaretPosition(getDocument().getLength());
} 
Fran Fitzpatrick
  • 16,032
  • 15
  • 31
  • 33

4 Answers4

9

Update the Document directly:

StyledDocument doc = textPane.getStyledDocument();
doc.insertString("text", doc.getLength(), attributes);
camickr
  • 308,339
  • 18
  • 152
  • 272
4
JTextPane pane = new JTextPane();
pane.setEditable(false);  // prevents the user from editting it.
// programmatically put this text in the TextPane
pane.setText("Hello you can't edit this!");
chubbsondubs
  • 34,812
  • 24
  • 97
  • 134
1

Ok Take 2:

JTextPane pane = new JTextPane();
pane.setEditable(true);
DefaultStyledDocument document = (DefaultStyledDocument)pane.getDocument();
document.insertString( "Hello you can't edit this!", document.getEndPosition().getOffset(), null );
chubbsondubs
  • 34,812
  • 24
  • 97
  • 134
1
JTextPane myTextArea = new JTextPane();
myTextArea.setEditable(false);  
slfan
  • 8,209
  • 115
  • 61
  • 73