Вопрос по swing, java – JTextPane не отображает JScrollPane и не переносит текст

5

Мне нужно отобразить ссылки, поэтому я использую JTextPane с setContentType. Тем не менее, содержимое не переносится, и прокрутки нет. Содержимое JTextPane будет возвращено из RSS-канала. Вот полный код:

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

class Main extends JFrame
{
    JFrame frame;
    JTabbedPane tabbedPane;
    JPanel home, news;      

    public Main()
    {
        setTitle("My Title" ); 
        setSize( 900, 600 ); 
        setLocationRelativeTo(null); 
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

        home(); 
        news(); 

        tabbedPane = new JTabbedPane(); 
        tabbedPane.addTab( " Home", home ); 
        tabbedPane.addTab( "News", news ); 

        JPanel framePanel = new JPanel();
        framePanel.setLayout(new BorderLayout());       
        framePanel.add( tabbedPane, BorderLayout.CENTER );
        getContentPane().add( framePanel );     

    }


    public void home() 
    {       
        home = new JPanel();
        // some stuffs here
    }


    public void news()
    {
        news = new JPanel();

        JTextPane newsTextPane = new JTextPane(); 
        newsTextPane.setContentType("text/html");
        newsTextPane.setEditable(false); 

        JScrollPane scrollPane = new JScrollPane(newsTextPane);     
        scrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        news.add(scrollPane);   

        RSS reader = RSS .getInstance();
        reader.writeNews();             

        String rssNews = reader.writeNews();
        newsTextPane.setText(rssNews);
    }   

    public static void main( String args[] )
    {

        RSS reader = RSS.getInstance();
        reader.writeNews();

        Main mainFrame  = new Main();
        mainFrame.setVisible( true );   
        mainFrame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        }
}

Мой результат: Screenshot

Ваш Ответ

2   ответа
0

Принимая sscc @Guillaume Polet с неподходящим размером, пример не сработает:

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);
    }
}

Я вижу, что вы добавляете свой JscrollPane вpanel, Можете ли вы предоставить создание / изменение, которое вы сделали на этой панели и где эта панель используется?

Error: User Rate Limit Exceeded Lily S
6

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);
     }
}

РЕДАКТИРОВАТЬ:

Вы должны как-то заставить ширину полосы прокрутки. В моем примере это делается неявно, добавляя область прокрутки к панели содержимого фрейма, который по умолчанию использует BorderLayout. В вашем случае вы использовали FlowLayout, который выделяет предпочтительный размер полосы прокрутки, который соответствует предпочтительному размеру JTextPane.

Error: User Rate Limit Exceedednews = new JPanel(new BorderLayout());
Error: User Rate Limit Exceedednews = new JPanel(new GridLayout())Error: User Rate Limit ExceededInitial Threads.
Error: User Rate Limit ExceededpanelError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Lily S
Error: User Rate Limit ExceededsscceError: User Rate Limit ExceededmarkupError: User Rate Limit ExceededcontainerError: User Rate Limit Exceeded

Похожие вопросы