gpt4 book ai didi

javafx-2 - 测试标签溢出

转载 作者:行者123 更新时间:2023-12-04 02:21:15 24 4
gpt4 key购买 nike

我有一个多行标签,其文本可能会溢出。如果这样做,我想减小字体大小,直到它没有超出,或者直到它达到某个最小大小。这有望使标签更改大小,直到整个字符串可见。

我的问题是我不知道如何测试文本是否溢出。我已尝试测试以查看标签的文本是否以椭圆字符串结尾,但我相信椭圆在技术上并未添加到标签的 textProperty 中。那么有谁知道测试这个的好方法吗?

最佳答案

简短而令人失望的答案:您根本无法以可靠的方式做到这一点。

稍微长一点的答案是,标签本身甚至不知道它是否溢出。每当调整标签大小时,皮肤类 ( LabeledSkinBase ) 负责更新显示的文本。然而,这个类使用 JavaFX utils 类来计算椭圆形文本。这里的问题是,如果标签的尺寸需要,相应的方法只返回一个椭圆形的字符串。皮肤本身永远不会被告知文本是否实际上是椭圆形的,它只是将显示的文本更新为返回的结果。

您可以尝试检查皮肤类的显示文本,但它是 protected 。所以你需要做的是子类化 LabelSkin ,并实现类似的东西:

package com.sun.javafx.scene.control.skin;

import java.lang.reflect.Field;

import javafx.scene.control.Label;

@SuppressWarnings("restriction")
public class TestLabel extends LabelSkin {
private LabeledText labelledText;

public TestLabel(Label label) throws Exception {
super(label);

for (Field field : LabeledSkinBase.class.getDeclaredFields()) {
if (field.getName().equals("text")) {
field.setAccessible(true);
labelledText = (LabeledText) field.get(this);
break;
}
}
}

public boolean isEllipsoided() {
return labelledText != null && labelledText.getText() != null && !getSkinnable().getText().equals(labelledText.getText());
}
}

如果你为你的 Label 使用这个皮肤,你应该能够检测你的文本是否是椭圆形的。如果您对循环和反射感到疑惑:Java 不允许我通过其他方式访问文本字段,因此这可能是一个强有力的指示,表明您确实不应该这样做 ;-) 尽管如此:它有效!

免责声明:我只检查了 JavaFX 8

关于javafx-2 - 测试标签溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17621862/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com