La risposta breve e deludente: semplicemente non è possibile farlo in modo affidabile.
La risposta leggermente più lunga è che l'etichetta stessa non sa nemmeno se è sorvolata o meno. Ogni volta che un'etichetta viene ridimensionata, la classe della pelle (LabeledSkinBase
) è responsabile dell'aggiornamento del testo visualizzato. Questa classe, tuttavia, utilizza una classe utils JavaFX per calcolare il testo ellissoide. Il problema qui è che il rispettivo metodo restituisce semplicemente una stringa che è ellissoide se ciò è richiesto dalle dimensioni dell'etichetta. La pelle stessa non viene mai informata se il testo era effettivamente ellissoide o meno, ma aggiorna solo il testo visualizzato al risultato restituito.
Quello che potresti provare è controllare il testo visualizzato della classe skin, ma è protetto. Così si avrebbe bisogno di fare è di sottoclasse LabelSkin
, e implementare qualcosa di simile:
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());
}
}
Se si utilizza questa pelle si etichetta, si dovrebbe essere in grado di rilevare se il testo è ellipsoided. Se ti chiedi del loop e del riflesso: Java non mi ha permesso di accedere al campo di testo con altri mezzi, quindi questo potrebbe essere un forte indicatore che non dovresti davvero farlo ;-) Tuttavia: Funziona!
Disclaimer: Ho controllato solo per JavaFX 8
fonte
2014-12-19 16:13:54
Bump, voglio sapere anche questo ... – Warkst
controllare anche questo http://stackoverflow.com/a/35065526 –