문자열을 그리는 직사각형을 페인트하고 있습니다. 이 문자열은 가운데에 위치해야하며 (작동합니다) 크기가 조정되어 "all"문자열이이 사각형에 맞습니다.센터 및 크기 조정 사각형의 문자열
센터링은 작동하지만 어쨌든이 질문을 포함 시키므로이 질문은 직사각형에 문자열을 가운데 맞추고 크기를 조정하려는 다른 사람들에게 도움이 될 수 있습니다.
문제는 While 루프가 무한하다는 것입니다.
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
... other paintings ...
// resize string
Rectangle2D fontRec = font.getStringBounds(information, g2.getFontMetrics().getFontRenderContext());
while(fontRec.getWidth() >= width * 0.95f || fontRec.getHeight() >= height * 0.95f){
Font smallerFont = font.deriveFont((float) (font.getSize() - 2));
font = smallerFont;
g2.setFont(smallerFont);
fontRec = smallerFont.getStringBounds(information, g2.getFontMetrics().getFontRenderContext());
}
// center string
FontMetrics fm = g2.getFontMetrics();
float stringWidth = fm.stringWidth(information);
int fontX = (int) (x + width/2 - stringWidth/2);
int fontY = (int) (y + height/2);
g2.drawString(information, fontX, fontY);
}
이 코드 센터와 제대로 문자열의 크기를 조정 : Rectangle2D를 항상
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
... other paintings ...
Font font = new Font("Courier new", Font.BOLD, MAX_FONTSIZE);
// resize string
Rectangle2D fontRec = font.getStringBounds(information, g2.getFontMetrics().getFontRenderContext());
while(fontRec.getWidth() >= width * 0.95f || fontRec.getHeight() >= height * 0.95f){
Font smallerFont = font.deriveFont((float) (font.getSize() - 2));
g2.setFont(smallerFont);
fontRec = smallerFont.getStringBounds(information,
g2.getFontMetrics().getFontRenderContext());
}
// center string
FontMetrics fm = g2.getFontMetrics();
float stringWidth = fm.stringWidth(information);
int fontX = (int) (x + width/2 - stringWidth/2);
int fontY = (int) (y + height/2);
g2.drawString(information, fontX, fontY);
}
보정은 ... 같은 크기를 갖는다.
정확성과 관련하여 각 루프의 smallFont에 대해 간단히 파생하는 것이 더 간단한 문제입니다. - IMHO – MadProgrammer
이이를 수정했습니다. – Aaron