2011-08-15 24 views
5

Ekranda çizilen metnin genişliğini bulmam gerekiyor. This thread, FontMetrics.stringWidth() öğesinin bazen FontMetrics.getStringBounds() kadar doğru olmayacağını belirtir.FontMetrics.stringWidth() ve FontMetrics.getStringBounds() arasındaki fark nedir?

Bunun doğru olup olmadığını bilen var mı, eğer varsa, bu fark hangi bağlamda görünür? FontMetrics.stringWidth(), SwingUtilities.computeStringWidth() dahil olmak üzere daha sık kullanılan görünüyor. Ayrıca, belirgin avantajı, Graphics nesnesini gerektirmemesidir, ancak bu, Antialiasing ve benzer ayarların Graphics nesnesinde tanımlanması gerçeğiyle birleştiğinde, FontMetrics.getStringBounds() 'un neden daha doğru olabileceğini açıklayabilir.

+2

Ayrıca bkz. [Q & A] (http://stackoverflow.com/questions/5979795/how-to-calculate-the-number-of-rows-and-columns-in-each-row-a- metin alır-in-aj/5998117 # 5998117). – trashgod

cevap

5

getStringBounds, çalışmak için daha fazla bilgiye sahiptir. Alt piksel glif yerleşimini hesaplamak ve kenar yumuşatmanın glif boyutlarına etkisini açıklamak için bunu kullanabilir. FontRenderContext için belgelerden; bir uygulama tarafından belirlenen

Anti-aliasing ve Fraksiyonel-metrik nedeniyle de piksel sınırlarına yuvarlama bir karakterin boyutunu etkileyebilir.

4

Cevabın sorunuzda olduğunu düşünüyorum. javadocs Gönderen: Bu yöntemde döndü Toplam öncelikli genişliği dikkate işleme içeriği almaz

stringWidth

Not. Bu nedenle, kenar yumuşatma ve kesirli metrik ipuçları, ilerlemenin değerini etkileyebilir. Kenar yumuşatma ve kesirli metrik ipuçlarını etkinleştirirken, bu yöntem yerine getStringBounds (Dize, Grafik) kullanın. Bir String'in ilerlemesi, mutlaka karakterlerinin ilerlemelerinin toplamı değildir. Bir Grafik iletilir beri