2012-05-05 45 views
5

Tôi cần hiển thị liên kết vì vậy tôi đang sử dụng JTextPane với setContentType. Tuy nhiên, nội dung không bọc và không có cuộn giấy. Nội dung của JTextPane sẽ được trả lại từ nguồn cấp dữ liệu RSS. Dưới đây là đoạn code đầy đủ:JTextPane không hiển thị JScrollPane và không quấn văn bản

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

kết quả của tôi: Screenshot

Trả lời

6

tôi chỉ sử dụng mã của bạn và nó không gây ra bất kỳ vấn đề:

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:


Bạn phải ép buộc bằng cách nào đó chiều rộng của scrollPane. Trong ví dụ của tôi, nó được thực hiện hoàn toàn bằng cách thêm scrollpane vào khung nội dung của khung, mà theo mặc định sử dụng BorderLayout. Trong trường hợp của bạn, bạn đã sử dụng FlowLayout để phân bổ kích thước ưa thích của scrollpane, đó là kích thước ưa thích của JTextPane.

+0

+1 cho [sscce] (http://sscce.org/); Tôi đoán câu hỏi (unseen) [markup] (http://stackoverflow.com/q/2645834/230513) và [container] (http://stackoverflow.com/q/4702891/230513) cũng có thể là một yếu tố. – trashgod

+0

@Guillaume Polet +1 cho ví dụ này, tôi đã sử dụng nó để hiển thị rằng với kích thước vùng chứa sai thanh cuộn sẽ không xuất hiện. OP đang sử dụng một 'bảng điều khiển' nhưng chúng tôi không biết đủ về nó. –

+0

@trashgod, tôi đã bao gồm toàn bộ mã, vui lòng tư vấn! cảm ơn! –

0

Bạn đang sử dụng bảng điều khiển hoặc thứ gì đó xung quanh JScrollPane của bạn?

Lấy SSCC của @Guillaume Polet với kích thước ko hợp phá dụ sẽ không hoạt động:

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

tôi thấy thêm bạn JScrollPane của bạn để panel. Bạn có thể cung cấp việc tạo/sửa đổi bạn đã thực hiện trên bảng điều khiển đó và nơi bảng điều khiển này được sử dụng không?

+0

Tôi đã bao gồm mã đầy đủ, vui lòng tư vấn! –

Các vấn đề liên quan