संक्षिप्त और निराशाजनक उत्तर: आप बस इसे विश्वसनीय तरीके से नहीं कर सकते हैं।
थोड़ा लंबा जवाब यह है कि लेबल खुद को यह भी नहीं जानता कि यह अतिप्रवाह है या नहीं। जब भी एक लेबल का आकार बदलता है, त्वचा वर्ग (LabeledSkinBase
) प्रदर्शित पाठ को अद्यतन करने के लिए ज़िम्मेदार है। हालांकि, यह वर्ग एलीपॉस्ड टेक्स्ट की गणना करने के लिए जावाएफएक्स यूटिल क्लास का उपयोग करता है। यहां समस्या यह है कि संबंधित विधि केवल एक स्ट्रिंग देता है जो लेबल के आयामों द्वारा आवश्यक होने पर ellipsoid है। त्वचा को कभी भी इस बारे में सूचित नहीं किया जाता है कि पाठ वास्तव में लंबित था या नहीं, यह केवल प्रदर्शित पाठ को प्रदर्शित किए गए पाठ को अपडेट करता है।
आप क्या कर सकते हैं त्वचा वर्ग के प्रदर्शित पाठ को जांचना है, लेकिन यह संरक्षित है।
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());
}
}
आप के लिए लेबल दें तो आप इस त्वचा का उपयोग करते हैं, तो आप पता लगाने के लिए अपने पाठ ellipsoided रहा है या नहीं सक्षम होना चाहिए: तो तुम क्या करने की आवश्यकता होगी LabelSkin
उपवर्ग, और ऐसा ही कुछ को लागू करने की है। यदि आप लूप और प्रतिबिंब के बारे में सोचते हैं: जावा ने मुझे अन्य क्षेत्रों से टेक्स्ट फ़ील्ड तक पहुंचने की अनुमति नहीं दी है, इसलिए यह एक मजबूत संकेतक हो सकता है कि आपको वास्तव में ऐसा नहीं करना चाहिए ;-) फिर भी: यह काम करता है!
अस्वीकरण: मैं केवल JavaFX 8 के लिए देख लिया है
स्रोत
2014-12-19 16:13:54
टक्कर, मैं इस रूप में अच्छी तरह जानना चाहता हूँ ... – Warkst
चेक भी इस http://stackoverflow.com/a/35065526 –