2012-05-05 16 views
5

Necesito mostrar los enlaces, así que estoy usando JTextPane con setContentType. Sin embargo, el contenido no se ajusta y no hay desplazamiento. El contenido de JTextPane se devolverá desde una fuente RSS. Aquí está el código completo:JTextPane no muestra JScrollPane y no ajusta el texto

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

Mi resultado: Screenshot

Respuesta

6

acabo de utilizar su código y que no causa ningún problema:

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:


Tienes que forzar de alguna manera el ancho del scrollPane. En mi ejemplo, esto se hace implícitamente al agregar el panel de desplazamiento al panel de contenido del marco, que usa BorderLayout por defecto. En su caso, utilizó un FlowLayout que asigna el tamaño preferido del panel de desplazamiento que es aproximadamente del tamaño preferido del JTextPane.

+0

+1 para [sscce] (http://sscce.org/); Supongo que la pregunta (no vista) [markup] (http://stackoverflow.com/q/2645834/230513) y [contenedor] (http://stackoverflow.com/q/4702891/230513) también pueden ser un factor. – trashgod

+0

@ Guillaume Polet +1 para el ejemplo, lo usé para mostrar que con un tamaño de contenedor incorrecto, la barra de desplazamiento no aparecerá. El OP está usando un 'panel' pero no sabemos lo suficiente al respecto. –

+0

@trashgod, he incluido todo el código, por favor consejo! ¡Gracias! –

0

¿Está utilizando un panel o algo similar en su JScrollPane?

Tomando el SSCC de @Guillaume Polet con el tamaño innapropriate el ejemplo no funcionará:

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

Puedo ver su adición a su JScrollPane panel. ¿Puede proporcionar la creación/modificación que hizo en ese panel y dónde se usa este panel?

+0

He incluido el código completo, por favor consejo! –

Cuestiones relacionadas