如何将 TextArea 中的换行文本转换为多个以行分隔的字符串

How to get line-wrapped text from JTextArea into multiple line-seperated Strings

我有一个 JTextArea 具有以下属性:

textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);

在 GUI 中,文本正常换行,但是当我调用 textArea.getText(); 时,返回的是一行没有行分隔符的文本。

我的问题是如何将文本区域组件 'as it is in the GUI' 中的文本转换为 String 或字符串数​​组?

图片示例:

您可以通过 textArea.size.width 获取 JTextArea 的宽度,然后通过 textArea.getGraphics().getFontMetrics(textArea.getFont()) 获取 JTextArea 的字体规格,使用 FontMetrics 您可以计算特定字符串的宽度 - fontMetrics.stringWidth("Some string here").

然后您可以,例如,一个接一个地添加文本符号,直到超过 JTextArea 的宽度 - 并在您这样做时另起一行。

final String fullText = textArea.getText();
final int width = textArea.size.width;
final ArrayList lines = new ArrayList();
final FontMetrics fontMetrics = textArea.getGraphics().getFontMetrics(textArea.getFont());

StringBuilder sb = new StringBuilder(); 
for(final Character c : fullText) {
    sb.append(c);
    if(fontMetrics.stringWidth(sb.toString()) > width) { 
        sb.setLength(sb.length() - 1); 
        lines.add(sb.toString()); 
        sb = new StringBuilder(c.toString()); 
    }
}
lines.add(sb.toString()); 

阅读 javadoc - 总是内容丰富。

int lineCount = textArea.getLineCount();
String[] lines = new String[lineCount];
String text = textArea.getText();
for (int i = 0; i < lineCount; ++i) {
    int offset = textArea.getLineStartOffset(i);
    int offset2 = textArea.getLineEndOffset(i);
    lines[i] = text.substring(offset, offset2);
}

不确定这是否换行。