
- •§ 1. Основные понятия теории метода сеток
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Глава 11
- •§ 1. Решение интегральных уравнений методом замены интеграла квадратурной суммой
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Глава 7. Искусство расположения
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •§ 2. Решение интегральных уравнений с помощью замены ядра на вырожденное
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •// 2. Поочередно создаются "полосы", на которые
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Глава 8. Вывод вспомогательной информации
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •// 2. Поочередно создаются "полосы", на которые
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Глава 7. Искусство расположения
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •§ 1. Основные понятия теории метода сеток
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Глава 11
- •§ 1. Решение интегральных уравнений методом замены интеграла квадратурной суммой
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Глава 7. Искусство расположения
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •§ 2. Решение интегральных уравнений с помощью замены ядра на вырожденное
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •// 2. Поочередно создаются "полосы", на которые
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
Проблема с распорками
Распорки совершенно необходимы при создании интерфейсов с применением блочного расположения компонентов, и как мы посмотрели, работа их выглядит вполне прозрачно — мы просто вставляем своеобразные «спички» между компонентами. Однако после рассмотрения заполнителей оказывается, что возникает недоразумение с распорками, созданными классом Box. Дело в том, что максимальный размер по второй оси (к примеру, по вертикали для горизонтальной распорки) неограничен. Как мы уже выяснили, блочное расположение при наличии свободного пространства в контейнере распределяет его поровну между компонентами, которые могут «расти», еще не достигнув максимального размера. Так вот, если в панели с блочным расположением по горизонтали имеются стандартные распорки, общий максимальный размер панели по вертикали будет неограничен, и это, как правило, совсем не тот эффект, которого мы хотим добиться. Тоже самое случится и с вертикальными распорками в вертикальной панели.
Поэтому лучше создать распорки самим, не применяя стандартные. Тут нам помогут фиксированные области, у которых одно расстояние будет распоркой, а второе всегда нулевым. Именно такое поведение нам и требуется при разделении компонентов. Добавим в наш вспомогательный класс BoxLayoutUtils еще пару удобных методов:
// com/porty/swing/BoxLayoutUtils.java
// Класс для удобной работы с менеджером BoxLayout
package com.porty.swing;
import javax.swing.*;
public class BoxLayoutUtils {
// создает горизонтальную распорку
// фиксированного размера
public static Component createHorizontalStrut(int size) { return Box.createRigidArea(new Dimension(size, 0));
}
// создает вертикальную распорку
// фиксированного размера
public static Component createVerticalStrut(int size) { return Box.createRigidArea(new Dimension(0, size));
)
// далее идут методы, описанные ранее }
Наши распорки созданы на основе уже знакомых нам фиксированных областей и &- дут выполнять те же функции, что и стандартные распорки из класса Box, не устанаа.-ш- вая при этом неограниченным общий максимальный размер панели. А если нам понес бится увеличить максимальный размер панели, мы всегда можем сделать это вручную
Выравнивание компонентов по осям
Выравнивание по осям — достаточно каверзный аспект работы менеджера BoxLayout, и если не знать деталей, расположение вполне может получиться абсолютно противоположным тому, что изначально задумывалось. Вам может дажЬ показаться, что поведение компонентов при блочном расположении вообще непредсказуемо. Впрочем, не все так страшно, и мы постараемся без особых трудностей справиться с выравниванием по осям.
Каждый компонент (унаследованный от класса java.awt.Component) имеет два параметра, служащие для его выравнивания по осям X и Y, то есть для его более точного размещения в контейнере. Что это за оси? Рассмотрим сначала вертикальную панель, где компоненты располагаются сверху вниз. Мы можем захотеть изменить горизонтальную позицию компонентов (то есть позицию по оси X) такой панели (вертикальные позиции жестко заданы положением компонентов, распорок и заполнителей) — поместить их слева, справа или по центру. Так вот, сделать это путем выравнивания по осям нельзя.
ВНИМАНИЕ
Выравнивание компонентов по осям не позволяет, как это может показаться на первый взгляд, изменить позицию компонентов относительно контейнера. Эти параметры задают положение компонентов относительно друг друга, то есть относительно остальных компонентов, размещенных в контейнере. То есть попытки использовать механизм выравнивания по осям так же, как и при последовательном расположении (FlowLayout), приведут к неудаче.
На самом деле расположение компонента с определенным выравниванием будет зависеть исключительно от выравнивания и размеров остальных компонентов. Для горизонтального выравнивания в классе Component определены следующие константы:
Component.CENTER_ALIGNMENT — вертикальная ось будет проходить через середину компонента;
Component.LEFT_ALIGNMENT — компонент будет прижат к вертикальной оси своей левой границей;
Component. RIGHT_ALIGNMENT — компонент будет прижат к вертикальной оси своей правой границей.
При блочном расположении положение вертикальной оси определяется по компонентам с центральным выравниванием, а уже после этого компоненты с другими параметрами выравнивания размещаются относительно этой оси. Окончательно разъясняет ситуацию рис. 7.2.
Аналогично обстоит дело с вертикальным выравниванием (по оси Y). Требуется та- аде выравнивание в панелях с горизонтальным расположением компонентов, и позволяет изменить вертикальные позиции компонентов относительно друг друга (горизонтальные позиции задаются самим расположением). В классе Component для вертикального выравнивания определены следующие константы:
Component.CENTER_ALIGNMENT— горизонтальная ось будет проходить через середину компонента;
Component.TOP_ALIGNMENT— компонент будет прижат к горизонтальной оси своей верхней границей;
Component.BOTTOM_ALIGNMENT— компонент будет прижат к горизонтальной оси своей нижней границей.
Как и ранее, для компонента с центральным выравниванием ось будет проходить через его середину (рис. 7.3, слева).
Если все компоненты имеют выравнивание TOP_ALIGNMENT, то ось проходит сверху контейнера, а все компоненты прижимаются к ней верхней границей, как показано справа на рис. 7.3. Схема для выравнивания BOTTOM_ALIGNMENT выглядит аналогично,
только ось проходит снизу контейнера, а все компоненты прижимаются к ней нижней границей. Так же как длягоризонтального, для вертикального выравнивания компонентов можно сказать, что использовать его просто, когда все компоненты в контейнере
имеют одинаковое выравнивание.
Кстати, если вы просмотрите документацию по классу Component, то увидите, что для
задания параметров выравнивания компонентов используются числа с плавающей запятой (float) от 0 до 1. Можно сказать, что они определяют, какая часть компонента находится за осью. Так, например, константы RIGHT_ALIGNMENT и TOP_ALIGNMENT равны нулю. Это значит, что весь компонент находится по одну сторону от оси (с правой или с нижней стороны, соответственно). Если увеличивать значения выравнивания, то компонент будет потихоньку «переползать» за ось и, в конце концов, окажется по другую ее сторону. Константы LEFT_ALIGNMENT и BOTTOM_ALIGNMENT как раз равны единице (то есть компонент находится целиком за осью). Так что это гораздо более тонкий инструмент, чем кажется поначалу, — значения констант соответствуют наиболее вероятным вариантам выравнивания компонентов, но вы также можете и напрямую указывать свои значения, что позволяет очень точно выстраивать компоненты относительно друг друга.
Хотя все это кажется интересным, реальная польза от таких изощренных возможностей блочного расположения практически нулевая. Невероятно сложно, а иногда вообще невозможно предугадать, как выстроятся компоненты в контейнере, чтобы правильно использовать для них разные варианты выравнивания.
С другой стороны, нет ничего проще совмещения нескольких панелей с блочным
расположением, содержащих по несколько компонентов с одинаковым выравниванием. Любой пользовательский интерфейс можно разбить на горизонтальные и вертикальные полосы с компонентами, применяя для них подобные панели. Именно такой способ создания интерфейса дает наибольшие преимущества разработчику, и мы всячески рекомендуем его вам. А чтобы задание параметров выравнивания компонентов не отнимало у вас слишком много времени и сил, добавим в наш вспомогательный класс
BoxLayoutUtilsеще пару методов:
// com/porty/swing/BoxLayoutUtils.java// Класс для удобной работы с менеджером BoxLayout
package com.porty.swing; import javax.swing.*; public class BoxLayoutUtils {
// задает единое выравнивание по оси X для // группы компонентов
public static void setGroupAlignmentX(float alignment,
JComponent... cs) { for (JComponent с : cs) { •
с.setAlignmentX(alignment);
JComponent... cs) { for (JComponent с : cs) { с.setAlignmentY(alignment) ;
}
}
// далее идут методы, описанные ранее
}
Теперь, создавая интерфейс с помощью менеджера блочного расположения, смело добавляйте любые нужные вам компоненты, а потом просто передайте массив ссылок на них в один из наших методов. После этого все будет работать именно так, как нужно, и даст отличный результат. Остается заметить, что более или менее сложный интерфейс не обойдется одной панелью с блочным расположением, и в таком случае для всех вложенных панелей также следует задать единое выравнивание.
Если вы помните, в предыдущем разделе был показан пример, который почему-то работал не так, как нам хотелось. Теперь понятно, почему — у панели было центральное выравнивание, а у кнопки — выравнивание по левой границе. Используя новые методы класса BoxLayoutUtils, можно легко согласовать параметры выравнивания всех компонентов, и они займут положенные им места, задуманные нами с самого начала.
Отформатировать таблицу по СТП МГУПИ
Отформатировать текст по СТП МГУПИ, ввести формулы с помощью инструмента MSEquation