2013-08-08 5 views
1

preferredLayoutSize(Container parent) требуется всем менеджером макетов java, но когда этот метод называется?Когда предпочтительнее LayoutSize?

Следующий код находится в 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); 
    } 
} 

Но что будет по-другому, если бы я изменить весь код выше в следующий?

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

спасибо.

+0

Но что будет, если я изменю все коды выше на следующее? probalbly только один (1-й или последний) JComponent будет обрабатывать всю область (из контейнера), GridLayout имеет строки и столбцы – mKorbel

+1

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

+0

@mKorbel, когда я использовал GridLayout, я не видел, чтобы этот метод вызывался вообще. Поэтому мне интересно, в какой ситуации этот метод будет вызван. – tianz

ответ

1

Просто нажмите Method usage горячую клавишу в вашей 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() по умолчанию предпочтительный размер Container ВЛЯЕТСЯ. То есть Container.getPreferredSize() вернет это значение, если в контейнере есть менеджер компоновки, если он не переопределен, чтобы вернуть что-то еще, или было указано другое значение с setPreferredSize().

Изменение его

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

будет означать, что контейнер не будет иметь никакого attemp на принимая во внимание содержание, но всегда возвращает его текущий размер.

 Смежные вопросы

  • Нет связанных вопросов^_^