Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задание 1 часть_В1-В34.docx
Скачиваний:
1
Добавлен:
19.09.2019
Размер:
3.05 Mб
Скачать
  1. Отформатировать текст по стп мгупи. Оформить рисунки и программный кода

Работа менеджера расположения происходит следующим образом: он ждет прихода сигнала от контейнера, требующего расположить в нем компоненты (этому соответству­ет вызов метода layoutContainer() из интерфейса LayoutManager). В методе layoutContainer() и происходит основная работа по расположению компонентов в контейнере. Менеджер расположения, принимая во внимание различные размеры и свойства компонентов

2 Мы подробно обсуждали механизмы (к слову, довольно сложные) работы метода revalidate() в гла­ве 5. Как правило, проверка корректности не вызывает проблем, но если вы вдруг оказались в слож­ной ситуации, ответ можно найти в упомянутой главе 5.

сти для любого компонента Swing, будь это контейнер или отдельный компонент, по­зволяет метод revalidate(), определенный в базовом классе библиотеки JComponent2 .•

Менеджер расположения обязан расположить добавляемые в контейнер компо­ненты в некотором порядке, зависящем от реализованного в нем алгоритма, и при­дать им некоторый размер, при этом он обычно учитывает определенные свойства компонентов.

  • Предпочтительный размер. Такой размер идеально подходит данному компоненту. По умолчанию все размеры компонентов устанавливаются UI-представителями текущего внешнего вида и поведения (lookandfeel), но вы можете изменить их. Предпочтительный размер можно изменить с помощью метода SetPrefferedSize().

  • Минимальный размер. Этот параметр показывает, до каких пор менеджер располо­жения может уменьшать размер компонента. После достижения минимального размера всех компонентов контейнер больше не сможет уменьшить свой размер. Минимальный размер также можно изменить, для этого предназначен метод setMinimumSize().

  • Максимальный размер. Этот параметр говорит о том, насколько можно увеличивать компонент при увеличении размеров контейнера. Например, максимальный раз­мер текстового поля JTextField не ограничен, что не всегда удобно (чаще всего оно должно сохранять свой предпочтительный размер). Эту оплошность мы сможем исправить с помощью метода setMaximumSize(), устанавливающего максимальный размер. Большая часть менеджеров расположения игнорируют максимальный раз­мер, работая в основном с предпочтительным и минимальным размерами.

  • Выравнивание по осям Хи Y. Эти параметры нужны только менеджеру BoxLayout, при­чем для него они играют важнейшую роль. Поэтому их мы рассмотрим, когда дой­дем до описания этого менеджера.

  • Границы контейнера. Эти параметры контейнера, которые позволяет получить ме­тод getlnsets(), определяют размеры отступов от границ контейнера. Иногда менед­жеру расположения приходится их учитывать. В Swing и для компонентов, и для контейнеров применяются рамки Border, которые находятся прямо в пространстве компонента, отдельных отступов нет, что делает работу компонентов Swing более простой и предсказуемой.

  • Базовая линия. Типографский термин, обозначающий основание букв, по которому выравниваются строки текста. Для компонентов интерфейса это означает, что су­ществует линия, по которой выравнивание компонента будет оптимальным, к при­меру, базовая линия текста в текстовом поле и базовая линия текста надписи на кнопке. В противном случае менеджер расположения не знает, как выравнивать компоненты и сможет выровнять их только по верхней и нижней границе или по центру, что может привести к неудовлетворительным результатам и визуальному расхождению. Для определения базовой линии предназначен метод getBaseline(), который в своих компонентах можно переопределять.

  • и контейнера, должен расположить компоненты на определенных позициях в контей­нере, вызывая для каждого из них метод setBounds(), позволяющий указать (в пикселах, в системе координат контейнера) прямоугольник, который будет занимать компонент. Для сложных менеджеров расположения с гибким поведением это означает массу ра­боты и сложные вычисления, однако простые алгоритмы расположения компонентов реализовать совсем несложно. Попробуем теперь написать свой первый менеджер рас­положения компонентов, он будет располагать компоненты вертикально с расстоянием между ними в 5 пикселов и использовать для всех компонентов предпочтительный раз­мер. Вот что у нас получится:

  • // VerticalLayout.java

  • // Простой менеджер расположения, располагает // компоненты в вертикальный ряд с отступами import java.awt.*; import javax.swing.*;

  • public class VerticalLayout implements LayoutManager {

  • // отступ между компонентами public int GAP = 5;

  • // сигнал расположить компоненты в контейнере public void layoutContainer(Container с) {

  • Component comps[] = с.getComponents();

  • int currentY = GAP;

  • for (Component comp : comps) {

  • // предпочтительныйразмеркомпонентаDimension pref = comp. getPreferredSize (') ;

  • // указываемположениекомпонентанаэкранеcomp.setBounds{GAP, currentY, pref.width, pref.height) ;

  • // промежутокмеждукомпонентамиcurrentY += GAP; currentY += pref.height;

  • }

  • }

  • // эти два метода нам не понадобятся public void addLayoutComponent(

  • String name, Component comp) {

  • }

  • public void removeLayoutComponent(

  • Component comp) (

  • }

  • // минимальныйразмердляконтейнераpublic Dimension minimumLayoutSize(Container c) { return calculateBestSize(c);

  • }

  • // предпочтительныйразмердляконтейнераpublic Dimension preferredLayoutSize(Container с) { return calculateBestSize(с);

  • }

  • private Dimension size = new Dimension();

  • // вычисляетоптимальныйразмерконтейнера1private Dimension calculateBestSize(Container c) {

  • // сначалавычислимдлинуконтейнераComponent!] comps = с.getComponents(); int maxWidth = 0; for (Component comp : comps) { int width = comp.getWidth();

  • // поиск компонента с максимальной длиной if (width > maxWidth) maxWidth = width;

  • }

  • // длина контейнера с учетом левого отступа size.width = maxWidth + GAP;

  • // вычисляем высоту контейнера int height = 0;

  • for (Component comp : comps) { height += GAP; height += comp.getHeight();

  • }

  • size.height = height; return size;

  • }

  • // проверимработуновогоменеджераpublic static void main(String[] args) {

  • SwingUtilities.invokeLater( new Runnable() {

  • public void run() {

  • JFrame frame = new JFrame("VerticalLayout"); frame.setDefaultCloseOperation(

  • JFrame.EXIT_ON_CLOSE);

  • // панельбудетиспользоватьновоерасположениеJPanel contents = new JPanel( new VerticalLayout());

  • // добавим пару кнопок и текстовое поле

  • contents.add(new JButton("Один")); contents.add(new JButton("Два")); contents.add(new JTextField(30)); frame.add(contents); frame.setvisible(true); frame.pack(); } });

  • }

  • }

  1. Отформатировать таблицу по СТП МГУПИ

  1. Отформатировать текст по СТП МГУПИ, ввести формулы с помощью инструмента MS Equation