Krótka i rozczarowująca odpowiedź: Po prostu nie można tego zrobić w wiarygodny sposób.
Nieco dłuższa odpowiedź brzmi, że sama etykieta nie wie nawet, czy jest nadpisana, czy nie. Po zmianie rozmiaru etykiety za aktualizację wyświetlanego tekstu odpowiada klasa skóry (LabeledSkinBase
). Ta klasa używa klasy narzędziowej JavaFX do obliczania elipsoidalnego tekstu. Problem polega na tym, że odpowiednia metoda po prostu zwraca ciąg, który jest elipsoidalny, jeśli jest to wymagane przez wymiary etykiety. Skóra sama w sobie nigdy nie otrzymuje informacji o tym, czy tekst został faktycznie elipsoidowany, czy nie, po prostu aktualizuje wyświetlany tekst do zwróconego wyniku.
Możesz spróbować sprawdzić wyświetlany tekst klasy skóry, ale jest ona chroniona. Więc trzeba by zrobić, to podklasy LabelSkin
i zaimplementować coś takiego:
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());
}
}
przypadku korzystania z tej skóry dla ciebie etykiety, powinieneś być w stanie wykryć, czy tekst jest ellipsoided. Jeśli zastanawiasz się nad pętlą i refleksją: Java nie pozwoliła mi na dostęp do pola tekstowego w inny sposób, więc może to być silny wskaźnik, że naprawdę nie powinieneś tego robić ;-) Niemniej jednak: Działa!
Zastrzeżenie: Sprawdziłem tylko dla JavaFX 8
Bump, chcę o tym wiedzieć, jak dobrze ... – Warkst
Sprawdź również ten http://stackoverflow.com/a/35065526 –