Search code examples
javahtmlswingjframejtextpane

JTextPane adding large spaces every time i insertString


Hey i'm making a chat application and was at first using a simple JTextPane for a basic, color supporting, chat view pane. I then wanted to add html link support to make them clickable by adding an HTML listener and setting the content type to text/html. The clickable links work perfectly, but now every time i insert a String the chat will add a large space. Here is the code i use below:

Constructor:

    public JTextPaneTest() {
    this.addHyperlinkListener(new LinkController());
    this.setContentType("text/html");
    this.setEditable(false);
    }

Here is how i append regular text:

    public void append(Color c, String s) {

    SimpleAttributeSet sas = new SimpleAttributeSet(); 

    StyleConstants.setForeground(sas, c);

    StyledDocument doc = (StyledDocument)this.getDocument();

    int len = getDocument().getLength();

    try {
        doc.insertString(len, s, sas);
    } catch (BadLocationException e) {
        e.printStackTrace();
    }

    setCaretPosition(len + s.length());
}

And Here is how i insertlinks

    public void addHyperlink(URL url, String text) {
    try {
        Document doc = this.getDocument();
        SimpleAttributeSet hrefAttr = new SimpleAttributeSet();
        hrefAttr.addAttribute(HTML.Attribute.HREF, url.toString());

        SimpleAttributeSet attrs = new SimpleAttributeSet();
        attrs.addAttribute(HTML.Tag.A, hrefAttr);
        StyleConstants.setUnderline(attrs, true);
        StyleConstants.setForeground(attrs, Color.blue);

        doc.insertString(doc.getLength(), text, attrs);
    }
    catch (BadLocationException e) {
        e.printStackTrace(System.err);
    }        
}

For whatever reason with the content type set to just basic text, i don't get this space issue.

Here are some pictures of it: https://i.sstatic.net/dpMBB.png

In the picture, the Name is inserted, then :, Then the rest of the text.

Edit: For whatever reason the JTextPane is automatically centering my InsertStrings.

Edit2: Is it possible to remove the margin between the HTML inserted strings? I've been trying everything for hours on end and simply can't find a solution. Only possible solution i can think of is reformatting the text via getText/setText every time i insert a string to insure no margins are added..


Solution

  • I ended up using just basic 'text' and using components for click detection.

    To fix this issue i was having with HTML, i simply used

    editorKit.insertHTML(doc, doc.getLength(), "html code", 0, 0, null);
    

    Rather then inserting my code directly usings doc's 'insertString'