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

Для краткости мы опустили конструктор и метод main(), так как они абсолютно не от­личаются от варианта с блочным расположением. Одно отличие — класс примера будет называться LoginDialog2. В том же самом методе createGUIQ создается интерфейс приложе­

ния. В случае с нашим диалогом входа в систему гибкая сетка, особенно реализованная с помощью менеджера MigLayout, дает на выходе гораздо более компактный результат, в том числе и благодаря тому, что последний автоматически вставляет расстояния меж­ду компонентами и между границами контейнеров и окна. Если вы вспомните раздел, посвященный менеджеру MigLayout, вы вполне сможете понять код примера, единствен­ная хитрость была применена при создании двух кнопок — ячейку пришлось разбить на две — по одной на каждую кнопку, и вручную указать, что кнопки должны быть выровне­ны по правому краю ключевым словом align. Запустив пример, мы получим практически идентичное диалоговое окно.

Однако разница с. блочным расположением все же есть — менеджер MigLayoutпо умолчанию использует собственные расстояния между компонентами, а не те, что реко­мендуются для внешнего вида Metal. В принципе, ничего страшного в этом нет, расстоя­ния можно указывать вручную, либо согласиться с тем, что предлагает MigLayout. Анало­гичный подход можно реализовать и с помощью стандартного менеджера GridBagLayout. однако код в этом случае получится намного сложнее и пространнее.

Не стоит думать, что вариант гибкой сетки всегда выигрывает у блочного подхода, как это получилось в случае с диалогом входа в систему. Если компонентов много, и они не всегда выровнены по сетке, попытки разместить их все в единой сетке могут быть слишком сложны и образовывать в результате код, который трудно прочитать и поддер­живать. В таком случае к вашим услугам блочная техника расположения, или несколько более простых вложенных расположений. В принципе, это аналогия с расположением содержимого для HTML-страниц: у вас есть вариант пользоваться для расположения та­блицами (<table>), или применять блоки (<div>или <span>).

Резюме

Расположение компонентов в контейнере сродни искусству, хотя используемые для этого менеджеры расположения просты для понимания и применения. Все дело в ток что вложенные расположения зачастую образуют непредсказуемые комбинации, пове­дение которых может быть нетривиально и совсем не похоже на то, чего вы могли бы ожидать от простого менеджера расположения. Тем не менее, если помнить несложные правила, разумно комбинировать блочные и сеточные стратегии и не забывать о фант- зии и способностях стандартных менеджеров, можно быстро и просто добиться любог: расположения компонентов.

public class LoginDialog extends JDialog { public LoginDialog(JFrame pareift) { super(parent, "Вход в систему");

// удаление окна при закрытии setDefaultCloseOperation(DISPOSE_ON_CLOSE);

// добавляем расположение в центр окна

add(createGUI());

// задаем предпочтительный размер

pack () ;

// выводим окно на экран setVisible(true) ;

}

// этот метод будет возвращать панель с

// созданным расположением

private JPanel createGUI() {

// 1. Создается панель, которая будет содержать

// все остальные элементы и панели расположения

JPanel main =

BoxLayoutUtils.createVerticalPanel();

// Чтобы интерфейс отвечал требованиям Java,

// необходимо отделить его содержимое от

// границ окна на 12 пикселов.

// Для этого используем пустую рамку

main.setBorder(

BorderFactory.createEmptyBorder(12,12,12,12));

// 2. Поочередно создаются "полосы", на которые

// был разбит интерфейс на этапе анализа

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

JPanel name =

BoxLayoutUtils.createHorizontalPanel() ;

JLabel nameLabel = new JLabel("Имя:");

name.add(nameLabel);

name.add(BoxLayoutUtils.createHorizontalStrut(12)); JTextField nameField = new JTextField(15); name.add(nameField);

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

JPanel password =

BoxLayoutUtils.createHorizontalPanel() ;

JLabel pas-swrdLabel = new JLabel ("Пароль :") ; password.add(passwrdLabel) ;

password.add(BoxLayoutUtils.createHorizontalStrut(12)) JTextField passwrdField = new JTextField(15); password.add(passwrdField);

// в) ряд кнопок

JPanel flow = new JPanel( new FlowLayout(

FlowLayout.RIGHT, 0, 0) );

JPanel grid = new JPanel( new GridLayout(

1,2,5,0) ) ;

JButton ok = new JButton("OK");

JButton cancel = new JButton("Отмена"); grid.add(ok); grid.add(cancel); flow, add (grid) ;

// 3. Проводятся необходимые действия по // выравниванию компонентов, уточнению их // размеров, приданию одинаковых размеров // а) согласованное выравнивание // вложенных панелей BoxLayoutUtils.setGroupAlignmentX(

Component.LEFT_ALIGNMENT, name, password, main, flow) ;

//б) центральное выравнивание надписей // и текстовых полей BoxLayoutUtils.setGroupAlignmentY(

Component.CENTER_ALIGNMENT,

nameField, passwrdField, nameLabel, passwrdLabel); // в) одинаковые размеры надписей к текстовым полям GUITools.makeSameSize(nameLabel, passwrdLabel);

// д) устранение "бесконечной" высоты текстовых полей GUITools.fixTextFieldSize(nameField);

GUITools.fixTextFieldSize(passwrdField);

// 4. Окончательный "сбор" полос в интерфейс main.add(name);

main.add(BoxLayoutUtils.createVerticalSbrut(12)) ; main.add(password);

main.add(BoxLayoutUtils.createVerticalStrut(17)); main, add (flow) ;

// готово return main;

}

// тестовый метод для проверки диалогового окна

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

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

Вариант № 14