1

例如,我在网格布局中有 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);
4

1 回答 1

1

[更新]

你真的应该发布一个SSCCE,这样我们都可以尝试,而不必猜测问题出在哪里。我的最后一个猜测——不管它是否能解决你当前的问题——这是你应该做的事情——是

    label.setHorizontalAlignment(JLabel.CENTER);

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

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

[原来的]

由于这不是一个完整的程序,因此很难确切地说出了什么问题,但这里有一些评论可能会让您走上正轨。

首先,您应该使用 setPreferredSize 而不是 setSize(请参阅Java:组件中的 setPreferredSize() 和 setSize() 方法之间的区别

当您进行此更改时,您会发现面板不是您想要的。它又高又瘦。也许是一个错字 - 你的意思是(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)......

于 2012-11-16T19:27:05.193 回答