2014-07-24 64 views
0

我是Swing的新手,所以我通讀了Java教程和API。我一直玩JComponent的子類(DTPicture-支持拖放)。基本上我創建了一個GridLayout面板。然後我用DTPicture對象填充面板。 DTPicture繼承了getLocation()。然而,在調用這個時,值是0.然而,當我運行GUI時,我看到了垂直跨越的對象。那麼爲什麼getLocation返回0?getY()在添加JComponent時返回0

謝謝。

以下是我的代碼: *其他一切都已經初始化,聲明,實現。

public class RackBuilderTool extends JPanel{ 
    //maps rack slot # to DTPicture location on JPanel 
    public static Point[] slotIDArray = new Point[42]; 

    public RackBuilderTool() { 
    super(new GridLayout(42, 1)); 

     //DTPicture[] rackSlotArray = new DTPicture[42]; 
     for (int i = 0; i < 42; i++) { 
      //add(new ComponentLabel()); 
      DTPicture temp = new DTPicture(null); 
      System.out.println(add(temp).getLocation()); 
      //address of DTPicture Component 
      slotIDArray[i] = temp.getLocation(); 

     } 
    } 
+0

[This](http://www.java2s.com/Tutorial/Java/0240__Swing/HowtoUseGridLayout.htm)應該有助於您的努力。 –

回答

4

然而一旦調用此,該值爲0。

的大小(和位置)的部件默認爲0被創建的部件時。

然而,當我運行GUI,我看到DTPicture對象垂直

跨越佈局管理器(一個或多個)是負責確定的分量的尺寸和/位置。但是,只有在幀上使用pack()setVisible(true)時纔會調用佈局管理器。

如果您將組件添加到可見框架,則必須使用revalidate()方法調用佈局管理器。

想一想,佈局管理器無法完成工作,直到所有組件都被添加到面板中爲止,因爲它不知道如何調整每個組件的大小。特別是在GridLayout的情況下,所有組件的尺寸與最大組件相同。那麼,如何知道最大的組件是什麼,直到所有組件都被添加爲止?每次添加組件時執行佈局效率都不高。