Читаем Java 7 полностью

Два статических метода берут координату height или координату width у минимального, предпочтительного и максимального размеров заданного компонента comp:

public static Spring height(Component comp); public static Spring width(Component comp);

Итак, на объект класса Spring можно смотреть как на трехмерный вектор

(min, pref, max) .

Кроме этих трех размеров, объект хранит еще и текущее значение value, устанавливаемое методом setValue(int value). Значение value должно лежать между минимальным и максимальным значениями. Начальное значение value совпадает с предпочтительным размером.

Менеджер размещения получает эти размеры, обращаясь к методам getMinimumValue(),

getMaximumValue(), getPreferredValue(), getValue().

Очень часто менеджер размещения SpringLayout использует несколько объектов Spring. При этом их размеры складываются, вычитаются, берется наибольший или наименьший размер. Все операции выполняются, как операции с векторами, покоординатно. Для удобства их выполнения в класс Spring введены статические методы таких вычислений:

□ public static Spring max(Spring s1, Spring s2) — возвращает новый объект, размеры которого составлены из наибольших значений объектов s1 и s2;

□ public static Spring minus(Spring s) - возвращает новый объект, размеры которого

равны размерам объекта s с обратным знаком;

□ public static Spring sum(Spring s1, Spring s2) — возвращает новый объект, размеры которого равны сумме соответствующих размеров объектов s1 и s2.

Для вычисления минимального из двух значений s1 и s2 нет специального метода, оно вычисляется так:

Spring sp = Spring.minus(Spring.max(Spring.minus(s1), Spring.minus(s2)));

Промежутки Constraints

Объект класса Spring — всего лишь четверка чисел. Он не может определить пространство в контейнере, а используется только для построения объекта вложенного класса

SpringLayout.Constraints.

Объект класса Constraints, подобно прямоугольнику, содержит координаты (x, y), ширину width и высоту height, но эти величины — не числа, а объекты класса Spring. Объекты x и y — не жестко фиксированные координаты левого верхнего угла, как в прямоугольнике. Они имеют наименьшее, наибольшее, предпочтительное и текущее значения, которыми пользуется менеджер размещения SpringLayout. Он варьирует положение левого верхнего угла компонента в заданных объектами x и y пределах. Поэтому они обозначаются статическими строковыми константами WEST и NORTH класса SpringLayout. Ширина width и высота height — это наименьшая, наибольшая, предпочтительная и текущая ширина и высота компонента в контейнере, управляемом менеджером размещения SpringLayout. Чаще всего они совпадают с соответствующими значениями самого компонента. Величины x + width и y + height обозначаются статическими строковыми константами east и south и определяют положение правого нижнего угла компонента.

Для получения и установки всех этих значений в классе Constraints есть методы-"сеттеры" и "геттеры": setX(Spring), getX(), setY(Spring), getY(), setWidth(Spring), getWidth(), setHeight(Spring), getHeight(). Методы setConstraint(String, Spring) и getConstraint (String) устанавливают и выдают объект класса Spring по заданному имени

NORTH, WEST, SOUTH или EAST.

Размещение компонентов

После обсуждения этих вспомогательных классов можно объяснить принцип работы менеджера размещения SpringLayout на примере.

Допустим, мы хотим расположить несколько компонентов comp[0], comp [1], comp [2] и т. д. в одну строку с фиксированными промежутками между ними величиной в 6 пикселов. Кроме того, мы решили оставить промежутки в 10 пикселов от границ контейнера. Листинг 14.9 содержит программу, выполняющую такое размещение, а рис. 14.9 показывает результат размещения.

Листинг 14.9. Размещение компонентов SpringLayout

import java.awt.*; import javax.swing.*;

public class SpringWin extends JFrame{

JComponent[] comp = {

new JButton("Длинная надпись"),

new JButton("Надпись с^> двумя строками"),

new JButton("OK")

};

public SpringWin(){

super(" Размещение SpringLayout");

SpringLayout sl = new SpringLayout(); setLayout(sl);

// Задаем величину промежутка между компонентами Spring xPad = Spring.constant(6);

// Задаем величину отступа от границ контейнера Spring yPad = Spring.constant(10);

// Текущее положение левого верхнего угла Spring currX = yPad;

// Наибольшая высота компонента, пока 0 Spring maxHeight = Spring.constant(0);

for (int i = 0; i < comp.length; i++){ add(comp[i]);

// Получаем размер i-го компонента SpringLayout.Constraints cons = sl.getConstraints(comp[i]);

// Устанавливаем положение i-го компонента cons.setX(currX); cons.setY(yPad);

// Перемещаем текущее положение угла currX = Spring.sum(xPad, cons.getConstraint("East"));

/ / Изменяем наибольшую высоту

maxHeight = Spring.max(maxHeight, cons.getConstraint("South"));

}

// Получаем размеры контейнера SpringLayout.Constraints pCons = sl.getConstraints(c);

Перейти на страницу:

Все книги серии В подлиннике

Java 7
Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др. Дано подробное изложение последней версии сервлетов, технологии JSP и библиотек тегов JSTL. Около двухсот законченных программ иллюстрируют рассмотренные приемы программирования. Приведена подробная справочная информация о классах и методах Core Java API.

Ильдар Шаукатович Хабибуллин

Программирование, программы, базы данных

Похожие книги

C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных