Добавление графического интерфейса Borderlayout к границам

Я пытаюсь добавить 3 панели в макет границы, только север, юг и запад.

что-то типа

[A]

     ___  ______________
    |   ||    P2        |
    |   ||______________|
    |P1 | ______________
    |   ||    P3        |
    |___||______________|

Я пытаюсь сделать что-то вроде

JFrame window = new JFrame();
window.setLayout(new BorderLayout());
window.add(P1, BorderLayout.WEST);
window.add(P2, BorderLayout.NORTH);
window.add(P3, BorderLayout.SOUTH);

Это заканчивается как

[B]
         ______________
        |    P2        |
        |______________|
         ___
        |P1 |
        |___|
         ______________
        |    P3        |
        |______________|

Должен ли я добавить пробел в качестве центра, чтобы избежать проблемы? Я попытался просто поместить P2 и P3 в другую большую панель и добавить P1 — запад и большую панель — центр. Есть ли другой способ обойти это? Или я должен просто попробовать другой макет.


person Thao Nguyen    schedule 10.11.2011    source источник
comment
+1 ASCII-картинки всегда украшают мой день :)   -  person Nate W.    schedule 11.11.2011


Ответы (3)


Именно так работает BorderLayout; компоненты NORTH и SOUTH простираются горизонтально над и под компонентами WEST, CENTER и EAST.

Ваша система с двумя BorderLayout в полном порядке. Вы могли бы добиться того же с помощью GridBagLayout или MigLayout, но я гарантирую вам, что это займет гораздо больше времени. Использование промежуточных панелей — правильный способ сделать что-то.

person Ernest Friedman-Hill    schedule 10.11.2011
comment
Да, может просто закончиться использованием двух бордюров - person Thao Nguyen; 11.11.2011

Окно JFrame = новый JFrame(); window.setLayout (новый BorderLayout ()); window.add(P1, BorderLayout.ЮГ); window.add(P4, BorderLayout.WEST);

P4.setLayout(новый BorderLayout()); P4.add(P2, BorderLayout.NORTH); P4.add(P3, BorderLayout.ЮГ);

person Csujo    schedule 10.11.2011

Попробуйте MigLayout вместо BorderLayout. Код будет выглядеть так:

setLayout(new MigLayout("wrap 2, fill"));
add(P1, "span 1 2, grow");
add(P2, "grow");
add(P3, "grow");

http://www.miglayout.com

person Emmanuel Bourg    schedule 10.11.2011
comment
еще проще: добавить(P1); добавить (P2, причалить на юг); добавить (P3, пришвартоваться на запад); - person Mike Adler; 11.11.2011