2012-11-16 32 views
1

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

相关代码的部分:

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); 
+0

1)* “的相关代码的部分:” *为了更好地帮助越早,张贴[SSCCE](http://sscce.org /)。 2)将一个组件(或它们的一组)置于中心的快速n-dirty方法是将其放入(或放入)面板中,然后将面板放入另一个带有“GridBagLayout”的面板中,该约束无然后添加到最外面的GBL。您可以在[嵌套版式示例](http://stackoverflow.com/a/5630271/418556)中看到的红色/橙色图像中看到该示例。 –

回答

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)...

+0

好吧,所以我有你想说的关于weightx,y和我知道的,但重点是我想做一个Yamb游戏。所以我希望我的单元格很小,因为它的xxx数字大小。此外,它不是一个类型大约30,400因为我想制作一个看起来像一个列的面板,以便我可以在其中放入一列15个数字。但我现在改变它是没有必要的。我的底线问题是如何将标签,例如“56”或“tralala”放到它自己的细胞中。他们都被困在左侧(中间,关于y)。 – obey

+0

@ user1830241查看更新 –

+0

@ user1830241:只需要使用这个'JLabel lab = new JLabel(“proba”,JLabel.CENTER);'。就像**“GuidoSimone”**所指出的那样,似乎只有这样才能为你工作。 –