2014-10-31 50 views
1

我正在使用JEditorPane來顯示一些文本。問題是我不能添加多行。無法在JEditorPane中添加多行

我的代碼現在

public class Window extends JFrame { 
private JEditorPane text = new JEditorPane(); 

public Window() { 
    setLayout(new BorderLayout()); 
    setTitle("test"); 
    setSize(500, 350); 
    setResizable(false); 
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    setLocationRelativeTo(null); 
    text.setEditable(false); 
    text.setContentType("text/html"); 

    text.setText("<b>Some bold text</b><br>"); 
    text.setText(text.getText() + "<br>Some text that is not bold but here <b>it is</b>"); 

    getContentPane().add(text, BorderLayout.CENTER); 
    setVisible(true); 
} 

}

當它處於同一直線上療法是沒有問題的,<br>創建一個新行。但是,如果它是在多個聲明中,我不能得到它的工作。

它需要在多個語句中,因爲每個語句稍後將成爲if條件。

我怎樣才能讓它做多行?

回答

1

問題是JEditorPane將文本包裝在<html><body> ... </body></html>元素中。例如,在執行時,執行以下操作:

text.setText("<b>Some bold text</b><br>"); 
System.out.println("text content:\n" + text.getText()); 

你得到這樣的輸出:

text content: 
<html> 
    <head> 

    </head> 
    <body> 
    <b>Some bold text</b><br> 
    </body> 
</html> 

因此,你需要或者存儲在前文中它被包裹之前,或插入</body>

前addtional內容

例如,在一個非常簡單的實現中,您可以將以下屬性和方法添加到您的類中:

private StringBuilder sb = new StringBuilder(); 

public String appendText(String text) { 
    return sb.append(text).toString(); 
} 

然後,你可以改變你以前的報表將文本設置爲:

... 
text.setText(appendText("<b>Some bold text</b><br>")); 
text.setText(appendText("<br>Some text that is not bold but here <b>it is</b>")); 
... 

導致所需的行爲:

enter image description here

+0

所以當我做'text.setText(文字。 getText + bla bla);'它不重置'JEditorPane'中的文本嗎? – Chax 2014-10-31 19:51:23

+0

不,它不會。相反,它將用#替換原文bla bla'。因此''之後的任何內容都將被忽略。 – Lolo 2014-10-31 19:53:56

+0

關於我應該如何進行的任何建議? – Chax 2014-10-31 19:55:14