使用文本内容计算 StyledText 高度
Calculate StyledText height using text content
给定 StyledText
,用 SWT.MULTI
和 SWT.WRAP
初始化,我需要根据内容的适当行数计算适当的高度提示。
在此图中,您可以看到当内容更改时编辑器的大小如何调整
计算要显示的行的代码如下
private int calcRealLinesCount() {
final int componentWidth = styledText.getSize().x;
final int dumbLinesCount = styledText.getLineCount();
int realLinesCount = 0;
for (int i = 0; i < dumbLinesCount; i++) {
final String lineText = styledText.getLine(i);
final Point lineTextExtent = styledTextGc.textExtent(lineText);
final double lines = lineTextExtent.x / (double) componentWidth;
realLinesCount += (int) Math.max(1D, Math.ceil(lines));
}
return Math.max(dumbLinesCount, realLinesCount);
}
然后使用行数来获得合适的高度
((GridData) layoutData).heightHint = realLinesCount * fontHeight;
但是,此代码不考虑自动换行,我想不出办法。
有任何想法吗?我可以用不同的方式做到这一点吗?
感谢 Greg 的 JFaceTextUtil#computeLineHeight
提示。
我不能直接使用它,但我至少了解了 JFace 如何满足我的需要。
以下是我现在用来获取 StyledText
行高的方法:
private int computeRealLineHeight(final int lineIndex) {
final int startOffset = styledText.getOffsetAtLine(lineIndex);
final String lineText = styledText.getLine(lineIndex);
if (lineText.isEmpty()) {
return styledText.getLineHeight(startOffset);
}
final int endOffset = startOffset + lineText.length() - 1;
final Rectangle textBounds = styledText.getTextBounds(startOffset, endOffset);
return textBounds.height;
}
给定 StyledText
,用 SWT.MULTI
和 SWT.WRAP
初始化,我需要根据内容的适当行数计算适当的高度提示。
在此图中,您可以看到当内容更改时编辑器的大小如何调整
计算要显示的行的代码如下
private int calcRealLinesCount() {
final int componentWidth = styledText.getSize().x;
final int dumbLinesCount = styledText.getLineCount();
int realLinesCount = 0;
for (int i = 0; i < dumbLinesCount; i++) {
final String lineText = styledText.getLine(i);
final Point lineTextExtent = styledTextGc.textExtent(lineText);
final double lines = lineTextExtent.x / (double) componentWidth;
realLinesCount += (int) Math.max(1D, Math.ceil(lines));
}
return Math.max(dumbLinesCount, realLinesCount);
}
然后使用行数来获得合适的高度
((GridData) layoutData).heightHint = realLinesCount * fontHeight;
但是,此代码不考虑自动换行,我想不出办法。
有任何想法吗?我可以用不同的方式做到这一点吗?
感谢 Greg 的 JFaceTextUtil#computeLineHeight
提示。
我不能直接使用它,但我至少了解了 JFace 如何满足我的需要。
以下是我现在用来获取 StyledText
行高的方法:
private int computeRealLineHeight(final int lineIndex) {
final int startOffset = styledText.getOffsetAtLine(lineIndex);
final String lineText = styledText.getLine(lineIndex);
if (lineText.isEmpty()) {
return styledText.getLineHeight(startOffset);
}
final int endOffset = startOffset + lineText.length() - 1;
final Rectangle textBounds = styledText.getTextBounds(startOffset, endOffset);
return textBounds.height;
}