JTextPane换行

时间:2014-12-28 14:03:10

标签: java swing line word-wrap jtextpane

this question中,询问者说

  

当文本超出宽度

时,JTextPane确实有自动换行功能

情况似乎并非如此。

scrollPane = new JScrollPane();
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

this.contentPane.add(scrollPane);

txtrFghj = new JTextPane();
txtrFghj.setBorder(null);
txtrFghj.setContentType("text/html");
txtrFghj.setText(content);

scrollPane.setViewportView(txtrFghj);

在给定的代码摘录中,content的内容根本不会包装,它只是超出窗口的可见大小。如果窗口不够大,则无法完全看到长句。

如何实现换行?

我试过

txtrFghj.setSize(50,50);

但这根本不会改变任何行为。

2 个答案:

答案 0 :(得分:4)

您的代码中必须有其他内容阻止其正常工作。

这是一个小型演示示例,其代码相同,运行得很好:

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

public class TestLineWrap {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new TestLineWrap().initUI();
            }
        });

    }

    protected void initUI() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JTextPane editorPane = new JTextPane();
        editorPane.setContentType("text/html");
        editorPane
                .setText("<html>Some long text that cannot hold on a single line if the screen is too small</html>");
        JScrollPane scrollPane = new JScrollPane(editorPane);
        scrollPane
        .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        frame.add(scrollPane);
        frame.setSize(200, 400);
        frame.setVisible(true);
    }
}

答案 1 :(得分:1)

感谢Guillaume,我想出来了,虽然我花了三个小时才意识到:非常确实确实在这里工作,但字符串中断不起作用,可以在问题引用thread

我的JTextPane内容如下所示:

<html>
   <body>
    <br>
    <font color="red">bla bla bla bla</font>\r\n
    <u>someVeeeeeeeeeeeeeryLooooongString__WithOUTanySpacesInBetweeeeeeeeeeeeeeeeeeeeeeeeen</u>
    <b>more text</b>
    // ........ a lot of more HTML
    Some funny SENTENCE which is longer than JTextPane.getSize().width usually allows. This sentence was NOT LINE WRAPPED which made me ask the question.
   </body>
</html>

现在,如果 VeeeeryLooongString 没有扩展 JTextPane的宽度,那么SENTENCE将被换行。 一直以来,我都没有想到TextPane对象中的长字符串以及它如何影响整个换行行为。

删除这个giga-String为我解决了这个问题。

有关此主题的更多信息,请参阅详细信息question

现在我将尝试在JTextPanes中启用字符串换行,可以在引用的thread中再次找到更多信息。

编辑:可以完成字母换行,但似乎换行符<br>不再起作用了。对于给定的问题,最简单的解决方法是以禁用水平滚动条并将其设置为AS_NEEDED

scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);