2013-07-12 24 views
7

Metninde aşırı yazma şansı olan çok satırlı bir etiket var. Bunu yaparsa, yazı tipi boyutunu taşmadıkça veya minimum boyuta ulaşana kadar azaltmak istiyorum. Bu, umarız ki etiket, tüm teller görünene kadar boyutu değiştirir.Etiket taşması testi için test

Sorunum, metnin taşması olup olmadığını görmek için sınamanın nasıl emin olacağımı bilmiyorum. Etiketin metninin elips dizgisiyle bitip bitmediğini görmek için sınama denedim, ancak elipsin etiketin metninin metnine teknik olarak eklenmediğine inanıyorum. Bunun için herkes test etmenin iyi bir yolunu biliyor mu?

+0

Bump, ben de bunu bilmek istiyorum JavaFX 8 kontrol ettiğim – Warkst

+0

Kontrol de bu http://stackoverflow.com/a/35065526 –

cevap

3

Kısa ve hayal kırıklığı yaratan cevap: Bunu yalnızca güvenilir bir şekilde yapamazsınız.

Biraz daha uzun cevap, etiketin kendisinin taşıp taşmadığını bile bilmemesidir. Bir etiket yeniden boyutlandırıldığında, görüntülenen metnin güncellenmesinden cilt sınıfı (LabeledSkinBase) sorumludur. Bununla birlikte, bu sınıf, elipsoyalı metni hesaplamak için bir JavaFX utils sınıfı kullanır. Buradaki problem, ilgili yöntemin, etiketin boyutları tarafından isteniyorsa, elipsoid olan bir dizgiyi döndürmesidir. Cildin aslında metnin elipsozize olup olmadığı hakkında hiçbir zaman bilgi sahibi olmaz, sadece görüntülenen metni döndürülen sonuçlarla günceller.

Denediğin şey, cilt sınıfının görüntülenen metnini kontrol etmektir, ancak korunur. Eğer Etiket için bu cilt kullanırsanız

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()); 
    } 
} 

, metin ellipsoided olup olmadığını saptamak mümkün olmalıdır: Yani yapmanız gerekir LabelSkin alt sınıf ve böyle bir şey uygulamaktır. Döngü ve yansıma hakkında merak ederseniz: Java metin alanına başka yollarla erişmeme izin vermedi, bu yüzden bunu gerçekten yapmamanız için güçlü bir gösterge olabilir ;-) Yine de: Çalışıyor!

Yasal Uyarı: Sadece ...

İlgili konular