Как установить горизонтальный зазор только для одной части FlowLayout? - PullRequest
2 голосов
/ 28 июня 2011

У меня есть схема потока с тремя кнопками, между первой и второй кнопками я хотел бы горизонтальный зазор 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 ]

6 голосов
/ 28 июня 2011

попробуйте использовать Box.createHor horizontalStrut

panel.add(button1);
panel.add(Box.createHorizontalStrut(30));
panel.add(button2);
Box.createHorizontalStrut(10);
panel.add(button3);
4 голосов
/ 28 июня 2011

Добавьте EmptyBorder ко 2-й кнопке с дополнительными пикселями во втором параметре (left):

button2.setBorder(new EmptyBorder(0, 20, 0, 0));
2 голосов
/ 28 июня 2011

Вы можете попробовать 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"));
0 голосов
/ 08 мая 2017

Альтернативным решением было бы использовать 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);
...