Search code examples
javaswingjtextpane

Not getting scrollbars in JTextPane


i am not getting the vertical scrollbars. to scroll the JTextPane. i am using JPanel to show the JTextPane inside of JScrollPane. here is the code . please review it. thanks.

these is the image of output i am getting.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class TestWithHtml
{
    JTextPane textpane;
    JPanel panel;
    JFrame frame;
    JScrollPane scrollpane;

    TestWithHtml()
    {
        frame = new JFrame("Text With HTML");
        frame.setSize(200,300);

        panel = new JPanel(new BorderLayout());
        panel.setBounds(0,0,200,300);

        textpane = new JTextPane();
        Dimension size = new Dimension(200,300);
        //frame.getContentPane()
        scrollpane = new JScrollPane(textpane);
        panel.add(scrollpane, BorderLayout.CENTER);
        textpane.setSize(size);
        scrollpanel.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

        panel.add(textpane);
        frame.add(panel);
        textpane.setEditable(false);
        textpane.setContentType("text/html");
        textpane.setText("<b> hry </b>");
        textpane.setText("<p><b>Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. Here Is some text. </b></p>");

        frame.setVisible(true);
    }

    public static void main(String args[])
    {
        new TestWithHtml();
    }
}

Solution

  • scrollpane = new JScrollPane(textpane);
    panel.add(scrollpane, BorderLayout.CENTER);
    textpane.setSize(size);
    scrollpane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    panel.add(textpane);
    frame.add(panel);
    

    You create the scroll pane using the text pane which is correct.

    But then you add the text pane to the panel. This won't work because a component can only have a single parent, so the text pane is removed from the scroll pane.

    So get rid of the panel and just add the scroll pane to the frame.

    Also, there is no need for the setSize(...) since the layout manager of the scroll pane will determine the size of the text pane.

    So your basic code should just be:

    scrollpane = new JScrollPane(textpane);
    scrollpane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    frame.add(scrollpane);