Java SwingのGrouplayoutとの混合アライメント
-
28-09-2019 - |
質問
アプリケーションでGUIウィンドウを作成しようとしています。私がやろうとしているのは、上部にいくつかのボタンと大きなテキスト領域がある窓があることです。このようなもの:
+--------------------------------------------------+
| [button1] [button2] [button3] |
| +----------------------------------------------+ |
| | text area | |
| | | |
| | | |
| | | |
| +----------------------------------------------+ |
+--------------------------------------------------+
Grouplayoutを使用して、私はほとんどそこにいます:
layout.setHorizontalGroup(
layout.createParallelGroup()
.addGroup(layout.createSequentialGroup()
.addComponent(button1)
.addComponent(button2))
.addComponent(closeWindow))
.addComponent(textarea1)
);
layout.setVerticalGroup(
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup()
.addComponent(button1)
.addComponent(button2)
.addComponent(button3))
.addComponent(textarea)
);
問題は、これが他の2つとともに左にアライメントされたButton3になってしまうことです。その1つのボタンでアラインメントをどのように指定できるかを理解できないようです。ボタンバー全体でgrouplayout.alignment.trailingを行うことができますが、3つのボタンすべてにヒットしますが、これもまったく正しくありません。
では、正しいアプローチは何ですか?アラインメントは並列グループにのみ適用されるため、2つのシーケンシャルグループが入った水平グループを持つことが役立つとは思いませんか?
何が足りないの?
解決
シーケンシャルグループにギャップを追加します。そのままあなたの水平グループを離れる:
layout.setVerticalGroup(
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup()
.addComponent(button1)
.addComponent(button2)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(button3))
.addComponent(textarea)
);
これらのパラメーターとのギャップは、「スプリング」として機能し、利用可能なすべてのスペースを占有します。
他のヒント
追加してみてください:
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 1, Short.MAX_VALUE)
2番目のボタンの後。 max_valueは、ギャップを必要なだけ拡張します。
AddPreferredGap()を使用して、シーケンシャルグループでのみ使用できます。以下のコードは、目的のレイアウトを提供します。
layout.setHorizontalGroup(
layout.createParallelGroup()
.addGroup( layout.createSequentialGroup()
.addComponent( button1 )
.addComponent( button2 )
.addPreferredGap( LayoutStyle.ComponentPlacement.RELATED, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE )
.addComponent( button3 ) )
.addComponent( textArea )
);
layout.setVerticalGroup(
layout.createSequentialGroup()
.addGroup( layout.createParallelGroup()
.addComponent( button1 )
.addComponent( button2 )
.addComponent( button3 ) )
.addComponent( textArea )
);
所属していません StackOverflow