2012-05-06 25 views
1

我在我的JTextPanel中顯示RSS提要。顯示的結果不會轉到新行。我如何在JTextPane中插入\ n?謝謝!JTextPane不會轉到新行?

writeNews類:

public String writeNews() 
     { 
      String result = ""; 

      try 
     {    
      DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
      URL u = new URL("http://thestar.com.my.feedsportal.com/c/33048/f/534600/index.rss"); 

      Document doc = builder.parse(u.openStream()); 
      NodeList nodes = doc.getElementsByTagName("item"); 

      for(int i=0;i<nodes.getLength();i++) 
      {     
       Element element = (Element)nodes.item(i);   

       result += "\nTitle: " + getElementValue(element,"title");    
       result += "\nLink: " + getElementValue(element,"link"); 
       result += "\nPublish Date: " + getElementValue(element,"pubDate"); 
       result += "\nDescription: " + getElementValue(element,"description"); 

       System.out.println("Title: " + getElementValue(element,"title")); 
       System.out.println("Link: " + getElementValue(element,"link")); 
       System.out.println("Publish Date: " + getElementValue(element,"pubDate")); 
       System.out.println("Description: " + getElementValue(element,"description")); 
       System.out.println(); 

      } 
     } 

     catch(Exception ex) 
     { 
      ex.printStackTrace(); 
     } 

     return result; 
    } 

而結果顯示在一個簡單的JTextPane:

public void news() 
    { 
     news = new JPanel(new GridLayout()); 
     news.setBackground(SystemColor.inactiveCaptionBorder); 

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

     JScrollPane scrollPane = new JScrollPane(newsTextPane);  
     news.add(scrollPane); 

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

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

    } 

的JTextPane查看: JTextPane View

控制檯視圖: Console View

+0

側面說明其他功能:最好不要每【JAVA換行符使用'\ N'最佳實踐](http://www.javapractices.com/topic/TopicAction.do?Id=38)。 – kentcdodds

+0

作爲該評論的一部分,我應該說一個更好的選擇是有這樣的東西:'公共靜態字符串新行= System.getProperty(「line.separator」);'和任何你想要一個換行符,你可以只是添加'newline'變量。祝你好運! – kentcdodds

+0

@kentcdodds感謝您的提示! –

回答

2

這裏是一個可能的解決方法,

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTextPane; 

public class TestLineBreak { 

    public static void main(String[] args) { 
     StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < 10; i++) { 
      sb.append("Text goes here <br>"); //<br> tag to insert line breaks 
     } 
     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); 
     frame.add(scrollPane); 
     frame.setSize(300, 200); 
     frame.setVisible(true); 
    } 
} 
+0

謝謝sanjay!
是我需要的! –

2
result += "Title: " + getElementValue(element,"title");    
result += "Link: " + getElementValue(element,"link"); 
result += "Publish Date: " + getElementValue(element,"pubDate"); 
result += "Description: " + getElementValue(element,"description"); 

當您創建String時,永遠不會使用新行。將換行符預先添加到每行的開頭(除第一行之外)或將換行符附加到每行的末尾(除最後一行之外)。

+0

我做了更改。只有當我禁用setContentType(「text/html」)時,\ n纔有效。我需要顯示鏈接,所以我需要保持這一點。它仍然不會到下一行。 –

+1

@LilyT由於您使用HTML,爲什麼不使用'
'? – Jeffrey

+0

謝謝Jeffrey!這解決了它! –

-1

夥伴.. 上述2個答案工作的方式在邏輯上是正確的,但我們應該幫助從內置類和功能,Java提供。

您也可以購買以下方式,如果你要添加類似於質疑

看到http://docs.oracle.com/javase/7/docs/api/javax/swing/text/DefaultEditorKit.html

+1

請在回答中自行添加更多信息。此外,您不能參考「以上答案」,因爲答案的出現順序可能會因不同的用戶而有所不同。 –