1. ホーム
  2. java

[解決済み] Java Swingでset(Preferred|Maximum|Minimum)Sizeメソッドの使用は避けた方が良いのでしょうか?

2022-03-19 22:50:34

質問

以下のような方法を提案したことで、何度か批判を受けたことがあります。

  1. setPreferredSize
  2. setMinimumSize
  3. セット最大サイズ

オン Swing コンポーネントを使用します。表示されたコンポーネント間の比率を定義したい場合、この使用に代わるものはないと思います。このように言われたことがあります。

レイアウトの場合、答えはいつも同じで、適切な LayoutManager

ウェブで少し検索してみましたが、このテーマに関する包括的な分析が見つかりませんでした。そこで、以下の質問をさせていただきます。

  1. それらのメソッドの使用は完全に避けるべきですか?
  2. メソッドは理由があって定義されています。では、いつ使えばいいのでしょうか?どのような状況で使うのか?どのような目的で使うのか?
  3. それらのメソッドを使用することで、具体的にどのような悪影響があるのでしょうか?(画面解像度の異なるシステム間で移植性を高めることしか思いつきません)。
  4. どのようなLayoutManagerでも、希望するレイアウトのニーズをすべて満たせるとは思えません。私は本当に私のレイアウトのすべての小さなバリエーションのために新しいLayoutManagerを実装する必要があるのでしょうか?
  5. 4の回答が「yes」の場合、LayoutManagerのクラスが乱立し、メンテナンスが困難になるのでは?
  6. Component の子プロポーションを定義する必要がある場合 (例: child1 は 10%、child2 は 40%、child3 は 50%) 、カスタム LayoutManager を実装せずにそれを達成することは可能ですか?

どのように解決するのですか?

  1. <ブロッククオート

    それらのメソッドの使用を完全に避けるべきですか?

    アプリケーションコードについては、はい。

  2. メソッドが定義されているのには理由があります。では、いつ使えばいいのでしょうか?どのような状況で使うのか?どのような目的で使うのか?

    どうでしょう、個人的にはAPIの設計事故だと思っています。複合コンポーネントが子サイズについて特別な考えを持っているため、若干の強制がありました。

  3. <ブロッククオート

    それらの方法を使うことで、具体的にどのような弊害があるのでしょうか?(画面解像度の異なるシステム間での移植性を加えることしか思いつきません)

    技術的な理由(不完全なもので、残念ながらSwingLabsがjava.netに移行したためリンク切れになっています)については、例えば ルール (へぇ) または リンク へのコメントで、@bendicott が見つけました。 私の答え . 社会的には、コードを保守しなければならない不幸な仲間に大量の仕事を押し付け、壊れたレイアウトを追跡しなければなりません。

  4. <ブロッククオート

    どのようなLayoutManagerでも、希望するレイアウトのニーズをすべて満たせるとは思えません。レイアウトの小さなバリエーションごとに新しいLayoutManagerを実装する必要が本当にあるのでしょうか?

    はい、「すべてのレイアウトのニーズ」に非常に近いものを満たすのに十分強力なLayoutManagerがあります。JGoodiesのFormLayout、MigLayout、DesignGridLayoutの3つがその代表的なものです。そのため、実際には、高度に専門化したシンプルな環境を除いては、LayoutManagerを書くことはほとんどないでしょう。

  5. <ブロッククオート

    4の答えが「yes」だとすると、LayoutManagerのクラスが乱立し、メンテナンスが大変になりませんか?

    (4の答えは "no"です)。

  6. Component の子プロポーションを定義する必要がある場合(たとえば、子 1 は 10%、子 2 は 40%、子 3 は 50% のスペースを使用する)、カスタム LayoutManager を実装せずにそれを達成することは可能ですか?

    Big-Threeのどれでも可能ですが、GridBagはできません(本当にマスターするのに悩んだことはありません、あまりにも少ないパワーであまりにも多くの問題があります)。