15

私はここでいくつかの投稿を読み、なぜ何人かの人々がそうするのか始めました

@Override
public Dimension getPreferredSize() {
    return new Dimension(500, 500);
}

それ以外の

setPreferredSize(new Dimension(500, 500));

2番目のオブジェクトはオブジェクトを1つだけ作成するので、最初のオブジェクトは複数のオブジェクトを作成する可能性があるので、より良いのではないDimensionでしょうか(それほど無駄なメモリではない場合でも)。それとも私は間違っていますか?違いはありますか?

4

1 に答える 1

14

大きな違いは、時間の経過とともに値がどのように変化するかです。そのため、選択する値は、コードで何をしたいかによって異なります。

単純にコードを呼び出すとsetPreferredSize(new Dimension(500, 500));、期待どおりに動作します。優先サイズが 500x500 に設定されます。ただし、アプリケーション内の他のコードがこの値を新しい値で上書きする可能性があります。何でも呼び出すことができsetPreferredSize()、このメソッドの最後の呼び出しが最終結果になります。

ただし、getPreferredSize()コードでメソッドをオーバーライドすると、常に500x500 が返されます。コードのいずれかがメソッドを呼び出すかどうかは問題ではありませんsetPreferredSize()。それらは事実上無視されるためです。と もオーバーライドするgetMinimumSize()getMaximumSize()、ウィンドウやその他のコンポーネントのサイズに関係なく、コンポーネントに固定サイズを強制できます。

ただし、@Andrew Thompson がコメントで述べたように、特に独自のレイアウト マネージャーを作成している場合、一部のレイアウト マネージャーはこれらを無視することを選択できるため、これは保証されません。また、一部の親コンテナーにカスタム コンポーネントを追加すると無視されます。これらのメソッドは、コンポーネントがどこでどのように使用されるかに応じて異なります。setPreferredSize()とにかく、他のコードから簡単に呼び出され、完全に上書きされる呼び出しよりもまだ厳格です。

また、コンポーネントを適切にペイントするために特定の寸法が必要なカラー ピッカーなど、カスタム コンポーネントのgetPreferredSize()メソッド (プラスgetMinimumSize()と)もオーバーライドします。これらのメソッドをオーバーライドしないと、Swing レイアウト マネージャーは、またはgetMaximumSize()のサイズに合わせてカスタム コンポーネントを適切に配置およびサイズ変更する方法を理解できません。JFrameJPanel

于 2012-06-03T06:51:53.473 に答える