java - GridBagLayout 标签的一个单元格对齐

标签 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);

最佳答案

[更新]

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

    label.setHorizontalAlignment(JLabel.CENTER);

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

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

[原文]

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

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

当您进行此更改时,您会发现该面板并不完全是您想要的。它又高又瘦。也许是拼写错误 - 您的意思是 (300,400) 而不是 (30,400)

现在我猜你所有的标签都会聚集在一起。为了让它们展开,您需要添加:

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

(实际上任何非零值都可以)。 http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html 中对此进行了描述。

Unless you specify at least one non-zero value for weightx or weighty, all the components clump together in the center of their container. This is because when the weight is 0.0 (the default), the GridBagLayout puts any extra space between its grid of cells and the edges of the container.

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

关于java - GridBagLayout 标签的一个单元格对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13422521/

相关文章:

java - 基于maven构建生成CLASSPATH字符串

java - 应用程序在模拟器中崩溃

java - 无法使用类路径资源将 JPanel 绘制为背景图片

java - 使用 GridBagLayout 调整大小时防止组件散开

java - 寻找一种设计模式来定义进行一组 API 调用并在之后采取行动的各种任务

java - 解决java中的循环依赖

java - GridBagLayout 顶部和底部调整间隙

java - 一个 JFrame 中的两个 JPanel - 第二个覆盖第一个

java - 使 jtoolbar 透明

java - JComponent 未正确绘制