我有一个JTextArea
,其中包含以下属性:
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
在GUI中,文本被正常包装,但是当我调用textArea.getText();
时,返回一行没有行分隔符的文本行。
我的问题是如何将文本区域组件中的文本(因为它在GUI中)从String
或字符串数组中获取?
图片示例:
答案 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);
}
不确定这是否换行。