在Java中如何使溢出文本转到下一行

时间:2012-06-09 19:36:49

标签: java

我有一个很长的字符串,它不适合我所说的JPanel。 text是记录器而不是JPanel宽度。我不能把“\ n”放到字符串中来打破字符串,实际上我无法控制字符串的长度和内容。它用户输入了字符串。我想要做的是当我将文本放在JPanel上时,我希望任何不适合JPanel的文本流入下一行。

有点难以解释。如果您需要更多详细信息,请与我们联系。

谢谢

3 个答案:

答案 0 :(得分:1)

从快速谷歌搜索我已经读过,从逻辑上讲,所有操作系统都有不同的换行符,并且由于Java是独立于平台的,您需要先使用以下方法找到相对分隔符:

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

然后将您的字符串与lineSeparator

连接起来

例如:

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

这种方法没有经过我的测试和测试,只是我研究的结果。

至于处理溢出文本,我的个人经验是在字符离开框架之前找到字符的最大长度,然后添加lineSeparator

答案 1 :(得分:1)

将文字放在<html></html>标签内可以解决问题。长行将自动换行。

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

答案 2 :(得分: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();
            }
        });
    }
}