JTextPane doesn't display JScrollPane and doesn't Wrap Text

后端 未结 2 608
一生所求
一生所求 2020-12-11 19:06

I need to display links so I\'m using JTextPane with setContentType. However, the content doesn\'t wrap and there\'s no scroll. The content of JTextPane will be returned fro

相关标签:
2条回答
  • 2020-12-11 19:29

    Are you using a panel or something around your JScrollPane?

    Taking the sscc of @Guillaume Polet with innapropriate size the example won't work :

    import java.awt.Dimension;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextPane;
    
    public class TestScrolling {
    
        public static void main(String[] args) {
            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);
            JPanel pan = new JPanel();
            pan.setMinimumSize(new Dimension(500,500));
            pan.add(scrollPane);
            frame.add(pan);
            frame.setSize(500, 500);
            frame.setVisible(true);
        }
    }
    

    I see your adding your JscrollPane to panel. Can you provide the creation/modification you made on that panel and where this panel is used?

    0 讨论(0)
  • 2020-12-11 19:36

    I just used your code and it 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 have to force somehow the width of the scrollPane. In my example it is done implicitly by adding the scrollpane to the content pane of the frame, which by default uses the BorderLayout. In your case, you used a FlowLayout which allocates the preferred size of the scrollpane which is about the preferred size of the JTextPane.

    0 讨论(0)
提交回复
热议问题