たとえば、HorizontalLayoutContainerとHBoxLayoutContainerの違いを説明できますか?
2 に答える
JavaDocを5分間読むと、次のことがわかりHBoxLayoutContainer
ます。
- 自動オーバーフローのサポート
- 各子は最小サイズと最大サイズでレイアウトされます(コンテナの軸上、つまりここでは横軸上、つまり最小/最大幅)
- 残りのスペースを子供たちに分配する可能性があります(flex)
一方HorizontalLayoutContainer
:
- (おそらく)子供が合わないときにスクロールする
- 子をそれぞれ固定の幅と高さ(またはそれらの固有のサイズ)でレイアウトします。
私の理解でHBoxLayoutContainer
は、CSS3フレキシブルボックスモデルを内部でHorizontalLayoutContainer
使用しますが、display: inline-box
またはfloat
(またはJavaScriptによって制御される同等のもの、おそらくを使用してposition: absolute
)を使用します
いくつかの例が役立ちます。ウィンドウ内に固定サイズのパネルがあると仮定しましょう。パネルをウィジェットの垂直スタックで埋めたいので、次のようになります。
[Select all]
[ ] Check box #1
[ ] Check box #2
...
[ ] Check box #n
リストが長くなりすぎる場合は、チェックボックス用の垂直スクロールバーが必要ですが、[すべて選択]ボタンはスクロールしないでください。
すべてのチェックボックスを含むパネルは、VerticalLayoutContainerである必要があります。VBoxLayoutContainerにはgetScrollSupport()メソッドがないため、これは明らかです。
明らかではないのは、外側のパネル([すべて選択]ボタンとスクロールパネルを含むパネル)もVerticalLayoutContainerである必要があるということです。外側のパネルは、その親によって指定されたサイズを取り、その子をそれ自体の中に収めるように強制します。外側のパネルがVBoxLayoutパネルの場合、スクロールバーは内側のパネルに表示されなくなります。問題は、外側のパネルがそれ自体と内側のパネルを、すべてのチェックボックスを含めるために必要な大きさにすることです。内側のパネルが非常に大きいため、スクロールバーが表示されることはありません。アウターパネルがとても大きいので、切れてしまいます。外側のパネルに間違いがあったとしても、内側のパネルにスクローラーを追加するのを忘れたように見えます。
2番目の例:一番上の行にボタンを追加してみましょう。
[Select all] [Select none] [Help]
[ ] Check box #1
[ ] Check box #2
...
[ ] Check box #n
最初の例では、[すべて選択]ボタンを外部パネルに直接配置します。この場合、ボタンを保持するための新しいパネルを作成する必要があります。この場合、HBoxLayoutContainerが必要です。HBoxLayoutContainerは、その高さを内側のボタンの高さに自動的に設定し、外側のパネルはHBoxLayoutContainer用に十分なスペースを自動的に予約します。代わりに、HorizontalLayoutContainerを使用した場合、そのコンテナーは自動的に高さを設定しません。そのコンテナの高さを手動で設定しない限り(うん!)、高さは0になります!つまり、それは消えるでしょう。
要約すると、これらのコンテナを選択する場合、最も重要な問題は、このコンテナが子ではなく親とどのように相互作用するかです。コンテナに独自のサイズ(ボタンバーなど)を選択させる場合は、HBoxLayoutContainerまたはVBoxLayoutContainerを使用します。コンテナで親が推奨するサイズ(固定サイズのウィンドウのメインパネルなど)を使用する場合は、HorizontalLayoutContainerまたはVerticalLayoutContainerを使用します。
javadocsからこれを取得していなくても、気分が悪くなることはありません。これを理解するには、何時間もの読書と試行錯誤が必要でした。