Java Swing: изменение ширины / высоты границы на BorderLayout - PullRequest
4 голосов
/ 16 февраля 2012

Я новичок в Java Swing. Я пытаюсь сделать кадр, содержащий три кнопки; один в центре, другой сверху и последний справа. Я хочу, чтобы границы СЕВЕР и ВОСТОК имели одинаковую ширину. Но сейчас граница ВОСТОК шире, чем СЕВЕРНАЯ граница.

Мне было интересно, есть ли способ изменить ширину границ WEST / EAST или высоту границ NORTH / SOUTH в BorderLayout.

Ответы [ 3 ]

2 голосов
/ 23 сентября 2016

Предполагая, что вы уже используете BorderLayout, вы можете использовать панели для управления макетом вашего кадра и создания ощущения границы.Затем вы можете запросить предпочтительный размер, используя setPreferredSize (new Dimension (int, int)), где (int, int) - это ширина и высота соответственно.Код для границ будет выглядеть примерно так:

JPanel jLeft = new JPanel();
JPanel jRight = new JPanel();
JPanel jTop = new JPanel();
JPanel jBottom = new JPanel();

add(jLeft, "West");
jLeft.setPreferredSize(new Dimension(40, 480));

add(jRight, "East");
jRight.setPreferredSize(new Dimension(40, 480));

add(jTop, "North");
jTop.setPreferredSize(new Dimension(640, 40));

add(jBottom, "South");
jBottom.setPreferredSize(new Dimension(640, 40));

В приведенном выше примере все границы должны иметь одинаковую толщину, поскольку ширина границ на востоке и западе соответствует высоте на севере и югеграницы.Это было бы для кадра размера (640, 480).Затем вы можете добавить свои кнопки в рамку, используя что-то вроде этого:

JButton button = new JButton();
jTop.add(button);
button.setPreferredSize(new Dimension(60, 20));

Вы можете найти другой хороший пример использования setPreferredSize здесь: https://stackoverflow.com/a/17027872

1 голос
/ 16 февраля 2012

Насколько я знаю, вы не можете напрямую установить высоту / ширину границ областей. Вы можете указать только размер компонентов, которые вы размещаете в этих областях.

Но, как уже упоминалось, вы можете указать разрыв между областями.

GridBagLayout более гибкий, но и более сложный.

Построить макеты в Swing не всегда легко - возможно, использование MigLayout (сторонней библиотеки) упростит вам задачу: http://www.miglayout.com/

1 голос
/ 16 февраля 2012

Как насчет чтения документации?

http://docs.oracle.com/javase/6/docs/api/java/awt/BorderLayout.html#BorderLayout%28int,%20int%29:

Создает макет границы с указанными промежутками между компонентами. Горизонтальный зазор определяется hgap, а вертикальный зазор указано vgap.

...