Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java中的画布根据屏幕的宽度和高度绘制字符串或矩形_Java_Swing_Awt_2d_Java Canvas - Fatal编程技术网

如何使用Java中的画布根据屏幕的宽度和高度绘制字符串或矩形

如何使用Java中的画布根据屏幕的宽度和高度绘制字符串或矩形,java,swing,awt,2d,java-canvas,Java,Swing,Awt,2d,Java Canvas,我想知道如何绘制字符串或矩形(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

我想知道如何绘制字符串或矩形(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();
}
后来在另一门课上,我有:

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


<>这个代码工作和运行,但是文本不是完全居中的,我希望它在顶部而不是中间。谢谢大家!

使用图形上下文的


.stringWidth会做什么,因为我得到了一个错误;如果你仍然有问题,根据上面的例子用a编辑你的问题。啊,我明白了。另一个问题是,我该如何处理矩形或精灵?@GustavoMuratalla:你可以用类似的方式使用矩形的尺寸;如果您就此提出新问题,请根据需要引用或使用此示例。
String s = "2D Shooter";
int w2 = g.getFontMetrics().stringWidth(s) / 2;
int h2 = g.getFontMetrics().getHeight();
g.drawString(s, getWidth() / 2 - w2, h2);
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);
    }
}