【问题标题】:Swing JPanel layout managerSwing JPanel 布局管理器
【发布时间】:2016-01-31 10:23:26
【问题描述】:

这应该很简单,不知道为什么我没有得到它。我正在尝试使用 GroupLayout 在 JFrame (mainWindow) 内创建一个 JPanel。我希望面板覆盖整个框架的宽度,它确实如此,但面板的宽度/高度保持为 0(即使框架加载并且面板覆盖了所有框架)。谁能帮我?不知道我错过了什么。

panel = new JPanel();
Container pane = mainWindow.getContentPane();
GroupLayout gl = new GroupLayout(pane);
pane.setLayout(gl);
gl.setAutoCreateContainerGaps(false);
gl.setHorizontalGroup(gl.createSequentialGroup().addComponent(panel));
gl.setVerticalGroup(gl.createSequentialGroup().addComponent(panel));
// panel.getWidth() and panel.getHeight() both return 0 here

【问题讨论】:

  • 您使用GroupLayout而不是BorderLayoutGridBagLayoutGridLayout之类的任何原因?
  • 感谢@MadProgrammer,我最初把它复杂化了。 BorderLayout 很好,我忘记打包框架了。

标签: java swing


【解决方案1】:
panel = new JPanel();
Container pane = mainWindow.getContentPane();
GroupLayout gl = new GroupLayout(pane);
pane.setLayout(gl);
gl.setAutoCreateContainerGaps(false);
gl.setHorizontalGroup(gl.createSequentialGroup().addComponent(panel));
gl.setVerticalGroup(gl.createSequentialGroup().addComponent(panel));
// ++++++++++++  editing start
// force do layout subcomponents and rendering
mainWindow.pack();
// ++++++++++++  editing end
System.out.println("w:" + panel.getWidth() + " h:" + panel.getHeight());

【讨论】:

  • 您应该解释与原始版本的不同之处,以及您的更改解决问题的原因。仅代码的答案应该是非常非常不言而喻的好答案 - 否则,请添加解释!
  • JPanel (panel = new JPanel();) 具有 FlowLayout(API 中的默认值),然后(不添加 JComponent)可以返回零维度(0, 0),GroupLayout 接受
猜你喜欢
  • 2016-03-22
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
  • 2016-01-31
  • 2011-09-14
  • 2022-06-29
  • 2010-10-02
  • 2011-06-11
相关资源
最近更新 更多