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

фиксирована только ширина. При горизонтальном расположении компонентов распорку можно использовать для создания промежутков между компонентами, а при вертикальном расположении — для задания ширины всей панели.

У вертикальной распорки, создаваемой статическим методом

static Component Box.createVerticalStrut(int height);

фиксирована высота. Она используется аналогично горизонтальной распорке.

Третий вид заполнителя — невидимая "надувная подушка" (glue), "раздуваясь", заполняет все выделенное ей пространство, раздвигая остальные компоненты и прижимая их к краям панели, если они имеют фиксированный максимальный размер. Этот заполнитель создается одним из статических методов:

□ static Component Box.createGlue () — "подушка" раздувается во все стороны;

□ static Component Box.createHorizontalGlue() — "подушка" раздается в ширину;

□ static Component Box.createVerticalGlue() — "подушка" раздается в высоту.

Кроме этих трех компонентов-разделителей можно использовать невидимый компонент с фиксированным минимальным, максимальным и предпочтительным размерами. Он является объектом класса Filler, вложенного в класс Box, и создается конструктором

Box.Filler(Dimension min, Dimension pref, Dimension max);

Преимущество этого объекта в том, что он может поменять размеры методом

void changeShape(Dimension min, Dimension pref, Dimension max);

Листинг 14.8 показывает пример размещения текстовой области и двух кнопок на панели класса Box. Для того чтобы сдвинуть кнопки вправо, применена "подушка".

Листинг 14.8. Размещение компонентов на панели Box

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

public class MyBox extends JFrame{

JButton b1 = new JButton("Первая");

JButton b2 = new JButton("Вторая");

JTextArea ta = new JTextArea(5, 30);

MyBox(){

super(" Линейная панель"); setLayout(new FlowLayout());

Box out = Box.createVerticalBox();

Box ini = Box.createHorizontalBox();

Box in2 = Box.createHorizontalBox();

out.add(ini); out.add(in2);

ini.add(ta);

in2.add(Box.createHorizontalGlue());

in2.add(b1); in2.add(b2);

add(outer);

setSize(400, 400);

setDefaultCloseOperation(EXIT ON CLOSE); setVisible(true);

}

public static void main(String[] args){ new MyBox();

}

}

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

Менеджер размещения SpringLayout

Контейнер Box, управляемый менеджером размещения BoxLayout, оказался удобным средством компоновки компонентов, но для сложного размещения большого числа

компонентов приходится вкладывать экземпляры класса Box друг в друга. К тому же возникает необходимость часто применять компоненты-разделители. Это приводит к неоправданной сложности компоновки.

Вообще говоря, возможности размещения компонентов в контейнерах графических библиотек AWT и Swing очень велики и изменяются в широком диапазоне.

На одном конце этого диапазона — абсолютное размещение, при котором прямо указываются координаты (x, y), ширина width и высота height компонента в координатной системе контейнера. Это выполняет метод

setBounds(int x, int y, int width, int height);

или пара методов

setLocation(int x, int y); setSize(int width, int height);

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

JPanel p = new JPanel(); p.setLayout(null);

int w = p.getSize().width, h = p.getSize().height;

JButton b = new JButton("Выход"); b.setBounds(w/10, h/10, w/5, h/8); p.add(b);

Это сложно и требует долгой кропотливой подгонки.

На другом конце диапазона — менеджер размещения FlowLayout, располагающий компоненты просто по их предпочтительному размеру, и менеджер GridLayout, подгоняющий размеры всех компонентов под размер контейнера.

В состав Java SE, начиная с версии JDK 1.4, введен новый менеджер размещения SpringLayout, пытающийся совместить точность и гибкость размещения компонентов. Для определения положения и размеров компонента этот менеджер пользуется координатами (x, y) и размерами width, height, но это не числа, а объекты специально разработанного небольшого класса Spring. Опишем этот класс.

Размеры Spring

Абстрактный класс Spring описывает объекты, хранящие размеры. Каждый объект хранит минимальный, предпочтительный и максимальный размеры. Эти размеры могут использоваться как размеры промежутков между компонентами. Поскольку класс Spring абстрактный, объект с размерами задается не конструктором, а статическим методом

public static Spring constant(int min, int pref, int max);

Второй статический метод, constant(int size), возвращает объект класса Spring с совпадающими между собой размерами, равными size.

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

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

Java 7
Java 7

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

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

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

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

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

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