JTextPane不显示JScrollPane,也不显示文本 [英] JTextPane doesn't display JScrollPane and doesn't Wrap Text

查看:184
本文介绍了JTextPane不显示JScrollPane,也不显示文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要显示链接,所以我正在使用带有setContentType的JTextPane。但是,内容不会换行,也没有滚动。 JTextPane的内容将从RSS源返回。这是完整的代码:

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 from a RSS feed. Here's the full code:

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

我的结果:

My result:

推荐答案

我只是使用了你的代码,它不会导致任何问题:

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

编辑:

你必须以某种方式强制使用scrollPane的宽度。在我的示例中,它通过将滚动窗格添加到框架的内容窗格来隐式完成,默认情况下使用BorderLayout。在您的情况下,您使用了一个FlowLayout,它分配了滚动窗格的首选大小,该大小与JTextPane的首选大小有关。

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.

这篇关于JTextPane不显示JScrollPane,也不显示文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆