2013-08-08 4 views
1

preferredLayoutSize(Container parent) est requis par tous les gestionnaires de disposition java, mais quand cette méthode est-elle appelée?Quand est-ce que preferredLayoutSize est appelé?

Le code suivant se trouve dans GridLayout.java:

public Dimension preferredLayoutSize(Container parent) { 
    synchronized (parent.getTreeLock()) { 

     System.out.println(parent.getWidth() + " " + parent.getHeight()); 

    Insets insets = parent.getInsets(); 
    int ncomponents = parent.getComponentCount(); 
    int nrows = rows; 
    int ncols = cols; 

    if (nrows > 0) { 
     ncols = (ncomponents + nrows - 1)/nrows; 
    } else { 
     nrows = (ncomponents + ncols - 1)/ncols; 
    } 
    int w = 0; 
    int h = 0; 
    for (int i = 0 ; i < ncomponents ; i++) { 
     Component comp = parent.getComponent(i); 
     Dimension d = comp.getPreferredSize(); 
     if (w < d.width) { 
      w = d.width; 
     } 
     if (h < d.height) { 
      h = d.height; 
     } 
    } 
    return new Dimension(insets.left + insets.right + ncols*w + (ncols-1)*hgap, 
         insets.top + insets.bottom + nrows*h + (nrows-1)*vgap); 
    } 
} 

Mais ce sera différent si je change tout le code ci-dessus dans ce qui suit?

public Dimension preferredLayoutSize(Container parent) { 
    return new Dimension(parent.getWidth(), parent.getHeight()); 
} 

Merci.

+0

Mais ce qui sera différent si je change tous les codes ci-dessus dans le suivant? Probablement un seul (premier ou dernier) JComponent ocupating zone entière (du conteneur), GridLayout a des lignes et des colonnes – mKorbel

+1

'System.out.println' dans' GridLayout.java'? hmm ...) – SeniorJD

+0

@mKorbel quand j'ai utilisé GridLayout, je n'ai pas vu cette méthode s'appeler du tout. Je me demande donc dans quelle situation cette méthode sera appelée. – tianz

Répondre

1

Appuyez simplement sur hotkey Method usage dans votre IDE ...

com.sun.java.swing.plaf.motif - rt.jar 
    -MotifFileChooserUI 
     --getPreferredSize(JComponent) 
    -MotifPopupMenuUI 
     --getPreferredSize(JComponent) 
com.sun.java.swing.plaf.windows - rt.jar 
    -WindowsFileChooserUI 
     --getPreferredSize(JComponent) 
java.awt - rt.jar 
    -Container 
     --getPreferredSize() (2 matches) 
     --preferredSize() 
javax.swing.plaf.basic - rt.jar 
    -BasicDesktopIconUI 
     --getPreferredSize(JComponent) 
    -BasicInternalFrameUI 
     --getPreferredSize(JComponent) 
    -BasicOptionPaneUI 
     --getPreferredSize(JComponent) 
javax.swing.plaf.metal - rt.jar 
    -MetalFileChooserUI 
     --getPreferredSize(JComponent) 
2

preferredLayoutSize() est la taille préférée par défaut de Container s. Cela signifie que Container.getPreferredSize() renverra cette valeur si le conteneur a un gestionnaire de disposition, à moins qu'il ne soit remplacé pour renvoyer autre chose ou qu'une autre valeur ait été spécifiée avec setPreferredSize().

Changer à

public Dimension preferredLayoutSize(Container parent) { 
    return new Dimension(parent.getWidth(), parent.getHeight()); 
} 

signifierait que le conteneur ne ferait pas attemp à prendre en compte le contenu, mais serait toujours retourner sa taille actuelle.

Questions connexes