- •§ 1. Основные понятия теории метода сеток
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Глава 11
- •§ 1. Решение интегральных уравнений методом замены интеграла квадратурной суммой
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Глава 7. Искусство расположения
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •§ 2. Решение интегральных уравнений с помощью замены ядра на вырожденное
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •// 2. Поочередно создаются "полосы", на которые
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Глава 8. Вывод вспомогательной информации
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •// 2. Поочередно создаются "полосы", на которые
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Глава 7. Искусство расположения
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •§ 1. Основные понятия теории метода сеток
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Глава 11
- •§ 1. Решение интегральных уравнений методом замены интеграла квадратурной суммой
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Глава 7. Искусство расположения
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •§ 2. Решение интегральных уравнений с помощью замены ядра на вырожденное
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •// 2. Поочередно создаются "полосы", на которые
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
Рекомендации по расположению и класс LayoutStyle
Как мы уже сказали, расположение компонентов и сам пользовательский интерфейс часто создаются программистами, и времени на визуальный дизайн нет, а зачастую нет и навыков такого дизайна. Рекомендации, подобные тем, что мы только что рассмотрели для внешнего вида Metal, являются настоящим спасением. Чтобы еще более упростить процесс следования подобным рекомендациям при создании интерфейса, в JDK версии 1.6 в пакете javax.swingпоявился класс под названием LayoutStyle, который любезно сообщает, какие расстояния между компонентами следует использовать при создании интерфейса. Применяя его, вы можете отказаться от следования конкретным цифрам и таким образом сделать стиль интерфейса совершенно универсальным, не зависящим даже от его внешнего вида.
Класс LayoutStyleявляется некоторого рода «одиночкой» — всегда имеется только один его экземпляр, доступный всем желающим через статический метод getlnstance(). Экземпляр можно поменять на свой собственный (обычно это делает новый внешний вид приложения, когда вы его устанавливаете). А теперь с помощью простейшего примера проверим, какие расстояния нам предлагает LayoutStyleдля внешнего вида по умолчанию (Metal):
// L^youtStyleTest.java
// Автоматическое определение стиля интерфейса
importjavax.swing.*;
import static javax.swing.LayoutStyle.ComponentPlacement. *;
public class LayoutStyleTest {
public static void main(String[] args) {
SwingUtilities.invokeLater( new Runnable() {
public void run () {
// компоненты
JPanel panel = new JPanel();
JTextField text = new JTextField();
JLabel label = new JLabel("Тест");
// отступ от границы контейнера
LayoutStyle style = LayoutStyle.getlnstance();
System.out.printlnC” + style.getContainerGap ( text, SwingConstants.WEST, panel));
// расстояние между связанными компонентами System.out.println("" + style.getPreferredGap(
label, text, RELATED, SwingConstants.EAST, panel));
' } )) ;
)
}
Запустив пример, мы получим две цифры 12, что совпадает с рекомендациями, которые мы недавно рассмотрели для внешнего вида Metal. Кстати, вспоминая автоматическое разделение компонентов менеджером MigLayout, становится ясно, что расстояние он берет именно из класса LayoutStyle. Таким же образом может работать и групповое расположение GroupLayout, что делает его очень удобным при визуальном расположении компонентов в редакторе NetBeans.
В итоге, при создании интерфейса вполне можно рекомендовать пользоваться услугами класса, если конечно у ваших дизайнеров нет особого мнения. Подобное решение позволяет приложению быть полностью готовым к «выходу в свет» в любо» внешнем виде.
Реализация в коде: вложенные блоки
Попробуем реализовать наш набросок с помощью блоков BoxLayout. Прежде все-го, нам необходимо перейти от чернового рисунка к конкретному плану действий, т* есть определить, где, как и какие мы будем использовать менеджеры расположен;^.
Для этого мы расчертим наш интерфейс линиями так, чтобы компоненты, имеющие одинаковые позиции по вертикали или горизонтали, выстраивались вдоль этих линий (рис. 7.5). Тогда нам не составит труда определить, как построить интерфейс в программе.
Легко сказать — расчертите линиями!» — заявите вы: «Чем при этом следует руководствоваться в первую очередь?» Это верно, но рецептов в таких случаях, как правило, не существует. В случае использования блочного подхода можно принять во внимание следующее:
Выбирайте расположение так, чтобы при увеличении размеров окна интерфейс становился по возможности более функциональным, не теряя при этом во внешней привлекательности. В нашем случае этого легко добиться: нужно строить интерфейс так, чтобы текстовые поля при увеличении размеров позволяли бы увидеть больше информации, а связанные с ними надписи не уплывали от них в сторону. Подобные соображения подсказывают, что нужно использовать горизонтальные «полосы», а не вертикальные.
Так как менеджер BoxLayout разделяет свободное пространство поровну между всеми компонентами, которые могут «расти» (мы обсудили это в разделе о заполнителях), нужно тщательно продумать, куда будет «уходить» свободное место.«Необходимо помнить о выравнивании компонентов по осям.
Очень часто достаточно просто взглянуть на набросок интерфейса, чтобы увидеть возможность применения того или иного менеджера расположения, особенно это касается групп компонентов одинаковых размеров (сразу появляется работа для табличного расположения GridLayout). Однако помните, как неаккуратно работают простые менеджеры с расстоянием между компонентами, и если с ними начнутся проблемы, обычно можно получить тот же результат, прибегнув к блочному расположению. А трудности с блочным расположением практически всегда сводятся к несогласованному выравниванию компонентов по осям, но для нас это не проблема.
Что же, с помощью рисунка 7.5 легко увидеть, какие менеджеры расположения нам могут помочь. Учитывая соображения о расширении текстовых полей в ширину, интерфейс построим, основываясь на горизонтальных «полосах». Для них выберем блочное расположение по оси X.
Поклонники последовательного расположения FlowLayoutмогут сказать, что оно позволит создать эти полосы еще проще, чем блочное. Сперва кажется, что это действительно так, но стоит вспомнить о некоторых хитростях в расположении FlowLayout: при
уменьшении окна текстовые поля могут оказаться под надписями, так как FlowLayout переносит компоненты на другие строки, если им не хватает места. Кроме того, если впоследствии понадобится дополнить интерфейс и использовать разные расстояния между компонентами, с расположением FlowLayout возникнут трудности, в то время как блочное расположение позволит свободно наращивать и изменять интерфейс.
Итак, расстояние зададим распорками, а размеры надписей сделаем одинаковыми вручную. Как видно из рисунка 7.5, выравнивание должно быть центральным. А вот группа кнопок нами уже создавалась с помощью пары из табличного и последовательного расположения с выравниванием по правому краю. Эту идею используем и здесь. (Кстати, в качестве нехитрого упражнения можете реализовать эту же «полосу» с помощью одной только панели с блочным расположением.) Для получения окончательного результата все созданные горизонтальные панели уложим друг на друга с помощью менеджера вертикального блочного расположения. В таком случае эти панели необходимо согласованно выровнять по левую сторону оси.
Осталось только разработать набор инструментов, который позволил бы нам при
создании пользовательского интерфейса не переписывать раз за разом одни и те же фрагменты кода, придающие компонентам одинаковые размеры и располагающие их
в соответствие с некоторыми рекомендациями Sun. Это будет класс с набором статических методов:
// com/porty/swing/GUITools.java // Набор инструментов для окончательной // шлифовки и придания блеска интерфейсу package com.porty.swing;
}
// позволяет исправить оплошность в
// размерах текстового поля JTextField
public static void fixTextFieldSize (JTextField field) {
Dimension size = field.getPreferredSize () ;
// чтобы текстовое поле по-прежнему могло / / увеличивать свой размер в длину size.width = field. getMaximumSize (). width;
// теперь текстовое поле не станет выше // своей оптимальной высоты field. setMaximumSize (size) ;
)
}
Отформатировать таблицу по СТП МГУПИ
Отформатировать текст по СТП МГУПИ, ввести формулы с помощью инструмента MSEquation
Далее вводим новый вектор неизвестных z = у — XSу (аналог перехода к уравнению (8)) или умножаем обе части системы (10) слева на матрицу (Е — АS)-1 (аналог перехода к уравнению (9)). В обоих случаях получаем новую систему уравнений вида
u-Pu = g. (11)
Справедливо следующее утверждение.
Если ядро К(х, s) непрерывно, то
Таким образом, получаем систему уравнений, для решения которой может быть эффективно применен метод простой итерации.
При реальном решении задач часто в явном виде системы уравнений (8), (9), (11) не выписываются; на каждом шаге необходимые вспомогательные величины, например в случае (11) значения векторов (Е — AS)-1hпри различных h, вычисляются заново. В результате этого трудоемкость метода оказывается довольно малой.
Вариант № 12