Swing компоновщики

компонувальники

Менеджери компонування використовуються для автоматичного позиціонування і завдання розмірів дочірніх елементів в контейнері. Компонувальником є ​​будь-який об'єкт реалізує інтерфейс LayoutManager або LayoutManager2 (підтримує вирівнювання і обмеження).

стандартні компоновщики

  • BorderLayout - розміщує елементи в один з п'яти регіонів, як було зазначено при додаванні елемента в контейнер: наверх, вниз, вліво, вправо, в центр. За замовчуванням елемент додається в центр. Якщо в зазначеному регіоні вже є елемент, то він заміщається новим. Тому, коли треба розмістити кілька елементів в одному регіоні, то їх об'єднують в один контейнер (зазвичай JPanel);
  • FlowLayout - розміщує елементи по порядку в тому ж напрямку, що і орієнтація контейнера (зліва на право за замовчуванням) застосовуючи один з п'яти видів вирівнювання, зазначеного при створенні менеджера. Даний менеджер використовується за умовчанням;
  • GridLayout - розміщує елементи таблично. Кількість стовпців і рядків вказується при створенні менеджера. За замовчуванням один рядок, а число стовпців дорівнює кількості елементів. Вся область контейнера розбивається на осередки і розмір кожного елемента встановлюється в розмір осередку. Це більше підходить для вирівнювання панелей та інших контейнерів, а не елементів управління (нам ж не потрібні гігантські кнопки);
  • BoxLayout - розміщує елементи по вертикалі або по горизонталі. Зазвичай він використовується не безпосередньо, а через контейнерний клас Box (ящик).

точне позиціонування і завдання розмірів

Якщо в контейнері відсутня компоновщик (був викликаний метод контейнера setLayout (null)), то позицію і розміри елементів необхідно задати явно методами елемента

  • setLocation (Point p) - перемістити компонент в зазначену точку;
  • setLocation (int x, int y) - перемістити компонент в зазначену точку;
  • setSize (Dimension d) - встановити розміри компонента;
  • setSize (int width, int height) - встановити розміри компонента;
  • setBounds (Rectangle r) - перемістити і встановити розміри компонента (вписати в чотирикутник);
  • setBounds (int x, int y, int width, int height) - перемістити і встановити розміри компонента.

кращі розміри

Компоненти володіють мінімальними, максимальними і переважними розмірами. Деякі компоновщики використовують ці параметри, а значить можна вплинути на їх роботу, змінюючи їх. Ці розміри також можуть стати в нагоді при розробці власного компоновщика. Якщо все розміри компонента рівні, то говорять, що у компонента фіксований розмір. Отримати і встановити ці значення можна методами:

  • getMaximumSize () - отримання максимального розміру;
  • setMaximumSize (Dimension d) - установка максимального розміру;
  • getMinimumSize () - отримання мінімального розміру;
  • setMinimumSize (Dimension d) - установка мінімального розміру;
  • getPreferredSize () - отримання бажаного розміру;
  • setPreferredSize (Dimension d) - установка бажаного розміру.

компоновщики низького рівня

Існує також два компоновщика низького рівня, розроблених для програм построителей форм SpringLayout і GroupLayout. У документації для SpringLayout можна скачати файлик SpringUtilities.java, де реалізовані два корисних способу компонування на його основі (як там сказано просто викликаємо методи з цього файлу, не вникаючи в деталі :).

Клас Box реалізує контейнер з компоновщиком BoxLayout. Якщо елементи розміщуються по горизонталі, то висота всіх елементів дорівнює висоті найвищого елемента. А ширина елементів така, щоб заповнити весь контейнер по ширині. При зміні ширини контейнера елементи розтягуються пропорційно. Якщо у всіх елементів досягнута межа розтягування (значення getMaximumSize ()), то перший елемент розтягується насильно. Якщо залишається хоча б один елемент доступний для розтягування, то розтягується тільки він.

Подібним чином відбувається і вертикальне розміщення. Ширина всіх елементів дорівнює ширині самого широкого елемента, а висота елеметов така, щоб заповнити весь контейнер по висоті. При цьому може знадобиться явне завдання вирівнювання елементів методом setAlignmentX. Інакше навіть при однаковій ширині, елементи не будуть збудовані в красивий стовпчик.

Клас Box має статичні методи для створення невидимих ​​елементів для різних цілей:

  • createHorizontalStrut (int width) - створює компонент з фіксованою шириною. При горизонтальному укладанні елемент використовується щоб звільнити простір між сусідніми елементами, інакше елементи будуть впритул. При вертикальному укладанні елемент використовується для завдання мінімальної ширини інших елементів;
  • createVerticalStrut (int height) - створює компонент з фіксованою висотою. При вертикальному укладанні елемент використовується щоб звільнити простір між сусідніми елементами, інакше елементи будуть впритул. При горизонтальному укладанні елемент використовується для завдання мінімальної висоти інших елементів;
  • createRigidArea (Dimension d) - створює невидимий елемент фіксованого розміру;
  • createGlue () - створює невидимий розтягується компонент. Використовується, щоб запобігти насильницьке розтягнення елементів. Наприклад, нехай в контейнері видимі елементи фіксованого розміру. Тоді поклавши даний компонент в початок і в кінець контейнера, ми отримаємо центрування видимих ​​елементів. А якщо розташувати його після кожного видимого, то при збільшенні розміру контейнера, видимі елементи "розійдуться" один від одного.

приклад використання компонувальник