如何将来自JTextArea的换行文本转换为多行分隔的字符串

时间:2015-07-20 14:44:40

标签: java swing jtextarea word-wrap linewrap

我有一个JTextArea,其中包含以下属性:

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

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

我的问题是如何将文本区域组件中的文本(因为它在GUI中)从String或字符串数​​组中获取?

图片示例:

enter image description here

2 个答案:

答案 0 :(得分:2)

您可以通过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()); 

答案 1 :(得分:1)

阅读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);
}

不确定这是否换行。