【问题标题】:JPanel filling entire JFrameJPanel 填充整个 JFrame
【发布时间】:2012-12-16 09:16:42
【问题描述】:

我正在编写一个简单的游戏,我正在使用一个包含网格和 JPanel 的 JFrame。
这是我的伪代码:

void MyJframeConstructor()
{
  // some basic bootstrap logic
  // calling repaint to draw grid
  repaint();

  // Grid is drawn fine.
  // Showing user a confirm dialog box on which I add below JPanel.

  if(confirmed)
  {
   // GameInfoPanel extends JPanel.
    infoPanel = new GameInfoPanel(new FlowLayout(FlowLayout.LEFT));
    infoPanel.setPreferredSize(new Dimension(400, 100));
    infoPanel.setLocation(500, 50);
    this.add(infoPanel);
    infoPanel.validate();      
  }
}

我的问题是我的 JFrame 或窗口是 480 x 680。
在这个范围内,我在 480 x 480 区域中绘制了一个网格。
在其下方,我希望 JPanel 位于 500,50,尺寸为 400、100。
但是,当我运行此代码时,一旦用户通过 OK 确认,JPanel 就会填满整个 JFrame。
在应用程序的整个生命周期中,如何使面板保持原位并保持大小一致?
任何帮助都非常感谢,并提前感谢。

【问题讨论】:

  • 父容器(JFrame)的布局是什么?你能发布一个SSCE吗? sscce.org

标签: java swing jframe jpanel


【解决方案1】:

在这个范围内,我在 480 x 480 区域中绘制了一个网格。

  • 覆盖PreferredSize for JPanel

  • 然后调用JFrame.pack()JFrame.setVisible(true) 作为最后的代码行

  • 必须阅读InitialThread

  • 如果只有一个JPanel (JPanel filling entire JFrame) 然后使用built_in BorderLayout in JFrame f.e. myFrame.add(infoPanel, BorderLayout.CENTER)不是FlowLayout

  • 不要扩展 JFrame 创建这个 Object 作为局部变量

【讨论】:

  • 这样做会导致我的 JFrame 与我的面板大小完全相同,即 400、100 :(
  • 没有人可以看到您的代码,没有想法,发布SSCCE,简短,可运行,可编译,当然可以基于我的答案中链接的代码,JFrame 有边框和工具栏来自本机操作系统
  • 很抱歉没有发布 SSCE。虽然 myFrame.add(infoPanel, BorderLayout.SOUTH) 成功了。谢谢@mKorbel。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
  • 2017-09-10
  • 1970-01-01
相关资源
最近更新 更多