我试图可靠地计算给定宽度的 JTextArea 中的行数(包括换行和换行的行数)。我正在使用此信息来设置 GUI 中其他组件的高度(例如,对于 n 行,设置组件的 n*height)。
我偶然发现了这个解决方案(转载如下),但这有一个问题。如果该行上没有太多文本,有时它会错过一行。例如,如果一个宽度为 100 的 JTextArea 有 3 行文本,而在第 3 行它只有大约 15 的文本宽度,那么它将只计算 2 行而不是 3 行。
public class MyTextArea extends JTextArea {
//...
public int countLines(int width) {
AttributedString text = new AttributedString(this.getText());
FontRenderContext frc = this.getFontMetrics(this.getFont()).getFontRenderContext();
AttributedCharacterIterator charIt = text.getIterator();
LineBreakMeasurer lineMeasurer = new LineBreakMeasurer(charIt, frc);
lineMeasurer.setPosition(charIt.getBeginIndex());
int noLines = 0;
while (lineMeasurer.getPosition() < charIt.getEndIndex()) {
lineMeasurer.nextLayout(width);
noLines++;
}
System.out.print("there are " + noLines + "lines" + System.getProperty("line.separator"));
return noLines;
}
}
知道可能导致此问题的原因是什么吗?在 JTextArea 中计算行是否有任何替代方法?谢谢。