我的问题是我可以捕捉到 display "..." 的事件吗?
※我的意思是javaFX有API来判断内容的结尾是否替换为“...”?
事实上,我提出问题的原因是,现在我们的测试人员希望我们在一个控制器(如标签)上设置一个 TIP,如果它不足以显示的话。如果内容足够在控制器中显示,我们就不需要添加 TIP 了。
我的问题是我可以捕捉到 display "..." 的事件吗?
※我的意思是javaFX有API来判断内容的结尾是否替换为“...”?
事实上,我提出问题的原因是,现在我们的测试人员希望我们在一个控制器(如标签)上设置一个 TIP,如果它不足以显示的话。如果内容足够在控制器中显示,我们就不需要添加 TIP 了。
没有简单的方法可以判断文本是否已被剪切。
这个裁剪是在 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);
我们终于得到它了!
有一个 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 可以检测到是否发生了溢出。也许这将是一个很好的增强请求?你可以在这里归档: