明示的に設定しない場合、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を返すことができるように、優先サイズ自体に適切な値を設定していない理由です。