2012-11-16 31 views
1

我有例如3x3的網格佈局組件,我希望所有這些都是標籤,但由於我有一些填充,我希望我的標籤位於其單元格的中心。但我似乎無法去管理它......GridBagLayout標籤的一個單元格對齊

相關代碼的部分:

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](http://sscce.org /)。 2)將一個組件(或它們的一組)置於中心的快速n-dirty方法是將其放入(或放入)面板中,然後將面板放入另一個帶有「GridBagLayout」的面板中,該約束無然後添加到最外面的GBL。您可以在[嵌套版式示例](http://stackoverflow.com/a/5630271/418556)中看到的紅色/橙色圖像中看到該示例。 –

回答

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)...

+0

好吧,所以我有你想說的關於weightx,y和我知道的,但重點是我想做一個Yamb遊戲。所以我希望我的單元格很小,因爲它的xxx數字大小。此外,它不是一個類型大約30,400因爲我想製作一個看起來像一個列的面板,以便我可以在其中放入一列15個數字。但我現在改變它是沒有必要的。我的底線問題是如何將標籤,例如「56」或「tralala」放到它自己的細胞中。他們都被困在左側(中間,關於y)。 – obey

+0

@ user1830241查看更新 –

+0

@ user1830241:只需要使用這個'JLabel lab = new JLabel(「proba」,JLabel.CENTER);'。就像**「GuidoSimone」**所指出的那樣,似乎只有這樣才能爲你工作。 –