如何使用GridBagConstraints创建布局?

我想这样布局我的JPane:

-------

| |

| |

| |

-------

| |

-------

这样,顶部比底部更大/更小(顶部由另一个JPanel组成,并使用Graphics对象显示图像,而底部也由另一个JPanel组成,但使用Graphics对象绘制一些线和文字)。

我听说最好的方法是使用GridBagLayout和GridBagConstraints。

我试图找出GridBagConstraints的适当属性,但遇到了一些困难。这是我到目前为止所拥有的…

对于顶部,我有:

gridx = 0

gridy = 0

weighty = 1.0; // expand downwards, because the bottom should never expand in the Y direction

fill = GridBagConstraints.BOTH

对于底部,我有:

gridx = 0

gridy = 1

fill = GridBagConstraints.HORIZONTAL

anchor = GridBagConstraints.PAGE_END

不幸的是,所有结果都是一个大的灰色矩形出现(我的应用程序有白色背景)-没有图像加载,没有行/文本出现。

我该怎么办?我该怎么调整?

我已经阅读了一些教程,但看起来确实很令人困惑,我在第一个应用程序中就可以使用它,但是现在当我尝试执行此操作时,对我来说似乎不起作用。

回答:

通常,对于网格布袋布局

  • 如果要使用组件比例,则必须为其比例方向赋予一个权重,并且为此方向设置的任何大小(宽度/高度)都将被布局管理器忽略。

  • 如果您不希望组件缩放,则必须定义组件的大小(如果需要,可以在Java文档中深入探讨此主题)。就底部面板而言,至少需要给其一个首选高度。

这可以按您的期望

pnlTop.setBackground(Color.WHITE);

pnlBottom.setBackground(Color.BLUE);

// Because you don't want the bottom panel scale, you need to give it a height.

// Because you want the bottom panel scale x, you can give it any width as the

// layout manager will ignore it.

pnlBottom.setPreferredSize(new Dimension(1, 20));

getContentPane().setLayout(new GridBagLayout());

GridBagConstraints cst = new GridBagConstraints();

cst.fill = GridBagConstraints.BOTH;

cst.gridx = 0;

cst.gridy = 0;

cst.weightx = 1.0; // --> You miss this for the top panel

cst.weighty = 1.0;

getContentPane().add(pnlTop, cst);

cst = new GridBagConstraints();

cst.fill = GridBagConstraints.HORIZONTAL;

cst.gridx = 0;

cst.gridy = 1;

cst.weightx = 1.0; // You miss this for the bottom panel

cst.weighty = 0.0;

getContentPane().add(pnlBottom, cst);


更进一步,如果您想使用gridbag布局,建议您尝试使用painless-

gridbag库http://code.google.com/p/painless-

gridbag/(我是该库的作者)。它不能为您解决此问题(因为您的问题涉及在网格袋布局中管理组件的大小),但可以节省大量键入时间,并使代码更易于维护

pnlBottom.setPreferredSize(new Dimension(1, 20));

PainlessGridBag gbl = new PainlessGridBag(getContentPane(), false);

gbl.row().cell(pnlTop).fillXY();

gbl.row().cell(pnlBottom).fillX();

gbl.done();

以上是 如何使用GridBagConstraints创建布局? 的全部内容, 来源链接: utcz.com/qa/405670.html

回到顶部