java - 使用文本内容计算 StyledText 高度
问题描述
给定 a ,用andStyledText
初始化,我需要根据内容的适当行数计算适当的高度提示。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;
但是,此代码不考虑自动换行,我想不出办法。
有任何想法吗?我可以用不同的方式做到这一点吗?
解决方案
感谢格雷格的JFaceTextUtil#computeLineHeight
提示。
我不能直接使用它,但我至少了解了 JFace 如何满足我的需求。
以下是我现在用来获取 aStyledText
的行高的内容:
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;
}
推荐阅读
- postgresql - postgres启动后如何防止docker退出
- c# - 在前端保存一个从 api 检索为字节数组的 excel 文件
- windows - 捕获 Dos 窗口进度
- c# - 在 .NET 中使用 SHA 256 的 PBKDF2
- c# - 在运行时修改导致 InvalidProgramException 的 IL 代码
- swift - 如何在新故事板中将数据传递给 ViewController
- angularjs - 我正在使用 d3.v3.min.js 来显示诸如思维导图结构之类的数据。我有大量数据,因此显示数据非常不方便
- mysql - SQL - 使用时间戳列创建具有默认值的列
- java - 集成测试db h2
- reactjs - 动态生成 JSX