java - .pack() 导致组件位于错误的位置,但在窗口大小调整后有效

标签 java swing jframe layout-manager

我正在使用 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()。更多相关建议可参见here 。如果问题仍然存在,请编辑您的问题以包含 mcve这说明了问题。

关于java - .pack() 导致组件位于错误的位置,但在窗口大小调整后有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24239091/

相关文章:

java - 单击下一个按钮时显示下一个问题

java - 为什么 BufferedImage 输出看起来与 Linux 平台上 JFrame 窗口中的屏幕不同?

java - 来自不同类的 JButton

java - JSON 到 Java HashMap 对象

java - 从另一个 Java 应用程序中查找并终止特定的 Java 进程

java - 设置 JButton 不可点击但不灰显

java - 防止打开多个 JFrame 窗口

java - 有向图中的顶点返回 null

java - Eclipse 在 v. 2020-03 中生成 "source not found"

java - JTextPane 阻止在父 JScrollPane 中滚动