Абсолютное расположение

Вариант№5

Менеджер расположения SpringLayout

В  пакете  разработки  JDK  имеется  универсальный  менеджер  расположения, способный помочь добиться любого, даже самого сложного расположения компонентов. Это менеджер расположения SpringLayout из пакета javax.swing. Однако, несмотря на универсальность, действие его весьма специфично и не похоже на действие ни одного га уже знакомых нам менеджеров расположения. С каждым компонентом ассоциируется особый информационный объект Spring, который позволяет задать расстояние (в пикселах) между парой границ различных компонентов. Границ у компонента четыре — это его северная, восточная, западная и южная сторона. Можно задавать расстояние и между границами одного и того же компонента: например, задав расстояние между северной и южной сторонами одного компонента, вы укажете его высоту. По умолчанию все компоненты имеют предпочтительный размер, однако менеджер SpringLayout тщательно учитывает и два остальных размера, не делая компоненты меньше минимального и больше максимального размеров.

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

// SpringLayoutSample.java // Работа менеджера

SpringLayout import javax.swing.*; import java.awt.*; public class SpringLayoutSample extends JFrame { public SpringLayoutSample() { super("SpringLayoutSample");

setDefaultCloseOperation(EXIT_ON_CLOSE);

 

 

// панель с использованием SpringLayout SpringLayout si = new

SpringLayout();

JPanel contents = new JPanel(sl);

// добавим пару компонентов JButton buttonl, button2;

contents.add(buttonl = new JButton("Первая")); contents.add(button2 = new

JButton("Последняя"));

// настроим распорки

si.putConstraint(SpringLayout.WEST, buttonl,

5, SpringLayout.WEST, contents);

si.putConstraint(SpringLayout.WEST, button2, 5, SpringLayout.EAST, buttonl);

// выведем окн о на экран setContentPane(contents); setSize(300, 200);

setVisible(true);

}

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() { public void run() { new

SpringLayoutSample();) });

}

}

Мы создаем небольшое окно JFrame, его панелью содержимого является панель JPanel,использующая менеджер расположения SpringLayout. В полученную панель добавляются две

 

 


 

 

 

 

   Менеджер SpringLayout довольно мощен и гибок, но совершенно не приспособлен для создания интерфейса «вручную». Посмотрите: чтобы расположить компоненты, нужны все ссылки на них, приходится оперировать абсолютными значениями расстояний между ними, и создание не самого сложного расположения из десятка компонентов рискует превратиться в мешанину из вызовов putConstraint(). Поддерживать такой код очень сложно, и это не удивительно: менеджер SpringLayoutпредназначен, прежде всего, для автоматизированного построения интерфейса, а для ручной работы есть более удобные приемы.


Абсолютное расположение

Никто  не  настаивает  на  обязательном  использовании  в  контейнере  менеджера  расположения, вы можете удалить его,  вызвав метод setLayout(null). В этом случае вся  ответственность за правильное расположение компонентов на экране ложится на ваши плечи: размеры и позиции компонентов придется задавать прямо в программе, вызывая для каждого компонента метод setBounds() с подходящим прямоугольником.

Никогда   не  используйте  абсолютное  расположение,  иначе  рискуете  навлечь  на  себя праведный гнев любого Java-программиста, который увидит ваш код. Все преимущества динамической смены внешнего вида приложения средствами библиотеки Swing, вся легкость перехода на другие платформы — все будет повергнуто в прах в случае абсолютного расположения.  Забудьте  о 

 

нем  так,  как  будто  его нет.  Если  ваше  средство  автоматизированного построения интерфейса предлагает проектировать интерфейс в абсолютных координатах, а затем безуспешно пытается привести то, что получилось, к расположению, соответствующему какому-либо менеджеру (в результате вам все равно приходится использовать абсолютное расположение), выбросите это средство.

Единственным случаем, в котором приходится применять абсолютное расположение, являются графические приложения, где мы рисуем или располагаем компоненты поверх остального интерфейса, например, логотип компании. Часто для этого применяется компонент JXLayerили прозрачная панель (glass рапе), которые мы обсуждали в главе 6.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: