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

Рекомендации по расположению и класс 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) ;

)

}

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

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

Далее вводим новый вектор неизвестных z = у — XSу (аналог перехода к урав­нению (8)) или умножаем обе части системы (10) слева на матрицу (Е — АS)-1 (аналог перехода к уравнению (9)). В обоих случаях получаем новую систему уравнений вида

u-Pu = g. (11)

Справедливо следующее утверждение.

Если ядро К(х, s) непрерывно, то

Таким образом, получаем систему уравнений, для решения которой может быть эффективно применен метод простой итерации.

При реальном решении задач часто в явном виде системы уравнений (8), (9), (11) не выписываются; на каждом шаге необходимые вспомогательные вели­чины, например в случае (11) значения векторов — AS)-1hпри различных h, вычисляются заново. В результате этого трудоемкость метода оказывается довольно малой.

Вариант № 12