2

JavaDocから:

public void validate()

このコンテナとそのすべてのサブコンポーネントを検証します。コンテナの検証とは、そのサブコンポーネントをレイアウトすることを意味します。

それが私がやりたいことです。可能な限り軽量のコンポーネントを使用。しかし、私がこれを行うJComponentと、への呼び出しvalidate()はコンポーネントを「有効」にしません。

    JComponent c = new JComponent() {};
    System.out.println(c.isValid()); // false
    c.validate();
    System.out.println(c.isValid()); // false

なぜ有効にできないのJComponentですか?

4

3 に答える 3

4

それのためのドキュメントisValid()で言う:

コンポーネントは、その親コン​​テナ内で適切なサイズと位置に配置され、そのすべての子も有効である場合に有効です。

これは、トップレベルコンテナJFrame、、JInternalFrameまたはJApplet)に到達するまで当てはまります。質問の例でJComponentは、親がいないため、有効になることはありません。

于 2011-12-02T20:56:53.363 に答える
0

状態のJavadoc java.awt.Component.isValid()

コンポーネントは、その親コン​​テナ内で適切なサイズと位置に配置され、そのすべての子も有効である場合に有効です。

つまり、コンポーネントがコンテナに追加されるまで、コンポーネントを検証することはできません。

于 2011-12-02T20:57:03.240 に答える
0

getPreferedSize()回答で述べられていることを合計するには、メソッドをオーバーライドしてコンポーネントの優先サイズを返すことを忘れないでください。そうしないと、レイアウトマネージャーがあなたを配置しJComponentないため、表示されません。

于 2011-12-02T21:11:21.817 に答える