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