Java Swing レイアウト用のWindowBuilder Proをいじってみたところ、いくつかの奇妙な動作に遭遇しましたが、最終的に SSCCE にまで減らすことができました。以下のソースコードを検討してください。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class WBPTest2 {
private JFrame frame;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
WBPTest2 window = new WBPTest2();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public WBPTest2() {
initialize();
}
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setBackground(Color.RED);
frame.getContentPane().add(panel, BorderLayout.CENTER);
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
JPanel panel_1 = new JPanel();
panel_1.setBackground(Color.GREEN);
panel_1.setMaximumSize(new Dimension(32767, 100));
panel.add(panel_1);
panel_1.setLayout(new BoxLayout(panel_1, BoxLayout.Y_AXIS));
JPanel panel_2 = new JPanel();
panel_2.setBackground(Color.BLUE);
panel_2.setMaximumSize(new Dimension(32767, 100));
panel.add(panel_2);
panel_2.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
}
}
次のレイアウトが得られます。
なんらかの理由でpanel_1
、緑の が右に浮いています。コード内のいくつかのパラメーターをいじってみると、緑色のパネルの左側のギャップを完全になくす方法が 2 つしか見つかりません。
- コンストラクターの
hgap
andを 0vgap
に変更します。panel_2
また
- を (0,0) に
minimumSize
変更します。panel_2
これらのいずれかを実行すると、次のようになります。
さて、問題は、いったいなぜ、minimumSize
またはhgap
for のいずれかが、その親の左側までいっぱいになるのを防ぐことに関係があるFlowLayout
のでしょうか? in に0 より大きい値と 0 より大きい値が必要な場合はどうすればよいでしょうか? では、 inの左側のギャップをどのように解消できますか?panel_2
panel_1
minimumSize
hgap
FlowLayout
panel_2
BoxLayout
panel_1
に何をしても、panel_1
親コンテナの幅全体を埋めることはできません(panel_2
上記のように編集しない限り)。皮肉なことに、alignmentX
forpanel_1
をに設定するとRIGHT_ALIGNMENT
、実際には左に浮きます。しかし、ギャップはまだ存在します (ちょうど今右側にあります)。コンテンツを埋めpanel_1
てサイズを大きくすると、右側のギャップはどんどん小さくなりますが、完全になくなることはありません。
これは が の場合だけでなく、他の多くの型でも発生しpanel_2
ます... 通常はパラメーターを持たない型です。つまり、 の左側のギャップを修正する唯一の方法は、新しいコンテナが 0 になりましたが、これもばかげていて関係がないように見えます。最も重要なことは、私の設計意図ではない可能性があることです。FlowLayout
JScrollPane
hgap
panel_1
minimumSize