2012-05-05 18 views
5

Bağlantıları göstermem gerekiyor, bu yüzden setContentType ile JTextPane kullanıyorum. Ancak, içerik sarılmıyor ve kaydırma yok. JTextPane içeriği bir RSS beslemesinden döndürülecektir. İşte tam kodu:JTextPane JScrollPane göstermiyor ve Sarmalamıyor

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

Benim sonucu: Screenshot

cevap

6

Sadece kodunuzu kullanılan ve herhangi bir soruna neden olmaz:

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

DÜZENLEME:


Bir şekilde scrollPane'in genişliğini zorlamak zorundasınız. Örneğimde, kaydırma bölmesini çerçevenin içerik bölmesine ekleyerek, varsayılan olarak BorderLayout öğesini kullanarak örtülü olarak yapılır. Sizin durumunuzda, JTextPane'in tercih edilen boyutuyla ilgili olan, kaydırma bölmesinin tercih edilen boyutunu ayıran bir FlowLayout kullandınız.

+0

+1 [sscce] için (http://sscce.org/); Sanırım soru (görünmeyen) [işaretleme] (http://stackoverflow.com/q/2645834/230513) ve [konteyner] (http://stackoverflow.com/q/4702891/230513) da olabilir bir faktör. Örnek için – trashgod

+0

@Guillaume Polet +1, yanlış konteyner boyutu ile kaydırma çubuğunun görünmeyeceğini göstermek için kullandım. OP bir 'panel' kullanıyor ama biz bu konuda yeterince bilgimiz yok. –

+0

@trashgod, Bütün kodu ekledim, lütfen önerin! Teşekkürler! –

0

JScrollPane'iniz etrafında bir panel veya başka bir şey mi kullanıyorsunuz?

örnek çalışmaz Uygun Olmayan boyutu ile @Guillaume Polet ait SSCC çıkarak:

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

Ben senin panel için JScrollPane ekleyerek bkz. Bu panelde oluşturduğunuz oluşturma/değiştirme işlemini ve bu panelin kullanılmasını sağlayabilir misiniz?

+0

Tüm kodu ekledim, lütfen önerin! –