创建text / html JTextPane

时间:2017-11-01 14:16:13

标签: java string jtextpane

我有一个可编辑的 JTextpane ,并希望启用HTML,以便初始文本显示为格式。但是,这有效,现在字符串中的第一个字符是'\ n',这意味着该字符串比预期长1个字符。我可以删除它(例如,对于单词'foo',我可以按退格键4次以先删除单词然后再删除'\ n')。

显然,如果我马上只有所需的字符串,我会更喜欢它,之后没有任何删除它的技巧。我将不胜感激任何帮助!

这是我的示例代码:

JTextPane testPane = new JTextPane();
testPane.setContentType("text/html");
testPane.setText("<html><body><span style='color:red'>My Text which will have a newline at the beginning.</span></body></html>");
// testPane.setText("the same newline at the start even without the HTML tags");
StyledDocument doc = testPane.getStyledDocument();
SimpleAttributeSet myAttributeSet = new SimpleAttributeSet();
StyleConstants.setFontSize(myAttributeSet, 14);
StyleConstants.setFontFamily(myAttributeSet, Font.DIALOG);
doc.setParagraphAttributes(0, doc.getLength(), myAttributeSet, false);
testPane.setDocument(doc);
myGridPanel.add(testPane, gbc);

请注意,无论我是否拥有所有此标记信息(即''),都会显示换行符。

我很感激任何关于我做错了什么的提示,或者我应该做些什么以避免在开始时出现这个额外的角色。

提前致谢!

1 个答案:

答案 0 :(得分:1)

您看到的\n是文档中为头部保留的位置。 小心,这也意味着身体从char 1开始。之前你写的所有东西都不会显示出来。

如果您不需要,可以这样做:

public static void removeHead(JTextPane testPane) {
    javax.swing.text.Element head = testPane.getDocument().getDefaultRootElement().getElement(0);
    if(head.getName().equals("head")) {
        try {
            testPane.getDocument().remove(0, head.getEndOffset());
        } catch (BadLocationException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}