我有网格布局中的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);
答案 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)......