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

Java 设置JFrame内容空间的精确大小,java,swing,graphics,Java,Swing,Graphics,我正在尝试用Java制作一个简单的游戏。我通过以下方式设置了框架的尺寸: getContentPane().setPreferredSize(new Dimension(1280, 720)); 然后我添加了一个JComponent对象,它在我的游戏中绘制整个图形: getContentPane().add(gameGraphics); 这一切似乎都正常工作,直到我试图阻止游戏对象离开地图。“游戏引擎”传送高度低于0或高于720或宽度超过1280的所有对象。我确信这个算法工作得很好(我非常精

我正在尝试用Java制作一个简单的游戏。我通过以下方式设置了框架的尺寸:

getContentPane().setPreferredSize(new Dimension(1280, 720));
然后我添加了一个JComponent对象,它在我的游戏中绘制整个图形:

getContentPane().add(gameGraphics);
这一切似乎都正常工作,直到我试图阻止游戏对象离开地图。“游戏引擎”传送高度低于0或高于720或宽度超过1280的所有对象。我确信这个算法工作得很好(我非常精确地检查了它),只要看看当我试图到达窗口的右下角时会发生什么(而左上角工作正常!):

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

在窗口的右侧和下方有一条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()方法也会这样做)。您只需要让它返回您想要的大小(在“维度”中)。
另外,在调用pack()之前,最好先设置JFrame“setResizeable(false)”。

问题已解决:


一种解决方案是重写JComponent类的getPreferredSize()方法(在我的应用程序中,它将位于GameGraphics类中)(许多布局管理器要求每个组件都这样做,pack()方法也会这样做)。您只需要让它返回您想要的大小(在“维度”中)。另外,在调用pack()之前,最好先创建一个JFrame“setresizeable(false)”。

能否提供一个?没有代码,很难判断出什么地方出了问题。谢谢你的编辑。我无法粘贴此图像,因为我的声誉不足10。不要担心我也会这样:)至少你发布了链接。现在请,你能发布相关代码吗?(您可以发布的代码越少,但仍然可以使用具有相同问题的代码)。真是太棒了。
newplayer()
新测试船(10,10)将抛出一个错误,因为我没有这些类。请检查我之前提供的链接,以创建一个最小的完整且可验证的示例,我们可以复制粘贴并测试您自己的代码,并实际看到与您相同的内容1)覆盖自定义组件的首选大小以返回所需的大小。2) 在3)调用
pack()
之前调用
setresizeable(false)
如果这不能解决问题,请按照@Frakcool的建议/链接发布一个MCVE。发布代码C:会更好你给出的答案与camickr在你的邮件中给出的答案相同。@Frakcool来吧,你想让我发布那一行代码吗?可以返回新维度(MainFrame.RES_WIDTH,MainFrame.RES_HEIGHT)@满是鳗鱼的气垫船(我不知道如何通知你lol)。是的,答案是一样的,但问题是完全不同的。无论如何,我现在会努力记住。。。几个月前,我就忘了这个该死的getPreferredSize()重写。。。