如何仅为FlowLayout的一部分设置水平间隙?

时间:2011-06-28 14:02:53

标签: java swing flowlayout

我有一个带有三个按钮的流程布局,在第一个和第二个按钮之间我希望水平间隙为30,在第二个和第三个按钮之间我希望水平间隙为10.我试过这个:

Jpanel panel = new JPanel(new FlowLayout());
JButton button1 = new Button("1");
JButton button2 = new Button("2");
JButton button3 = new Button("3");

panel.add(button1);
((FlowLayout)panel.getLayout()).setHgap(30);
panel.add(button2);
((FlowLayout)panel.getLayout()).setHgap(10);
panel.add(button3);

但这会将所有水平间隙改为10.

任何想法都将不胜感激,谢谢。

4 个答案:

答案 0 :(得分:5)

尝试使用Box.createHorizo​​ntalStrut

panel.add(button1);
panel.add(Box.createHorizontalStrut(30));
panel.add(button2);
Box.createHorizontalStrut(10);
panel.add(button3);

答案 1 :(得分:4)

EmptyBorder添加到第二个按钮,第二个参数(left)中包含其他像素:

button2.setBorder(new EmptyBorder(0, 20, 0, 0));

答案 2 :(得分:2)

您可以尝试MigLayout:

Jpanel panel = new JPanel(new MigLayout());

panel.add(new Button("1"), "gap right 30");
panel.add(new Button("2"), "gap right 10");
panel.add(new Button("3"));

答案 3 :(得分:0)

另一种解决方案是使用createRigidArea(...)创建一个总是指定大小的不可见组件。然后可以将这种组分用作间隔物:

panel.add(button1);
panel.add(Box.createRigidArea(new Dimension(30, 0)));
panel.add(button2);
panel.add(Box.createRigidArea(new Dimension(10, 0)));
panel.add(button3);