次のSWTレイアウトがあります。
- TabItem
- SashForm
- コンポジット(GridLayout)
- ラベル(塗りつぶしW、グラブH)
- ScrolledComposite(W / Hを埋め、H / Vをつかむ)
- コンポジット(RowLayout)
- コンポジット(GridLayout)
- ラベル(塗りつぶしW、グラブH)
- ScrolledComosite(W / Hを埋め、H / Vをつかむ)
- コンポジット(RowLayout)
- コンポジット(GridLayout)
- SashForm
一般的な考え方は、サッシを介して幅を調整できる2つの同一のペインが並んでいて、各パネルの内側に上部にラベルがあり、下部にスクロールされたコンポジットがあるというものです。スクロールされたコンポジットには、ラップされたコンポジット内に多数(1〜50)の100x100コンポジットが含まれます。
問題は、サッシュフォームに含まれている場合、子の数が多いために内部コンポジットが大きくなると、スクロールされたコンポジットがスクロールしないことです。SashFormを放棄し、次のように通常のコンポジットを使用しても、この問題は発生しません。
- TabItem
- コンポジット(GridLayout)
- ラベル
- ScrolledComposite
- 複合
- ラベル
- ScrolledComposite
- 複合
- コンポジット(GridLayout)
このように、余分な複合コンテナはなく、すべてがグリッドレイアウトになっています。唯一の問題は、共通のインターフェイス(サッシ)を介してペインの幅を調整できないことです。
を使用してレイアウトを強制しlayout()
、を使用して最小サイズを設定してみsetMinSize()
ました。RowLayoutをFlowLayout(swing2swt)と交換してみました。これは一種のレイアウトの問題だと思いますが、それを解決するのに十分なSWTの経験がありません。スクロールの問題を除いて、レイアウトは完璧です。
ソースの例
すべてのコードはWindowBuilderProによって自動生成され、指定した複合ツリーを構築することで複製できます。ラップされたコンポジットにデータを取り込むために使用しているフラグメントは次のとおりです。
public void populate(Composite composite, List<Photo> items) {
composite.setRedraw(false);
for (Photo photo : photos) {
PhotoComposite composite = new PhotoComposite(composite, photo, SWT.NONE);
composite.setSize(100, 100);
}
composite.setRedraw(true);
composite.layout(true);
}
Photoは単純なPOJOであり、PhotoCompositeは、従来のコンポジットビットとスタイルビットに加えて、コンストラクターのパラメーターとして写真を受け取るカスタムコンポジットです。私の実験によれば、このコードは正常に機能しているようです。