2012-04-13 1 views
5

Java에서 문자열의 실제 경계 상자를 찾을 수 있습니까? 즉 실제로 그려지는 픽셀을 포함하는 가장 작은 직사각형?자바에서 텍스트 문자열의 실제 보이는 크기를 찾는 방법

FontMetrics와 LineMetrics를 살펴 보았지만 문자열이 전달 될 수는 있지만 문자 자체를 고려하지는 않습니다. 즉, "a", "p"및 "P"가 모두 반환됩니다. 같은 높이.

특히 실제 문자가 기준선 아래로 내려 가지 않더라도 문자열 높이의 하강을 포함하는 것으로 보입니다. 실제 경계 상자를 반환 할 수있는 다른 메트릭이 있습니까?

또는 특정 문자에 디 센더가 있는지 여부를 알 수있는 방법이 있습니까?

+1

getAscent(), getDescent() 및 charWidth() 메서드를 확인 했습니까? 자세한 내용은 [FontMetrics] (http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/FontMetrics.html) 페이지를 확인하십시오. –

답변

4

tutorial on measuring text을 참조하십시오. 주로 FontMetrics에 중점을 둡니다.

고급 측정 (특정 문자열의 경계 상자를 얻으려면) TextLayout은 친구, as explained here입니다.

javadoc에는 TextLayout에 대한 자습서 외에도 사용 예가 포함되어 있습니다.

+0

FontMetrics를 살펴 보았습니다. 문제는 height() 값은 항상 "a"와 같은 문자에 대해서도 하강을 포함하는 것으로 보입니다. 따라서 "a"주위의 상자에는 글자 아래에 여유 공간이 있습니다. – Martin

+0

TextLayout 튜토리얼에 대한 링크가 추가되었습니다. – daveb

+0

특히 TextLayout.getBounds – daveb

0

javax.swing.SwingUtilities.layoutCompoundLabel을 사용할 수 있습니다. 많은 매개 변수에 의해 저지되지 마십시오. JComponent (null 일 가능성이있다)를 가지는 버젼에서는, 2 개의 버젼이 있습니다. JLabel에 사용되어 매우 다목적이며 Rectangle을 산출합니다.

BTW "a"에 대해서도 디 센더가 경계에 추가 될 수 있으므로 여기에서도 일어날 수 있습니다. GlyphVector를 가져 와서 테두리 상자를 계산할 수 있지만 글꼴 힌트가 켜져있을 때 픽셀 위치가 약간 떨어져서 어떤 오류가 여러 문자 위로 누적 될 수 있습니까?