2013-08-28 4 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

Как вы установить значение переменной ширины экрана? – serg10

+0

Переменная screenWidth на самом деле переименована, потому что это фактически GamePanel.WIDTH. Эта переменная является int, из которой определяется ширина JFrame's Width. – sparklyllama

+0

Есть ли у вашего JFrame украшения? Возможно, вам придется заботиться о вставках JFrame. – 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

Вы отлаживаете экранную ширину? Правильно ли это значение? – JavaDM

0

- Используйте Toolkit, чтобы получить высоту и ширина экрана.

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

- Затем установите текст в середине экрана.

g.drawString("Level 1 Over!",(width/2),(height/2)); 
+1

Это начало текста в середине экрана. Код OP - это попытка центрировать текст на экране, а не центрировать первую букву. – serg10

3

Я обнаружил, что класс TextLayout предоставляет лучшие размеры для строки, чем FontMetrics.

@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, но я думаю, что он работает с графикой и