2013-08-28 6 views
2

JFrame 창의 중간에 텍스트를 그려는 중입니다. 조금 벗어났습니다.화면 중간에 텍스트를 그립니다.

는 여기에 내가 무엇을 시도했다입니다 :

는 코드와
FontMetrics fontMetrics = g.getFontMetrics(font); 

// draw title 
g.setColor(Color.WHITE); 
g.setFont(font); 
int titleLen = fontMetrics.stringWidth("Level 1 Over!"); 
g.drawString("Level 1 Over!", (screenWidth/2) - (titleLen/2), 80); 
+0

가 어떻게 값을 설정하는 그래픽와 함께 작동 생각 screenWidth 변수? – serg10

+0

실제로 GamePanel.WIDTH이기 때문에 screenWidth 변수의 이름이 실제로 바뀝니다. 이 변수는 JFrame의 Width가 결정되는 int입니다. – sparklyllama

+0

JFrame에 장식이 있습니까? JFrame의 Insets에 관심을 가져야 할 수도 있습니다. – Holger

답변

2

, 문자열은 매우 중간에서 시작한다. 이 시도 :

FontMetrics fontMetrics = g.getFontMetrics(font); 

// draw title 
g.setColor(Color.WHITE); 
g.setFont(font); 
int titleLen = fontMetrics.stringWidth("Level 1 Over!"); 
g.drawString("Level 1 Over!", (screenWidth/2) - (titleLen), 80); 
+0

아니요, 여전히 작동하지 않습니다. 나는 그것을 이해하지 못한다. 그것이 효과가있는 것처럼 보인다. – sparklyllama

+0

screenWidth를 디버깅 했습니까? 그 값이 맞습니까? – JavaDM

0

- 사용 Toolkit높이 화면의을 얻을 수 있습니다.

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
double width = screenSize.getWidth(); 
double height = screenSize.getHeight(); 

- 그런 다음 화면의 중앙에 텍스트를 설정합니다.

+1

화면 중간에 텍스트가 시작됩니다. OP의 코드는 첫 글자를 가운데에 배치하지 않고 화면 중앙에 텍스트를 배치하려는 시도입니다. – serg10

3

TextLayout 클래스가 FontMetrics보다 String에 더 적합한 치수를 제공한다는 것을 알게되었습니다. 이 예제 g에서

@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 

    if (font == null) { 
     return; 
    } 

    Graphics2D g2d = (Graphics2D) g; 
    FontRenderContext frc = g2d.getFontRenderContext(); 
    TextLayout layout = new TextLayout(sampleString, font, frc); 
    Rectangle2D bounds = layout.getBounds(); 

    int width = (int) Math.round(bounds.getWidth()); 
    int height = (int) Math.round(bounds.getHeight()); 
    int x = (getWidth() - width)/2; 
    int y = height + (getHeight() - height)/2; 

    layout.draw(g2d, (float) x, (float) y); 
} 
0

나는이 오래 그러나 이것은 나를 위해 일한 알고 ...

public void drawCenter (String m , Font font) 
    FontMetrics fm = g.getFontMetrics (font); 
    int sw = fm.stringWidth (m); 
    g.setFont (font); 
    g.setColor (Color.BLACK); 
    g.drawString (m , (frame.getWidth() + sw)/2 - sw , frame.getHeight()/2); 
} 

는 Graphics2D를하지만 난 그것도