[英]Draw Text in Middle of the Screen
我正在尝试在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);
我发现TextLayout类为String提供了比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);
}
在您的代码中,字符串从最中间开始。 尝试这个:
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);
我知道这很旧,但是对我有用。
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 );
}
在此示例中,g是Graphics2D,但我认为它也可以与Graphics一起使用
-使用Toolkit
获取屏幕的高度和宽度 。
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
double width = screenSize.getWidth();
double height = screenSize.getHeight();
-然后在屏幕中间设置文字。
g.drawString("Level 1 Over!",(width/2),(height/2));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.