Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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 .pack()会导致组件位于错误的位置,但在调整窗口大小后工作_Java_Swing_Jframe_Layout Manager - Fatal编程技术网

Java .pack()会导致组件位于错误的位置,但在调整窗口大小后工作

Java .pack()会导致组件位于错误的位置,但在调整窗口大小后工作,java,swing,jframe,layout-manager,Java,Swing,Jframe,Layout Manager,我正在使用Swing用java创建一个游戏 我正在使用 mainJFrame.setExtendedState(mainJFrame.getExtendedState() | JFrame.MAXIMIZED_BOTH); 在我的JFrame上,将其作为最大化窗口启动 在此之后,我使用 mainJFrame.pack(); 能够在GUI中获得组件的正确x&y坐标。我需要这些坐标,因为我正在向GUI绘制自定义图像。到目前为止一切都很好 当用户通过某个级别时,我重建GUI以将其更新为新的级别设置

我正在使用Swing用java创建一个游戏

我正在使用

mainJFrame.setExtendedState(mainJFrame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
在我的JFrame上,将其作为最大化窗口启动

在此之后,我使用

mainJFrame.pack();
能够在GUI中获得组件的正确x&y坐标。我需要这些坐标,因为我正在向GUI绘制自定义图像。到目前为止一切都很好

当用户通过某个级别时,我重建GUI以将其更新为新的级别设置,然后再次调用pack()

调用pack()时,组件放置在错误的位置,略低于它们应该放置的位置

但是,手动调整窗口大小会导致组件再次转到正确的位置

我尝试在
pack()
之后调用
mainJFrame.revalidate()
mainJFrame.repaint()
,但没有效果

如果需要,我可以提供打印屏幕和代码


感谢您的时间。

手动调整窗口大小将验证封闭容器及其所有子组件。要避免您描述的效果,请仅在添加组件并调用
pack()
后调用
setVisible()
。可以找到更多相关建议。如果问题仍然存在,请编辑您的问题以包含显示问题的。

要更快获得更好的帮助,请发布一个(最小完整且可验证的示例)。这是因为
pack()
尝试将对象缩小到最小大小。请尝试使用setPreferredSize:)@Pphoenix请参阅(是。)@andreThompson我的问题是,如何阻止组件放置在错误的位置?正在发布MCVE。@Chrippe我想的是,它不是
pack()
。问题出在你的布局上。所以,正如安德鲁所建议的,发布一个MCVE。谢谢!在调用pack()之前设置setVisible(false)修复了此问题。:)还可以考虑在执行顺序中更早查找错误<代码> SETVICE(TRUE)< /代码>。