2012-05-10 4 views
5

J2ME에서 Java Personal Basis Profile에 대한 코드를 작성하고 있습니다. AttributedString의 너비를 픽셀 단위로 측정해야합니다.J2ME에서 AttributedString 너비 측정

자바 SE에서

, 내 AttributedString의에서 AttributedCharacterIterator을 얻을 것이라고하고 FontMetrics #getStringBounds에 전달하지만, J2ME PBP에, 폰트 메트릭스는 getStringBounds 방법, 또는 CharacterIterator에를 받아 다른 방법이 없습니다.

어떻게해야합니까?

+0

나는 정말로해야 할 일은 AttributedString을 줄 바꿈한다는 것이다. LineBreakMeasurer를 사용하면 훨씬 쉬울 것입니다. J2ME PBP에도없는 것입니다. :-( –

+0

Canvas 또는 LCD UI (Form, Alert, List ...) 사용자 인터페이스를 표시하기 위해 구성 요소가 사용하는 요소 더 잘 이해할 수 있도록 그림을 첨부 할 수 있습니까? –

답변

0

너비는이며 픽셀 단위로 표시됩니다. 이제

String text = "Hello world"; 
int widthOfText = fontObject.charsWidth(text.toCharArray(), 0, text.length()); 

, 당신은 변수 widthOfText 픽셀의 텍스트의 폭이있을 것이다;

+0

이렇게하면 AttributedString, 문자열의 일부가 굵은 기울임 꼴인데, 내 질문에 대한 것입니다. (굵게/기울임 꼴 문자는 대개 일반 문자보다 깁니다.) –

2

나는 정말 열심히 노력했습니다. 패널의 크기를 AttributedString 너비에 맞게 조정해야했습니다.

double GetWidthOfAttributedString(Graphics2D graphics2D, AttributedString attributedString) { 
    AttributedCharacterIterator characterIterator = attributedString.getIterator(); 
    FontRenderContext fontRenderContext = graphics2D.getFontRenderContext(); 
    LineBreakMeasurer lbm = new LineBreakMeasurer(characterIterator, fontRenderContext); 
    TextLayout textLayout = lbm.nextLayout(Integer.MAX_VALUE); 
    return textLayout.getBounds().getWidth(); 
} 

그것은 문자열에 대한 TextLayout의를 찾기 위해 LineBreakMeasurer에를 사용하고 단순히 TextLayout의의와를 확인 : 내 솔루션입니다. 줄 바꿈 폭은 Integer.MAX_VALUE로 설정되므로 텍스트 너비보다 큰 텍스트는 잘립니다.