我的问题是我可以抓住显示事件“......”吗?
※我的意思是javaFX有一个API来判断内容的结尾是否被替换为“...”?
事实上,我的问题的原因是,现在我们的测试人员希望我们在一个控制器(如Label)上设置TIP,如果它只是不足以显示。如果内容足以在控制器中显示,那么我们不需要添加提示。
答案 0 :(得分:7)
没有简单的方法来判断文本是否已被剪裁。
这个剪辑是在Labeled对象上完成的,在LabeledSkinBase的实现中,我们可以看到剪切的所有逻辑都被委托给computeClippedText(),它返回一个(剪切的或不剪切的)字符串:
result = Utils.computeClippedText(font, s, w, truncationStyle, ellipsisString);
[...]
text.setText(result);
此方法没有获得对Labeled对象的引用,也没有触发任何事件,因此我们唯一的机会是看看computeClippedText()是否决定剪辑是为了查看实际的Text节点( text ),其中包含显示的实际文本。由于Labeled没有公开这个节点,我们不得不求助于进行查找:
String originalString = myLabeled.getText();
Text textNode = (Text) myLabeled.lookup(".text"); // "text" is the style class of Text
String actualString = textNode.getText();
contentHasBeenClipped = originalString.notEquals(actualString);
我们有它!
答案 1 :(得分:0)
有一个用于指定超限文本样式的API:
http://docs.oracle.com/javafx/2/api/javafx/scene/control/Labeled.html#textOverrunProperty
http://docs.oracle.com/javafx/2/api/javafx/scene/control/Labeled.html#ellipsisStringProperty
http://docs.oracle.com/javafx/2/api/javafx/scene/control/Labeled.html#wrapTextProperty
但是我不知道有任何API可以检测到发生了溢出。也许这会是一个很好的增强请求?你可以在这里提交: