0

我想做一个3列布局,在每一列我想能够绝对位置标签和文本框。Java GridBagLayout +绝对布局

问题是我的标签(jLabel2)从来没有被显示..

这里是我的代码:

/** 
    * Top JPanel (Top) 
    */ 
JPanel pnlTop = new JPanel(); 
pnlTop.setBackground(new java.awt.Color(223, 223, 217)); 
pnlTop.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, new java.awt.Color(173, 173, 166))); 
c.gridx = 0; 
c.gridy = 0; 
c.gridwidth = 5; // five rows 
c.gridheight = 1; // one column 
c.fill = GridBagConstraints.BOTH; 
//c.weighty = 0.04; 
add(pnlTop, c);  

/** 
    * Top JPanel Content (Here is where i want to put absolute content) 
    */ 
JPanel pnlTopContent = new JPanel(); 
pnlTopContent.setLayout(null); 

jLabel2.setFont(new java.awt.Font("Lucida Grande", 1, 16)); // NOI18N 
jLabel2.setText("Hello"); 

jLabel2.setLocation(150, 50);  

pnlTopContent.add(jLabel2); 
pnlTop.add(pnlTopContent); 

任何想法我做错了吗?

+0

您的'pnlTopContent'是否可见? – araknoid

+1

缺少一些东西。你不显示创建jLabel2。也不要使用绝对布局,即使是用户界面的一部分。使用适当的布局管理器,而不是 – kiheru

+0

是的,它很奇怪,为什么没有显示:/ – Alosyius

回答

0

使用pnlTopContent的布局管理器。哪一个是对的取决于你想要的。即使默认FlowLayout可能工作。如果要居中的标签,比如,你可以使用FlowLayout与居中对齐:

pnlTopContent.setLayout(new FlowLayout(FlowLayout.CENTER)); 
+1

没有必要使用HTML来居中文本。 '对于占据整个pnlTopContent的标签...' - 最简单的解决方案是使用带有中心对齐的FlowLayout。在其他情况下,你可以使用'label.setHorizo​​ntalAlignment(JLabel.CENTER)' – camickr

+0

@camicr非常真实,我会编辑答案。当然,居中只是一个猜测 – kiheru

1

那么它的表现,但不是在正确的地方

什么是“正确的地方”的意思您?为什么你甚至把你的标签添加到第二个面板?为什么不直接将标签添加到pnlTopContent?

GridBagLayout有一个约束条件,允许您定位组件的右/左/中心。请阅读How to Use GridBagLayout上的Swing教程部分。您可能需要从anchor约束开始。

+0

我认为标签可能与网格的其余部分不一致,因为宽度设置为5,但是如果他们这样做,那么这显然是最简单的实现。 +1 – kiheru