MyTetra Share
Делитесь знаниями!
BorderLayout
Время создания: 19.08.2017 21:02
Текстовые метки: knowledge
Раздел: Java - Structure classes - Layouts
Запись: xintrea/mytetra_db_mcold/master/base/1503165764v352g554kx/text.html на raw.githubusercontent.com

BorderLayout – пять частей света

НОЯБРЬ 8, 2009 4 КОММЕНТАРИЯ

BorderLayout – это один из layout Java Swing, который используется для расположения компонентов на контейнере. Принцип, который использует BorderLayout для компоновки прост – всё пространство контейнера разбивается на пять частей. В каждой из этих частей располагается один компонент. При добавлении компонента на контейнер с BorderLayout разработчик обязательно указывает, куда именно он хочет поместить компонент. Посмотрим на конкретном примере, как установить у контейнера BorderLayout.

Предположим у нас есть панель JPanel. Мы хотим, чтобы расположением компонентов на панели занимался BorderLayout. Создаем панель и указываем layout при помощи метода setLayout вот так:

JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());

Далее создаем компоненты и добавляем на панель. При добавлении на панель необходимо указать, в какой именно части будет располагаться компонент. Делается это следующим образом:

JButton button = new JButton(“Test button”);
panel.add(button, BorderLayout.PAGE_START);

Как видно из примера, добавление осуществляется при помощи метода add, но c двумя параметрами. Первый параметр – это компонент, который хотим добавить. Второй параметр – константа класса BorderLayout, с помощью которой разработчик говорит BorderLayout’у контейнера, где расположить компонент. Таких констант у BorderLayout несколько. Для того чтобы понять, какая константа отвечает за какую часть посмотрим на рисунок ниже.

Думаю так нагляднее. Чтобы лучше понять то, как BorderLayout растягивает компонент (по высоте или ширине контейнера) можно поэкспериментировать – добавлять не сразу все компоненты, а по очереди. К примеру, PAGE_START и PAGE_END растягивают компонент по всей ширине контейнера, при этом высоту не трогают, а LINE_START и LINE_END меняют только высоту компонента, а ширину оставляют нетронутой, CENTER заполняет компонентом всё оставшееся место. Стоит сказать, что не обязательно забивать все пять частей. Можно, к примеру, оставить только PAGE_START, LINE_START и CENTER. Тогда получится вот так:

BorderLayout очень хорошо подходит для приложений, окна которых не имеют строго заданных размеров. Пользователь на своё усмотрение может менять размер окна, а его содержимое растягивается вместе с ним. В тестовых примерах добавлялись только кнопки, но можно оперировать также и с контейнерами. Компоновка контейнеров будет происходит аналогичным образом.
Если заглянуть в константы класса BorderLayout, то там можно увидеть вот такие NORTH, SOUTH и так далее. Работают они аналогично описанным выше. Для чего добавлены новые константы мне, если честно не вполне ясно. Но на практике работают и те, и другие. По мне – лучше использовать NORTH, SOUTH, WEST – стороны света как-то лучше воспринимаются. Вот и получается BorderLayout – пять частей света 

package al.catalog;

import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestFrame {

     public static void createGUI() {
          JFrame.setDefaultLookAndFeelDecorated(true);
          JFrame frame = new JFrame("Test frame");
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

          JPanel panel = new JPanel();
          panel.setLayout(new BorderLayout());

          JButton northButton = new JButton("NORTH (PAGE_START)");
          panel.add(northButton, BorderLayout.NORTH);

          JButton southButton = new JButton("SOUTH (PAGE_END)");
          panel.add(southButton, BorderLayout.SOUTH);

          JButton eastButton = new JButton("EAST (LINE_START)");
          panel.add(eastButton, BorderLayout.EAST);

          JButton westButton = new JButton("WEST (LINE_END)");
          panel.add(westButton, BorderLayout.WEST);

          JButton centerButton = new JButton("CENTER");
          panel.add(centerButton, BorderLayout.CENTER);

          frame.getContentPane().add(panel);
          frame.setPreferredSize(new Dimension(550, 300));

          frame.pack();
          frame.setVisible(true);
          frame.setLocationRelativeTo(null);
     }

     public static void main(String[] args) {
          javax.swing.SwingUtilities.invokeLater(new Runnable() {
               public void run() {
                    createGUI();
               }
          });
     }
}

Прикрепленные файлы:
 
MyTetra Share v.0.59
Яндекс индекс цитирования