3

多くのコントロールを備えたかなり大きなフォームを作成する必要があります。コントロールは、基本的なコントロール/設定と拡張コントロール/設定に分かれています。ユーザーは、基本コントロールのみを表示するか、基本コントロールと拡張コントロールの両方を表示するかを決定できます。

このパネルを表示または非表示にすることで 2 つのビューを簡単に切り替えることができるように、すべての拡張コントロールを独自の JPanel にドロップしました。

現在、私は GroupLayout を使用していますが、異なるパネルのコントロールが整列していません。

Label aaa:     Text field
Label a:       Text field
Label aaaaaa:  Text field
----------------------------
Label b:    Text field
Label bbb:  Text field
Label bb:   Text field

残念ながら、2 つのパネルのレイアウトを「同期」する方法を見つけました (AbsoluteLayout と固定コントロール座標を使用する場合を除く)。

  • これを達成する方法はありますか?
  • 私のデザイン全体に欠陥がありますか?

編集:可能であれば、GroupLayout マネージャーを保持したいと思います。

4

6 に答える 6

2

私の知る限り、(JRE またはオープンソースの) Swing LayoutManager は複数のパネルにまたがることはできません。

私は現在、DesignGridLayoutプロジェクトでこのような機能 (「レイアウト同期」と呼んでいます) に取り組んでいますが、実装するのは簡単ではありません (約 2 週間前に開始しましたが、いつ、どのように機能するかはまだわかりません)。何か面白いことが起こるだろうが、私はまだそれに大きな期待を寄せている;-))

チェックできるオプションの 1 つは、すべてのコンポーネントを同じパネルに追加し (その場合は GroupLayout を 1 つだけ)、ユーザーの選択に基づいてそれらを非表示/表示することです。うまくいけば、GroupLayout は状況に合わせてサイズを調整します (pack() を呼び出した後)。

GroupLayout が適切に動作する場合、ユーザーが選択を変更して拡張フィールドを表示/非表示にするたびに pack() を呼び出すだけで済みます。

そうしないと、ユーザーが選択を変更するたびにパネルのサイズを手動で設定する必要があります。

于 2009-01-29T14:35:09.317 に答える
1

標準のレイアウトマネージャーではそれを行う方法はないと思います。おそらく独自のレイアウトマネージャーを作成する必要がありますが、GroupLayoutをサブクラス化する場合はそれほど難しくはありません。

于 2009-01-29T16:13:58.883 に答える
1

おそらく最も簡単な (良い) 方法は、すべてのコンポーネントをメイン パネルに追加することです。サブパネルを不透明に設定し、メイン パネルにも追加します。メイン パネルでは、最適化された描画をオフにする必要があります。

もう 1 つの手法は、スペーサー コンポーネントを追加することです。下部パネルには、上部ラベルからさまざまなサイズ メソッドの幅コンポーネントを動的に取得するラベルと同じ列にコンポーネントを追加します。上部パネルと逆の手順で同じことを行います。

于 2009-01-29T13:34:27.037 に答える
0

それらを別々のレイアウトの別々のパネルに保持したい場合:

追加するすべてのラベルを繰り返し処理し、それぞれの最大推奨幅を見つけます。もう一度繰り返し、希望のサイズを各ラベルの希望の高さに設定しますが、最大幅に設定します。

于 2009-01-29T18:16:46.017 に答える
0

GroupLayout の代わりに GridLayout を使用すると、列間の間隔が均一になります。

于 2009-01-29T09:56:16.323 に答える