2010-09-12 62 views
11

我有以下代碼,我嘗試將JLabel放置在JFrame的自定義位置。爲什麼setLocation()不移動我的標籤?

public class GUI extends JFrame 
{ 

    /** 
    * 
    * @param args 
    */ 
    public static void main(String args[]) 
    { 
     new GUI(); 
    } 
    /** 
    * 
    */ 
    public GUI() 
    { 
     JLabel addLbl = new JLabel("Add: "); 
     add(addLbl); 
     addLbl.setLocation(200, 300); 
     this.setSize(400, 400); 

     // pack(); 
     setVisible(true); 
    } 
} 

它似乎沒有移動到我想要的位置。

回答

25

問題是面板的LayoutManager正在爲您設置標籤的位置。

你需要做的是設置佈局空:

public GUI() { 
    setLayout(null); 
} 

這將使這樣的框架不會嘗試通過自身佈局的組件。

然後在標籤上打電話setBounds(Rectangle)。像這樣:

addLbl.setBounds(new Rectangle(new Point(200, 300), addLbl.getPreferredSize())); 

這應該把組件放在你想要的地方。

然而,如果你沒有一個真正偉大的理由自行鋪陳組件,它通常是一個好主意,用LayoutManagers對你有利的工作。

Here是使用LayoutManager s的入門教程。

如果你必須去沒有LayoutManagerhere是一個很好的教程去沒有一個。

+3

+1爲了給他回答他的問題,但讓他知道這不是一個好的方法來做一般的事情 – Chimmy 2010-09-12 17:25:25

+0

@Chimmy,謝謝。 – jjnguy 2010-09-12 17:27:16

0

您將位置代碼置於框架下,它將工作,但如果您希望它能夠正常工作 將位置代碼置於運行while循環中。這就是我弄清楚它的工作原理。

相關問題