2013-10-02 48 views
0

我已經編寫了一個示例應用程序,它由JTextPane和一個打印出文本窗格內容的按鈕組成。文本窗格的內容類型設置爲「text/html」。防止HTML JTextPane格式化文本輸入

當我輸入一些文本並將其打印輸出到控制檯時,文本會自動包裝。

例如,給出下面的輸入:

Watercress shallot radish chickweed bitterleaf bush tomato salad garlic beet greens black-eyed pea green bean salsify bell pepper. Catsear celery green bean broccoli rabe spring onion tatsoi prairie turnip wattle seed cucumber burdock. Chickweed cucumber chickpea bush tomato wakame taro fava bean arugula catsear azuki bean. 

輸出出來這樣

Watercress shallot radish chickweed bitterleaf bush tomato salad garlic 
beet greens black-eyed pea green bean salsify bell pepper. Catsear celery 
green bean broccoli rabe spring onion tatsoi prairie turnip wattle seed 
cucumber burdock. Chickweed cucumber chickpea bush tomato wakame taro fava 
bean arugula catsear azuki bean. 

有沒有辦法保存輸入文本的格式?我打算將輸入存儲在數據庫中,因此我將用<br>替換換行符,但文本窗格會自動插入自己的換行符。

如果有替代解決方案,我可以嘗試這些,但大多數情況下,我希望能夠在允許用戶修改輸入的同時顯示HTML。

以下是樣本代碼。你應該能夠編譯並運行它。

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextPane; 

public class TextPaneTest extends JFrame { 

    private JTextPane textPane = null; 

    public static void main(String args[]) { 
     new TextPaneTest(); 
    } 

    public TextPaneTest() { 

     // Main panel 
     JPanel panel = new JPanel(); 
     panel.setLayout(new BorderLayout()); 

     // Panel holding text 
     JPanel textPanel = new JPanel(); 
     textPanel.setLayout(new BorderLayout()); 

     // Text pane 
     textPane = new JTextPane(); 
     textPane.setContentType("text/html"); 

     // Button 
     JButton button = new JButton(); 
     button.setText("Print Text"); 
     button.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
       String text = textPane.getText(); 
       text = text.substring(text.indexOf("<body>") + 6, text.indexOf("</body>")); 
       System.out.println(text); 
      } 
     }); 

     textPanel.add(textPane); 
     panel.add(textPanel, BorderLayout.CENTER); 
     panel.add(button, BorderLayout.SOUTH); 

     // Add everything to the frame 
     this.add(panel); 
     this.setSize(1000, 500); 
     setVisible(true); 
    } 
} 
+0

所以..因爲你打算以編程方式插入換行符,爲什麼不使用設置爲'text/plain'的'JTextArea'或'JTextPane'? –

+0

對不起,如果有任何混淆。新行不會以編程方式插入;任何由用戶插入的內容都將被轉換爲'
'。 – MxyL

+0

*「新行不會以編程方式插入;」*確定,但它不會改變我的建議。只需交換用戶輸入的換行符,無論實際需要什麼。 –

回答

1
textPane.setText("<html><head><style type='text/css'>" 
      + "body{white-space:nowrap;}" 
      + "</style></head><body>"); 

    JScrollPane scrollPane = new JScrollPane(textPane); 
    scrollPane.setHorizontalScrollBarPolicy(
     ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
    //Remove: textPanel.add(textPane); 
    textPanel.add(scrollPane); 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

的HTML CSS去除包裝。仍然有一個水平滾動條。 此外,您可能可以使用EXIT_ON_CLOSE,特別是在IDE中運行時。