gpt4 book ai didi

java - 如何用Java中的Canvas根据屏幕的宽度和高度绘制字符串或矩形

转载 作者:行者123 更新时间:2023-11-30 07:23:28 25 4
gpt4 key购买 nike

我想知道如何绘制字符串或矩形(JFrame完全全屏)

这是我的 Main.java 类中的内容:

public static int WIDTH, HEIGHT;
private Window window;
...
public Main() {
window = new Window("2D Shooter", this);
...
private void render(){
BufferStrategy bs = this.getBufferStrategy();

if(bs == null){
this.createBufferStrategy(3);
return;
}

Graphics g = bs.getDrawGraphics();

g.setColor(Color.BLACK);
g.fillRect(0, 0, WIDTH, HEIGHT);

handler.render(g);//this calls the render method to render objects

g.dispose();
bs.show();
}

后来在另一个类(class)我有:

public void render(Graphics g){
...
g.setColor(Color.WHITE);
g.drawString("2D Shooter", ((Main.WIDTH)/2), (Main.HEIGHT/5));
...

}

此代码可以工作并运行,但文本未完全居中,我希望它在顶部居中而不是在中间。谢谢!

最佳答案

使用图形上下文的FontMetrics .

String s = "2D Shooter";
int w2 = g.getFontMetrics().stringWidth(s) / 2;
int h2 = g.getFontMetrics().getHeight();
g.drawString(s, getWidth() / 2 - w2, h2);

image

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
* @see http://stackoverflow.com/a/37150783/230513
*/
public class Test {

private void display() {
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setFont(getFont().deriveFont(Font.BOLD, 24f));
String s = "2D Shooter";
int w2 = g.getFontMetrics().stringWidth(s) / 2;
int h2 = g.getFontMetrics().getHeight();
g.drawString(s, getWidth() / 2 - w2, h2);
}

@Override
public Dimension getPreferredSize() {
return new Dimension(320, 240);
}
});
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}

public static void main(String[] args) {
EventQueue.invokeLater(new Test()::display);
}
}

关于java - 如何用Java中的Canvas根据屏幕的宽度和高度绘制字符串或矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37150555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com