- •Лабораторна робота №5 (Java. Типи даних.)
- •План роботи
- •Теоретичні відомості
- •Більш складні типи даних – масиви.
- •Оператори керування кодом програми. Оператори if, if-else.
- •Оператори switch.
- •Порядок виконання роботи
- •Інтерфейси колекцій
- •Інтерфейс Collection.
- •Інтерфейс List.
- •Інтерфейс Set.
- •Класи колекцій
- •Клас ArrayList.
- •Клас HashSet.
- •Клас TreeSet.
- •Колекції класів, визначених програмістом.
- •Порядок виконання роботи
- •Контрольні питання
- •Завдання властивостей компонентів.
- •Обробка подій.
- •Порядок виконання роботи
- •Контрольні питання
- •Лабораторна робота №8 (Пакет Swing – компонувальники (LayoutManager))
- •План роботи
- •Теоретичні відомості
- •Компоновульник FlowLayout.
- •Компонувальник BorderLayout
- •Компонувальник CardLayout.
- •Компонувальник BoxLayout.
- •Компонувальник GridLayout
- •Порядок виконання роботи
- •Контрольні питання
- •Лабораторна робота №9 (Створення простого текстового редактора.)
- •План роботи
- •Теоретичні відомості
- •Порядок виконання роботи.
- •Контрольні питання
- •Порядок виконання роботи
- •Контрольні питання
- •Лабораторна робота №11 (Основні компоненти j2me)
- •Теоретичні відомості
- •Компоненти графічного інтерфейсу користувача midp. (пакет javax.Microedition.Lcdui)
- •Програмна структура mid-лета.
- •Завдання
- •Контрольні питання
- •Список рекомендованої літератури
- •Ресурси
Компонувальник BoxLayout.
Цей компонувальник подібний до FlowLayout, але використовуючи його можна задавати вісь, вздовж якої будуть додаватись компоненти.
Приклад 4.
import javax.swing.*;
import java.awt.*;
public class Lab4 extends JFrame
{
public Lab4()
{
setTitle("CardLayoutDemo");
Container contentPane = getContentPane();
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
JButton button1 = new JButton("Button 1");
contentPane.add(button1);
JButton button2 = new JButton("Button 2");
contentPane.add(button2);
JButton button3 = new JButton("Button 3");
contentPane.add(button3);
JButton button4 = new JButton("Long-Named Button 4");
contentPane.add(button4);
JButton button5 = new JButton("5");
contentPane.add(button5);
}
public static void main(String[] args)
{
Lab4 lab4 = new Lab4();
lab4.pack();
lab4.setVisible(true);
}
}
Результат виконання даної програми показано на даному малюнку:

В конструкторі BoxLayout(contentPane, BoxLayout.Y_AXIS) в якості аргументу передається значення BoxLayout.Y_AXIS, тому кнопки розташовані по вертикалі.
Крім того, BoxLayout має ряд особливостей. У випадку використання даного компонувальника береться до уваги також вирівнювання для кожного компонента, доданого до контейнера. Ця властивість компонента задається таким чином: button1.setAlignmentX(float x),
Де аргумент x може приймати значення від 0.0 до 1.0. Існує три наперед визначених можливості:
JButton.CENTER_ALIGNMENT = 0.5
JButton.LEFT_ALIGNMENT = 0.0
JButton.RIGHT_ALIGNMENT = 1.0
На наступному малюнку показано три варіанти вирівнювань:
|
|
|
|
Наступна особливість – розмір кнопки визначається її максимальною величиною. Якщо ми задамо максимальний розмір кнопки таким, що її ширина буде більшою, ніж екран – кнопка займе весь контейнер по ширині.
Компонувальник GridLayout
Компонувальник GridLayout розташовує компоненти у вигляді сітки комірок. Кожен компонент займає весь простір в межах комірки, причому всі комірки мають одинаковий розмір. Якщо ми змінимо розмір контейнера – всі комірки теж змінять свої розміри, займаючи весь вільний простір.
Приклад 5.
import javax.swing.*;
import java.awt.*;
public class Lab5 extends JFrame
{
public Lab5()
{
setTitle("GridLayoutDemo");
Container contentPane = getContentPane();
contentPane.setLayout(new GridLayout(0,2));
JButton button1 = new JButton("Button 1");
contentPane.add(button1);
JButton button2 = new JButton("Button 2");
contentPane.add(button2);
JButton button3 = new JButton("Button 3");
contentPane.add(button3);
JButton button4 = new JButton("Long-Named Button 4");
contentPane.add(button4);
JButton button5 = new JButton("5");
contentPane.add(button5);
}
public static void main(String[] args)
{
Lab5 lab5 = new Lab5();
lab5.pack();
lab5.setVisible(true);
}
}
В результаті виконання даної програми ви побачите наступне вікно:

Клас GridLayout має два конструктори:
public GridLayout(int rows, int columns)
public GridLayout(int rows, int columns, int horizontalGap, int verticalGap)
Принаймні один із аргументів rows або columns повинен не дорівнювати нулю; якщо один із аргументів нуль, як в даному прикладі, тоді кількість рядків визначається кількістю доданих кнопок, причому кнопки розташовується в дві колонки. Аргументи horizontalGap і verticalGap дозволяють задати відстань між компонентами в пікселах. По замовчуванню ця відстань дорівнює нулю. Компонувальник GridBagLayout.
Приклад 6.
import javax.swing.*;
import java.awt.*;
public class Lab5 extends JFrame
{
public Lab5()
{
setTitle("GridBagLayoutDemo");
Container pane = getContentPane();
pane.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
JButton button1 = new JButton("Button 1");
c.weightx = 0.5;
c.gridx = 0;
c.gridy = 0;
pane.add(button1, c);
JButton button2 = new JButton("Button 2");
c.gridx = 1;
c.gridy = 0;
pane.add(button2, c);
JButton button3 = new JButton("Button 3");
c.gridx = 2;
c.gridy = 0;
pane.add(button3, c);
JButton button4 = new JButton("Long-Named Button 4");
c.ipady = 40; //make this component tall
c.weightx = 0.0;
c.gridwidth = 3;
c.gridx = 0;
c.gridy = 1;
pane.add(button4, c);
JButton button5 = new JButton("5");
c.ipady = 0; //reset to default
c.weighty = 1.0; //request any extra vertical space
c.anchor = GridBagConstraints.PAGE_END; //bottom of space
c.insets = new Insets(10,0,0,0); //top padding
c.gridx = 1; //aligned with button 2
c.gridwidth = 2; //2 columns wide
c.gridy = 2; //third row
pane.add(button5, c);
}
public static void main(String[] args)
{
Lab5 lab5 = new Lab5();
lab5.pack();
lab5.setVisible(true);
}
}
На малюнку показано вікно, збудоване із використанням даного компонувальника.

GridBagLayout є найбільш гнучким і разом з тим найбільш складним в платформі Java. Він дозволяє розміщувати компоненти у виляді сітки із рядів і колонок. При цьому компоненти можуть займати декілька рядків або колонок. Також колонки можуть мати різну ширину, а рядки різну висоту. При цьому для визначення висоти і ширини комірки приймається до уваги найоптимальніший розмір компонента. Цей розмір отримується функцією getPrefferedSize(). Його також можна задати для кожного компонента з допомогою функції setPrefferedSize(Dimension dim).
На наступному малюнку показана сітка для попереднього вікна. Як видно, сітка має три колонки і три рядки. Кнопка в другому рядку займає всі колонки; кнопка в третьому рядку займає дві праві колонки.

Якщо ми збільшимо вікно, як показано на малюнку, то побачимо, що нижній ряд, де знаходиться Button 5, займає весь новий вертикальний простір. Новий горизонтальний простір ділиться між всіма колонками. Така поведінка компонентів задається параметрами GridBagLayout. Слід відмітити, що кожен компонент займає весь можливий горизонтальний простір, але не весь можливий вертикальний простір (як можна бачити у Button 5). Ця поведінка теж задається в програмі.
Для того, щоб задати поведінку кожного компонента, ми повинні задати для кожного із них свої констрейнти (contraints). Констрейнт – це об’єкт класу GridBagConstraints. При додаванні компонента до контейнера, ми повинні вказати констрейнт для кожного компонента.
Наприклад:
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
JButton button1 = new JButton("Button 1");
c.weightx = 0.5;
c.gridx = 0;
c.gridy = 0;
pane.add(button1, c);
Нижче пояснюється значення кожної змінної класу GridBagConstrains:
gridx, gridy
Задає рядок і колонку де буде знаходитись верхній лівий куток компонента. По замовчуванню, gridx=0 і gridy=0.
gridwidth, gridheight
Задає кількіть колонок (gridwidth) або рядків (gridheight) які буде займати компонент. Або інакше кажучи, цим параметром задається кількість комірок, але не пікселів, котрі займає компонент. Значення по замовчуванню - 1.
fill
Якщо розмір оптимальний розмір компонента (визначається get/setPrefferedSize() ) є меншим ніж комірка, в якій знаходиться компонент, цей параметр задає, яким чином буде зайнятий вільний простір в межах комірки. Значення по замовчування GridBagConstraints.NONE, Якщо цей параметр - GridBagConstraints.HORIZONTAL – компонент займає весь можливий горизонтальний простір, якщо - VERTICAL - компонент займає весь можливий вертикальний простір, а у випадку BOTH – компонент займає всю комірку.
ipadx, ipady
Задає мінімальний можливий розмір компонента в комірці. По замовчуванню – 0. Ширина компонента буде не менше, ніж його мінімальна ширина плюс ipadx*2 піксел, аналогічно, висота компонента буде не меншою, ніж його мінімальна висота плюс ipady*2 піксел. (Мінімальні розміри компонента задаються функцією getMinimumSize()).
insets
Задає відстань між компонентом та краєм комірки, в якій знаходиться компонент. Ця величина – обєкт класу Insets(int top, int left, int bottom, int right). По замовчуванню, дорівнює null.
anchor
Використовується, коли компонент є меншим, ніж комірка, в якій він знаходиться, визначає розташування компонента в комірці. Можливі значення (GridBagConstraints константи): CENTER (по замовчуванню), PAGE_START, PAGE_END, LINE_START, LINE_END, FIRST_LINE_START, FIRST_LINE_END, LAST_LINE_END, і LAST_LINE_START.
Нижче на малюнку показано розташування компонента в межах комірки із заданими значеннями anchor.
-----------------------------------------------------------------------
| NORTHEAST NORTH NORTHWEST |
| |
| |
|EAST CENTER WEST |
| |
| |
|SOUTHEAST EAST SOUTHWEST |
------------------------------------------------------------------------
weightx, weighty
Ці параметри визначають те, яким чином розподіляється вільна область контейнера. Параметр weightx - визначає як розподіляється область між колонками, а weighty – між рядками. Можливі значення – від 0.0 до 1.0.
Якщо ми не задали ці параметри, то всі компоненти будуть знаходитись по центру контейнера. Якщо одна із колонок має weightx=1.0, тоді вона буде займати весь вільний простір контейнера по ширині. Аналогічно розподіляється простір по-вертикалі.



