【问题标题】:How to set different lines on a JTextPane?如何在 JTextPane 上设置不同的行?
【发布时间】:2015-11-24 04:58:52
【问题描述】:

所以说我有这个JTextPane

JTextPane list = new JTextPane();
list.setEditable(false);

我有以下字符串数组:

        String[] pop;
        List<String>popp = new ArrayList<>();
        for(String c : Main.population){
            popp.add(c);
        }
        pop = new String[popp.size()];
        int i = 0;
        for(String e : popp){
            pop[i] = e;
            i++;
        }

我想在 JTextPane 上显示字符串数组:

  list.setText(pop[0] +  pop[1] + pop[2]);

这将在一行中显示字符串,当下一行没有更多空间时。

我怎样才能使每个字符串都在 JTextPane 的单独一行中?

【问题讨论】:

    标签: java arrays swing jtextpane


    【解决方案1】:

    例如,您可以使用 StringJoiner 设置来使用 \n 换行

    String[] pop = ...;
    StringJoiner joiner = new StringJoiner("\n");
    for (String text : pop) {
        joiner.add(text);
    }
    

    然后就用

    list.setText(joiner.toString());
    

    【讨论】:

    • 谢谢,我会尽快接受。我还有另一个问题如何“打包”JTextPane(添加所有文本后,根据行数设置 JtextPane 的大小)?
    • 你不能,不是真的。 preferredSize 应该计算出它的宽度和高度满足文本的最低要求,所以你真的不需要在前面做任何事情
    • 只是一个小精度:我认为preferredSize使用当前宽度并评估文本所需的高度。
    • @Sharcoux 如果是这样,那么文本应该换行,但它不会,它将继续直到遇到换行符
    • 文本在 JTP 中换行。尝试使用 Java 7 使用 pastebin.com/TvNwaC6u。实际上,我们都是对的:getPreferredSize() 返回最长文本行的宽度,没有中断,以及在给定当前宽度的情况下文本将具有的高度。
    【解决方案2】:

    你需要在每行之间添加一个换行符:

    list.setText(pop[0] + "\n" + pop[1] + "\n" + pop[2]);
    

    或者更好的方法是直接更新Document

    Document doc = textPane.getDocument();
    
    for (String text: pop)
        doc.insertString(pop[0] + "\n", doc.getLength(), null);
    

    无需先创建包含所有文本的String。这将占用更多内存。一次添加一行允许您添加任意数量的行。

    这种方法本质上就是JTextArea.append(...) 方法的作用。

    【讨论】:

      【解决方案3】:

      java 中的\n 转义字符将允许您分隔行。因此,您可以为数组中的每个元素添加该字符。

       pop[i] = e + "\n";
      

      【讨论】:

        【解决方案4】:

        在 Java 8 中,您可以这样做:

        list.setText(String.join("\n",pop));
        

        【讨论】:

          猜你喜欢
          • 2013-08-14
          • 1970-01-01
          • 2011-06-07
          • 2012-08-17
          • 2015-10-13
          • 1970-01-01
          • 2011-08-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多