16

最近、自分が働いている会社のプログラムを作り始めました。背景情報と同じように、私はまだ学生であり、初心者のプログラマーなので、私の解決策はおそらく推奨されておらず、他の方法でそれを行う方法がわかりませんでしたが、それは機能し、それについて判断されることはありません。プログラミングとはまったく関係のない学生の仕事です。

プログラムの重要な点は、画面サイズと解像度(800x600以上)が異なる複数の異なるコンピューターで実行されることです。プログラムの一部を失うことなく画面のできるだけ多くを占めるようにするために、レイアウトをnullに設定し、相対値を使用してすべてをハードコーディングしました。

プログラムはキオスクスタイルで、最初に画面サイズの値を取得してそこから移動します(たとえば、頭のてっぺんから左側のメニューが画面の8分の1、上部のバーが2%になるなど)。 。また、フォントメトリックを使用して、コンポーネントのサイズが正しく、すべてが適切に表示されることを確認します。

私の質問は、レイアウトマネージャーを使用する代わりにレイアウトをnullにすることがなぜそんなに嫌われるのかということです。(これは恐ろしいやり方だといくつかのフォーラムで言われました)私はレイアウトマネージャーがどのように機能し、さまざまなレイアウトを使用する方法を知っていますが、このプログラムの要件(複数の異なる解像度、カスタムボタンの形状と配置) 、言語を変更するとコンポーネントのテキストが変更されるなど)、レイアウトマネージャーを使用してすべてを行うことはできませんでした。

このような状況で、経験豊富なプログラマーはどのようにレイアウトマネージャーを使用しますか?また、ボタンを特定の場所に配置し、他のコンポーネントを特定の場所に配置して、事前定義されたレイアウトのいずれにも実際には一致させない場合はどうしますか?

4

4 に答える 4

15

レイアウトマネージャーを正しくレイヤー化すると、画面がさまざまなサイズにリフローします。すべての画面サイズで1セットのレイアウトマネージャーを使用することをお勧めします。

nullを使用する場合は、各画面サイズを自分で行う必要があります。それだけでなく、アプリをウィンドウ化できる場合は、スクロールする可能性のあるすべてのサイズをサポートする必要があります。

それを行うのはちょっと難しいですが、レイアウトマネージャーはまさにそれを行うように設計されています。

いくつかの一般的なトリックがあります。BorderLayoutは、最初から最適なレイアウトです。複数のレベルで使用する場合があります。多くの場合、2つまたは3つのコンポーネントが含まれています。これは、1つの領域を除くすべての領域に最低限必要な領域を与え、他のすべての領域をCENTERに与えるのが本当に得意だからです。

FlowLayoutは便利ですが、コンポーネントのサイズが異なる場合は注意が必要です。

レイアウトマネージャーにフィードするコードを作成する予定がない限り、GridBagLayoutを試してみません(その点で優れたソリューションです!)。

また、GUIビルダーは使用しません。彼らは、レイアウトをリフローする全体的な方法を知りません。

于 2011-07-06T06:42:35.920 に答える
8

一言で言えば:あなたが上で説明したすべての仕事はレイアウトマネージャーによって行われる(または少なくとも:行われるべきである)からです。

多くの場合、nullレイアウトが使用される場合、すべての位置とサイズが単一の値にハードコーディングされていることを意味するため、柔軟性はまったくありません。これは、ウィンドウサイズ、言語、フォントサイズ、表示密度、またはその他の関連パラメータの変更がレイアウトに影響を与えず、通常の醜い効果が得られることを意味します。ウィンドウの空の部分。小さくてサイズ変更できないリスト。ラベルが切り取られたボタン。..。

あなたがする仕事は本当にレイアウトマネージャーによってなされるべきであるように思えます。それを行うものを見つけるか(私の個人的な提案は、多くのことを実行し、使いやすいMiGLayoutです) 、または独自に作成します。

于 2011-07-06T06:44:06.093 に答える
4

あなたは実際にレイアウトを使用しています-あなた自身のレイアウトを、すべての洗練された位置計算とともに使用しています.

これらのロジックをカスタム レイアウト マネージャー クラスに移動して、批判を和らげることができます。

于 2011-07-06T06:52:19.933 に答える
4

うーん、トリックはLayoutManagersを混合し、ネストされたJPanelの数を使用して、それぞれが異なる Layout を持つかどうかに依存する必要があります。実際には、JComponentsの数に依存します。これにより、 AbsoluteLayoutを使用して配置されたように見えるが同じ外観の GUI を作成できます。画面の解像度と比率 (4:3、16:9、16:10) ごとに GUI に出力

于 2011-07-06T07:12:22.103 に答える