1

明示的に設定しない場合、JPanelの推奨サイズはいつ設定されますか?

私は次のコードを持っています:

private static class ScrollableJPanel extends JPanel implements Scrollable {
    @Override
    public Dimension getPreferredScrollableViewportSize() {
                 return getPreferredSize();
    }
            .
            .
            .
}

そしてこのコード:

    myPanel = new ScrollableJPanel();
            // Add a bunch of controls to the panel.
    final JScrollPane scroll = new JScrollPane(myPanel);
    scroll.setAutoscrolls(true);
    scroll.setHorizontalScrollBarPolicy(
        ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

ただし、getPreferredScrollableViewportSize()が呼び出されているときのmyPanelの推奨サイズは、任意の値(4225、34)のようであり、prefSizeSet=falseです。

Javaのドキュメントによると、これはこのメソッドを定義するための合理的な方法です。ただし、myPanelの実際のサイズは34ピクセルよりはるかに大きいため、ビューポートが小さすぎます。

私はここで何が間違っているのですか?myPanelの推奨サイズを明示的に設定する必要がありますか?私はそれを試しましたが、後で上書きされる推測をするだけでなく、レイアウトマネージャーによって決定された実際のサイズを使用したいと思います。

私の質問は、JPanelの正確なサイズを設定する方法ではないことに注意してください。レイアウトマネージャーにそれをしてもらいたい。また、優先サイズを明示的に設定する必要もありません。それもレイアウトマネージャーが担当していると思いました。私が知りたいのは、レイアウトマネージャーが適切なPreferredScrollableViewportSizeを返すことができるように、優先サイズ自体に適切な値を設定していない理由です。

4

2 に答える 2

3

JPanel の優先サイズは、パネル内のコンポーネントに基づきます。レイアウト マネージャーは、パネル内のアイテムの優先サイズに基づいて、パネルの優先サイズを計算します。それらの一部がパネルである場合、再帰的な計算になります。パネルにサブ コンポーネントがない場合は、適切なサイズを明示的に設定する必要があります。

于 2011-04-29T03:36:07.337 に答える