根据JFrame大小缩放画布内容

时间:2017-12-07 15:46:36

标签: java swing canvas

所以基本上我用Java构建一个迷你游戏,我希望Canvas组件的内容能够根据窗口进行扩展。 size,这是一个JFrame。我想要的原因是因为我在全屏幕上运行游戏,显然并非所有屏幕都具有相同的尺寸。

这是Window类,Game参数是我想根据JFrame大小扩展的主要Canvas组件:

public class Window{

public Window(int width, int height, String title, Game game) {

    JFrame jf = new JFrame(title);

    //Setting the window size
    jf.setSize(width, height);

    //Fullscreen window
    jf.setExtendedState(JFrame.MAXIMIZED_BOTH); 
    jf.setUndecorated(true);

    jf.setLocationRelativeTo(null);
    jf.setResizable(false);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    game.setPreferredSize(new Dimension(Game.WIDTH, Game.HEIGHT));
    game.setMaximumSize(new Dimension(Game.WIDTH, Game.HEIGHT));
    game.setMinimumSize(new Dimension(Game.WIDTH, Game.HEIGHT));

    jf.add(game);

    jf.setVisible(true);

    game.start();

}

}

这是我获取屏幕尺寸的方法,然后我将这些变量添加到Window类的构造函数中:

private static Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

public static final int WIDTH = (int) screenSize.getWidth(), HEIGHT = (int) screenSize.getHeight();

有人可以帮忙吗?

P.S。很抱歉,如果格式化很糟糕,请先在stackoverflow上发布。

1 个答案:

答案 0 :(得分:0)

  

我用Graphics类绘制一些对象,我也有一些精灵是缓冲图像。

您可以在面板中添加ComponentListener。当框架可见时,将生成componentResized事件。然后你做图像缩放计算。

阅读How to Write a ComponentListener上Swing教程中的部分,了解更多信息和工作示例。