1

preferredLayoutSize(Container parent)すべての Java レイアウト マネージャーで必要ですが、このメソッドはいつ呼び出されますか?

次のコードは にあります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());
}

ありがとうございました。

4

2 に答える 2

2

preferredLayoutSize()s のデフォルトの優先サイズですContainer。つまりContainer.getPreferredSize()、コンテナーにレイアウト マネージャーがある場合は、オーバーライドして別の値を返すか、または で別の値を指定しない限り、その値を返しますsetPreferredSize()

それをに変更する

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

コンテナは内容を考慮に入れようとはせず、常に現在のサイズを返すことを意味します。

于 2013-08-08T12:51:11.317 に答える
1

Method usageIDEでホットキーを押すだけです...

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)
于 2013-08-08T12:49:04.607 に答える