GridBagLayout标签的一个单元格对齐

时间:2012-11-16 18:43:48

标签: java swing gridbaglayout

我有网格布局中的3x3组件,我希望它们都是标签,但由于我有一些填充,我希望我的标签位于其单元格的中心。但我似乎无法管理它......

部分相关代码:

panel = new JPanel();
GridBagLayout gridBag = new GridBagLayout();
panel.setLayout(gridBag);
panel.setSize(new Dimension(30, 400));
GridBagConstraints c = new GridBagConstraints()     

JLabel lab = new JLabel("proba"); 
lab.setBorder(outline);
c.fill = GridBagConstraints.BOTH;
c.gridx =2; c.gridy=2; c.ipady = 10; c.ipadx=10;

c.ipadx=100; panel.add(lab,c);

1 个答案:

答案 0 :(得分:1)

[更新]

你真的应该发布SSCCE所以我们都可以尝试,而不必猜测问题所在。我的最后一次猜测 - 这是你应该做的事情,无论它是否解决了你当前的问题 - 是

    label.setHorizontalAlignment(JLabel.CENTER);

如果您的标签居中并填充整个网格单元格,则默认情况下文本仍然是左对齐的。上述更改将导致文本在标签中居中。

但是,如果您的标签没有填满单元格,这将无济于事。

[原始]

很难确切地说出错是什么,因为这不是一个完整的程序,但这里有一些评论可能会让你走上正轨。

首先,您应该使用setPreferredSize而不是setSize(请参阅Java: Difference between the setPreferredSize() and setSize() methods in components

当您进行此更改时,您将看到面板不是您想要的。它非常高大。也许是一个错字 - 您的意思是(300,400)而不是(30,400)

现在我猜你所有的标签都会聚在一起。要将它们转到spread out,您需要添加:

c.weightx = .5;
c.weighty = .5;

(实际上任何非零值都可以)。这在http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html

中有所描述
  

除非您为weightx或weighty指定至少一个非零值,否则所有组件在其容器的中心聚集在一起。这是因为当权重为0.0(默认值)时,GridBagLayout会在其单元格网格和容器边缘之间放置任何额外的空格。

这应该让你接近(r)......