首页 > 解决方案 > 在 JTextArea 中使用换行,将行换行到 JTextArea 中的特定位置

问题描述

我有一个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);

标签: javaswingchatjtextareamessenger

解决方案


我希望它从写 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);

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


推荐阅读