设置JFrame内容空间的精确大小

时间:2014-08-22 16:01:44

标签: java swing graphics

我正在尝试用Java制作一个简单的游戏。我用这种方式设置了框架的大小:

getContentPane().setPreferredSize(new Dimension(1280, 720));

然后我添加了一个JComponent对象,它在我的游戏中绘制了整个图形:

getContentPane().add(gameGraphics);

这一切似乎都正常,直到我试图防止游戏对象超出地图。 &#34;游戏引擎&#34;传送每个低于0或高于720或宽度为1280的物体。我确信算法工作得很完美(我非常精确地检查了),看看当我尝试到达窗口的右下角时会发生什么(左上角正常工作!):<​​/ p>

enter image description here

(玩家是角落里的蓝色矩形)

窗口的右侧和下方有一个10像素的可用空间线。因此窗口的内容必须大于1280x720像素。 你有什么想法吗?感谢。

有一整个JFrame代码:

MainFrame() {
    super("GameOne");
    setLayout(new BorderLayout());

    getContentPane().setPreferredSize(new Dimension(RES_WIDTH, RES_HEIGHT));

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    gameGraphics = new GameGraphics();
    getContentPane().add(gameGraphics);

    new Player();
    new TestShip(10, 10);

    pack();
    setLocationRelativeTo(null);
    setResizable(false);
    setVisible(true);
}

我说的GameGraphics是一个扩展JComponent的类,游戏中可以看到的所有东西都是在这个类的paintComponent方法中生成的。

RES_WIDTH和RES_HEIGHT分别是等于1280和720的常量。


问题已解决:

解决方案是覆盖JComponent类的getPreferredSize()方法(在我的应用程序中它将在GameGraphics类中)(许多布局管理器会询问每个组件,而pack()方法也会这样做)。你只需要让它返回你想要它的大小(在&#39; Dimension&#39;中)。 另外,制作JFrame&#39; setResizable(false)&#39;在你打电话给pack()之前。

1 个答案:

答案 0 :(得分:0)

问题已解决:

解决方案是覆盖JComponent类的getPreferredSize()方法(在我的应用程序中它将在GameGraphics类中)(许多布局管理器会询问每个组件,而pack()方法也会这样做)。你只需要让它返回你想要的大小(在'Dimension'中)。在调用pack()之前,最好还是制作一个JFrame'setResizable(false)'。

相关问题