在JTextArea中使用换行,将换行包装到JTextArea中的特定位置

时间:2018-07-27 13:33:19

标签: java swing chat jtextarea messenger

我有一个JTextArea,它从另一个JTextArea中拾取文本,并显示该文本,如下图所示:

https://i.stack.imgur.com/xOEdR.png

我希望JTextArea像上一幅图像一样包装rahul的写入行。 下面是我较小的JTextArea中的代码,其中文本显示在较大的JTextArea中。

    SimpleDateFormat sdf=new SimpleDateFormat("HH:mm");

    String str=MainFrame.un+" ("+sdf.format(new Date())+")  :"+txtSend.getText();

    DataServices.send(runm+":"+str); // for sending this to its socket

    txtView.append("\n\n\t\t\t\t\t"+str);
    txtSend.setText("");
    txtSend.requestFocus(true);

1 个答案:

答案 0 :(得分:0)

  

我希望它从rahul写在下面的位置开始,而不是从文本区域的左边缘开始

JTextArea不支持此功能。 JTextArea用于显示简单文本。

您可以使用JTextPane。它允许您控制文本的属性,并且属性之一可以是左缩进。因此,您可以为单行设置段落属性,使其缩进特定数量的像素。

因此,不必使用制表符对文本进行缩进,而只需在添加文本行时设置左缩进即可。

还请注意,JTextPane没有实现append方法,因此您需要通过使用以下命令将文本直接添加到Document中来创建自己的文本:

textPane.getDocument.insertString(...);

所以基本逻辑是:

StyledDocument doc=(StyledDocument)textPane.getDocument();
doc.insertString(...);
SimpleAttributeSet attrs = new SimpleAttributeSet();
//StyleConstants.setFirstLineIndent(attrs, 50);
StyleConstants.setLeftIndent(attrs, 50);
doc.setParagraphAttributes(0,doc.getLength(),attrs, false);

这将更改您刚刚添加到文本窗格的文本行的缩进。