Java .pack()会导致组件位于错误的位置,但在调整窗口大小后工作
我正在使用Swing用java创建一个游戏 我正在使用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以将其更新为新的级别设置
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)< /代码>。