I just used your code and this does not cause any problems:
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities
public class TestScrolling {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
initUI();
});
}
public static void initUI() {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100; i++) {
sb.append("loads loads loads loads of text here ");
}
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextPane newsTextPane = new JTextPane();
newsTextPane.setContentType("text/html");
newsTextPane.setEditable(false);
newsTextPane.setText(sb.toString());
JScrollPane scrollPane = new JScrollPane(newsTextPane);
scrollPane.setVerticalScrollBarPolicy(
javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
frame.add(scrollPane);
frame.setSize(300, 200);
frame.setVisible(true);
}
}
EDIT:
You need to somehow force the width of the scrollPane. In my example, this is done implicitly by adding scrollpane to the frame content area, which by default uses BorderLayout. In your case, you used FlowLayout, which highlights the preferred scroll size, which is the preferred JTextPane size.