2012-06-09 26 views
0

我有一個很長的字符串,它不適合JPanel我把它。 文本比JPanel寬度記錄器。我不能把字符串「\ n」打破字符串,實際上我沒有控制字符串的長度和內容。它用戶輸入的字符串。我想要做的是,當我將文本放在JPanel上時,我想讓任何不適合JPanel的文本流入下一行。在Java中如何使溢出文本轉到下一行

其種類很難解釋。如果您需要更多詳細信息,請告訴我。

謝謝

+0

正在使用什麼來顯示文本?顯示一些代碼。 –

回答

1

嘗試使用JTextPane代替它,它將爲您處理wordwrapping。

import java.awt.Dimension; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextPane; 
import javax.swing.SwingUtilities; 

public class Wordwrap extends JFrame { 

    public Wordwrap() { 
     String s = "I have a long string which doesn't fit to the JPanel i am putting it. text is logger than the JPanel width. I can not put \n to the string to break the string, in fact i don't have the control over the length and content of the string. It user inputted string. What i want to do is when i am putting the text on JPanel i want any text that doesn't fit in to the JPanel to flow in to the next Line."; 

     JTextPane textPanel = new JTextPane(); 
     textPanel.setText(s); 
     textPanel.setPreferredSize(new Dimension(500, 100)); 

     JPanel p = new JPanel(); 
     p.add(textPanel); 
     getContentPane().add(p); 
     this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
     setVisible(true); 
     pack(); 
    } 

    public static void main(String[] args) throws Exception { 
     SwingUtilities.invokeAndWait(new Runnable() { 
      @Override 
      public void run() { 
       new Wordwrap(); 
      } 
     }); 
    } 
} 
+0

也喜歡這個。謝謝 – printfmyname

1

從快速谷歌搜索我讀過,從邏輯上講,所有操作系統的都不同換行符和Java是獨立於平臺,你需要使用首先找到的相對分離:

lineSeparator = (String) java.security.AccessController.doPrivileged(new sun.security.action.GetPropertyAction("line.separator")); 

,然後拼接你的字符串lineSeparator

例如:

JLabel label = new JLabel("Hello"+lineSeparator+"world"); 

這個方法是未經過測試和未經測試的,僅僅是我的研究結果。

至於處理四溢的文字,我個人的經驗是要找到字符的最大長度它超出框架之前,然後添加在lineSeparator

+0

問題是用戶正在輸入測試。當他們輸入文字並按提交。我把這個文本放在面板上。 現在我不知道字符串有多長。例如,當你在css中有一些叫做overflowX和溢出(類似的東西)的時候。當overflowX啓用時會發生什麼,如果用戶輸入的文本不適合它駐留的容器的寬度,則它將繼續打印到下一個線。 – printfmyname

+0

這正是我需要的 – printfmyname

+0

好吧,我不是一個狂熱的Java用戶,所以我不能提供太多的幫助,但另一個研究的快速位置表明你想要計算行長度並在X個字符後面添加'lineSeparator '。我會用for循環來計算'string.length()',但是修改字符串以包含'lineSeparator'我無法提供幫助。 – Timmy

1

把裏面<html></html>標籤文本會做的伎倆。長行將被自動換行。

JLabel label = new JLabel("<html>"+ reallyLongString + "</html>"); 
label.setPreferredSize(new Dimension(1, 1); 
+0

這是一個壞主意。如果文本包含不等式「k <3」會怎麼樣? – nes1983

+0

謝謝,這個工程,如果你知道更多的方法,請讓我知道。 – printfmyname

+0

@ nes1983你是什麼意思是不等式「k <3」,會發生什麼。 – printfmyname

相關問題