【问题标题】:Use line wrap in JTextArea that wraps the line to a specific position in JTextArea在 JTextArea 中使用换行,将行换行到 JTextArea 中的特定位置
【发布时间】:2018-07-27 13:33:18
【问题描述】:

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

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

【问题讨论】:

  • 当文本到达文本区域的右边缘时,文本将自动换行。这将在打开包装时自动发生。否则,当找到换行符时,文本将移动到新行。所以如果你想强制换行,那么你需要手动添加换行符。
  • 是的,完全是@camickr,但我希望它从写在 rahul 下方的位置开始,而不是从文本区域的左边缘开始

标签: java swing chat jtextarea messenger


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 2014-01-23
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多