Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

レイアウトマネージャ派?NULLレイアウト派?

自分はNULLレイアウト派です。
双方の利点をそれぞれ自分なりに挙げると

レイアウトマネージャ
・各コンポネントの非重複性が保障されている
・フレームのサイズ変更に対して、子コンポネントのサイズや場所が自動的に変更される

NULLレイアウト
・自由にコンポネントを配置できる

たしかに実装を間違えるとコンポネント同士が重なったり、フレームのサイズ変更時におかしくなるというリスクはあります。しかし、自由に配置することができないというデメリットはそれ以上に大きいと思うのです。

自分にはどちらが正しいGUI設計なのか?むしろ、比べること自体がおかしいことなのか?わからないのです。
ですので、様々な方の意見を伺いたいと考えております。ご協力頂けると嬉しいです。

11

回答

8484

閲覧

11件の回答

評価

0

俺は、レイアウトマネージャー抜きなんて、
まず考えないね。
フレームワークを使うということは、そういうことだと思っている。

自由って、いったい何?(・ω・)

評価

0

「自由に配置できない」って、意味が分からん。
「決まった配置をする」ために使うものだろう。
そうでなければ使わなければいいし、むしろそうするのが当たり前。
何を好き好んで道具に使われなきゃいけないのさ。

評価

0

>自由って、いったい何?(・ω・)
>「自由に配置できない」って、意味が分からん。
>「決まった配置をする」ために使うものだろう。

自分のレイアウトマネージャに対する理解のなさからとんでもないことを言ってしまったようですが、反論したいと思います。

ユーザに使ってもらうためにユーザの「使い易い」GUI設計をするべきだと考えています。しかし、自分の考える「使いやすさ」がユーザと言う他人からみて、必ずしも「使い易い」とは限りません。ですので、ユーザが「使い易い」ように「自分好みに配置をいじれる」ようにすることがベストだと考えます。
この場合、最低でも各コンポネントの「位置座標」と「サイズ」を自由に変更できなければなりません。
しかし、レイアウトマネージャを使ってしまうと絶対位置での指定が出来なくなってしまう(GroupLayoutならできるがソースが複雑。)ため、レイアウトマネージャの配置規則を"窮屈な制約"と感じてしまうのです。
レイアウトマネージャを駆使して、コンポネント同士が重ならない。かつ、配置不能な座標のないような配置ができる方法を知りません(単に自分の知識と技術の不足かもしれませんが...)。もし、それがレイアウトマネージャによってできるのなら、二度とNULLレイアウトなんて使わないと思います。

評価

0

>ですので、ユーザが「使い易い」ように「自分好みに配置をいじれる」ようにすることがベストだと考えます。

間違っちゃいないけど、極端じゃないの?

すぐ思いつくつっこみとしては、

ユーザーがカスタマイズしなきゃ
ならないようなレイアウトしかしてないの?

とか、

そもそも、わざわざカスタマイズするような、
根性のあるようなユーザーが何人いるの?

とか。

ベストだからって、そうしなきゃならん、
てな、もんじゃあるまい。

俺なら、自分で作って恥ずかしくなくて、
かつ、酷評されないようなレイアウトだったら、それで十分です。

俺は、んなこと思いついたこともないし、これからもないだろう。

評価

0

>間違っちゃいないけど、極端じゃないの?
>俺なら、自分で作って恥ずかしくなくて、
かつ、酷評されないようなレイアウトだったら、それで十分です。

たしかに、レイアウトマネージャを使うことでユーザからの信頼性を得ることができるという利点は大きいですね。

>間違っちゃいないけど、極端じゃないの?
>そもそも、わざわざカスタマイズするような、
根性のあるようなユーザーが何人いるの?

自分の作ったレイアウトが気に入ってもらえれば、わざわざユーザがカスタマイズすることはないと思います。
しかし、気に入ってもらえなかった場合はユーザがカスタマイズできるようなサービスは必要であり、これによって利用者の幅が増えると考えております。

レイアウトマネージャを用いることで安全かつ自由な配置が可能であるならば、深く勉強していきたいです。

評価

0

たとえばMicrosoft Officeはツールバーのカスタマイズができる。
しかし、実際にカスタマイズしている人は一割にも満たないと思う。
多くのライトなユーザーは、使いやすいかどうかよりも安定して「そ
こにある」ことを好み、不用意に動かしてしまって混乱することも。

アプリの性格と想定している利用者層にもよるけど、利用者に任せて
責任放棄するよりは、公開前に広く意見をもらって他の感覚を予め盛
り込むほうがいい。
それはカスタマイズができるできない以前の話だし、自信がないから
なおさらだと思う。

もっとも、Officeくらいのカスタマイズならレイアウトマネージャ有り
でも可能な気もするけど(ドラッグ中の表示だけ厳しいか)。

評価

0

以前、VB6アプリとWebアプリの開発経験がある人と、一緒に Swingアプリの開発をしたときに似たようなことを言われたなあ。

「レイアウトマネージャってうっとおしくないですか? VB6みたいに好きな位置に部品おけないですかねえ?」って。

こいつに Null Layout のことを教えたらまずいと感じて「HTMLと同じようなものだよ。HTML/CSS も部品を入れ子に配置してデザインしていくのが望ましいでしょ? absolute position 使いまくりの HTML/CSS なんて変更しにくいよね?」って言ったら納得してくれた。Webアプリ開発経験があったからかな。

自分は複雑なレイアウトマネージャ(GridBagLayout, GroupLayout, SprintLayout)は使わないです。BorderLayout, FlowLayout, BoxLayout, GridLayout を上手に入れ子にすれば、ほとんどのことはできる。(いままで、これで作れなかった画面は存在しないです。)

ただし、FlowLayout だけは改造していて、垂直方向にコンポーネントをフロー配置できるようにもしていますけどね。これが一番重要!

あとは、切り替え用途で CardLayout も使いますね。このレイアウトマネージャは今回の話とはちょっと関係ないけど。

ちゃんとしたGUIデザイナがあれば Null Layout もいいのかもしれないけど、eclipse で手書きしている身としては座標を手打ちするよりレイアウトマネージャを使うほうが圧倒的に楽です。

評価

0

$さんありがとうございます。回答がとても分かり易くて助かります。

まずは、多くのユーザが安定して利用できるものを公開してから、一部のこだわりユーザ向けにカスタマイズできるものをつくるべきと感じました。
最初からユーザに任せるのは「自由」ではなく「責任放棄」だったのですね。

評価

0

nullレイアウト派です。
順番や極端な場所指定でなく、絶対座標で隙間を自由に造りながら配置できる方が自由度が高いと思っています。

評価

0

@さんありがとうございます。

Javaは多くの言語の利点を集められ、かつ、今までの設計上の問題などを踏まえた上で開発された言語と言われています。
そう考えると、VB6では自由配置しかできなかったために、アプリケーション毎に統一性のないGUIやバグが発生し易かった。その失敗を踏まえて、Javaではレイアウトマネージャという配置方式を採用したということなのでしょうか。

FlowLayoutの垂直配置は欲しいですね。むしろ、デフォルトでできないのが不思議です。
LayoutManagerを実装して、新しいレイアウトを作ってみようかと思います。

>アプリの性格と想定している利用者層にもよる($さん)

業務ソフトなどは全てレイアウトマネージャで、ゲームならNULLレイアウトと考えております。

評価

0

時間空いてますが言わせてください。
ユーザーが位置を変えられるように作るなら、そのようなLayoutManagerを作ればよいと思います。
ユーザーの指定した座標に配置するのだってLayoutMagagerの仕事に入るでしょう。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。