- •§ 1. Основные понятия теории метода сеток
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Глава 11
- •§ 1. Решение интегральных уравнений методом замены интеграла квадратурной суммой
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Глава 7. Искусство расположения
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •§ 2. Решение интегральных уравнений с помощью замены ядра на вырожденное
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •// 2. Поочередно создаются "полосы", на которые
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Глава 8. Вывод вспомогательной информации
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •// 2. Поочередно создаются "полосы", на которые
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Глава 7. Искусство расположения
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •§ 1. Основные понятия теории метода сеток
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Глава 11
- •§ 1. Решение интегральных уравнений методом замены интеграла квадратурной суммой
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Глава 7. Искусство расположения
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •§ 2. Решение интегральных уравнений с помощью замены ядра на вырожденное
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
- •// 2. Поочередно создаются "полосы", на которые
- •Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
Вариант № 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(); } });
}
}
Отформатировать таблицу по СТП МГУПИ
Отформатировать текст по СТП МГУПИ, ввести формулы с помощью инструмента MS Equation
§ 1. Основные понятия теории метода сеток
На первых этапах практического решения задач для уравнений с частными производными применялись в основном вариационные и другие методы, где приближенное решение получается в виде некоторой аналитической формулы. При решении некоторых задач такие методы применяются и в настоящее время.
В последующий период наиболее актуальными для решения являлилсь задачи динамики газа и жидкости, где подобные методы практически неприменимы. На решение этих задач были направлены усилия крупнейших математиков, что имело, в частности, своим следствием создание и широкое продвижение сеточных методов решения уравнений с частными производными. В настоящее время эти методы наряду с вариационно- и проекционно-разностными (метод конечных элементов) являются наиболее распространенными. При решении задач сеточными методами мы получаем совокупность приближенных значений решения в некоторой конечной системе точек. В случае необходимости можно построить формулу (например, интерполяционную) для приближенного представления решения во всей области.
Вариант № 2
Отформатировать текст по стп мгупи. Оформить рисунки и программный кода
Наш первый менеджер расположения, получивший название VerticalLayout, как и положено любому менеджеру расположения, реализует интерфейс LayoutManager. Первый метод, который нам придется реализовать, одновременно является и самым важным — именно в методе layoutContainer() менеджер расположения должен расположить все компоненты, содержащиеся в контейнере, по своим местам. Поведение нашего менеджера расположения незамысловато: он размещает компоненты в вертикальный ряд, отделяя их расстоянием в 5 пикселов (расстояние хранится в переменной GAP), все компоненты имеют предпочтительный размер. Чтобы реализовать такое поведение, понадобились следующие действия: мы просмотрели массив содержащихся в контейнере компонентов (получить этот массив позволяет метод контейнера getComponentsO), получили для каждого из компонентов предпочтительный размер и указали (методом setBounds()) позицию компонента на экране, постоянно отслеживая текущую координату по оси Y, увеличивая ее на высоту очередного компонента с учетом «декоративного» расстояния из переменной GAP. Так все компоненты будут располагаться друг над другом, отделенные отступами4. Обратите внимание, что мы отделяем компоненты и от левой границы контейнера на то же самое расстояние.
Далее следуют два метода, служащие для добавления и удаления компонентов из списка компонентов менеджера расположения. Заметьте, что метод addLayoutComponent() позволяет ассоциировать с компонентом строку, которая может быть использована менеджером расположения как рекомендация относительно того, где именно программист- клиент желает видеть данный компонент. Наш простой менеджер расположения не поддерживает подобных рекомендаций, просто располагая все компоненты контейне- j ра в вертикальный ряд, однако более сложные расположения, к примеру, полярное pa:- j положение BorderLayout, которое мы вскоре изучим, используют эти строки для бог.еп 1 тонкого управления местом компонента в контейнере.
Следующими являются два метода, сообщающие предпочтительный (preferredLayotr- | Size()) и минимальный (minimumLayoutSize()) размеры контейнера при использован»?* I в нем данного менеджера расположения. Когда в контейнере работает менеджер pi: Щположения, именно он запрашивается о том, каков должен быть предпочтительный ап I минимальный размер контейнера, и это вполне объяснимо: менеджер расположения par- пределяет место на экране, так что он должен знать, сколько этого места в контейнере 1 требуется для правильной работы. Для нашего простого менеджера расположения Я нимальный и предпочтительный размеры контейнера совпадают, их вычисляет метсж 1 calculateBestSize(). Вычислить оптимальный размер контейнера несложно. Для начала ян в цикле ищем компонент с самой большой длиной, прибавляем к найденной длине pa»- 1 мер отступа от левой границы контейнера из поля GAP и получаем оптимальнуюдтщя контейнера. Для высоты вычисления чуть сложнее: приходится складывать высоты всшЛ
’ Обратите внимание, что наш просто менеджер расположения не принимает во внииаяшЛ видим ли компонент на экране, когда отсчитывает позиции. Компонент вполне может находзга^Я в контейнере, но быть невидимым, и тогда его следует исключать из расчетов. Для простоты анЛ мера мы опустили эту проверку.
находящихся в контейнере компонентов, а также прибавлять к ним высоту отступа между ас ем и компонентами. Полученная сумма и является оптимальной высотой контейнера.
После реализации всех методов интерфейса LayoutManagerмы сможем проверить но-зый менеджер расположения в работе. Для этого в методе mainQмы создаем небольшое : хно с рамкой JFrameи добавляем в это окно панель JPanel, устанавливая для нее наш новый менеджер расположения. В панель добавляется пара кнопок и довольно большое “екстовое поле, после чего окно выводится на экран. Чтобы оценить правильность расчета нашим менеджером оптимальных размером, мы вызываем метод раск(), который придает окну предпочтительный размер. Запустив программу с примером, вы сможете : ценить, как компоненты располагаются вертикально друг над другом, и верно ли был проведен расчет оптимальных размеров.
Знание основных принципов работы менеджера расположения и умение быстро на- лисать новый алгоритм расположения компонентов, лучше всего подходящий в вашей ситуации, — мощное оружие, дающее вам неограниченную власть над расположением компонентов и способность быстро создать любой интерфейс. Однако увлекаться написанием собственных менеджеров расположения ни в коем случае не стоит. Прекрасно известно, что код читается гораздо чаще и дольше, чем пишется, а читать и поддерживать код, располагающий компоненты по собственным алгоритмам, совсем непросто. Гораздо проще использовать хорошо изученные стандартные менеджеры расположения, позволяющие с помощью различных приемов получить любое расположение. Этим мы сейчас и займемся.
Стандартные менеджеры расположения
В пакете разработки JDK 1.7 имеется довольно много готовых стандартных менеджеров расположения. Условно их можно разделить на несколько групп: очень простые (к ним относятся FlowLayout, GridLayoutи BorderLayout), универсальные (к таким без всяких сомнений стоит отнести расположения BoxLayout, GroupLayoutи GridBagLayout) и специализированные CardLayoutи SpringLayout).Универсальные менеджеры мы рассмотрим в последнюю очередь и наиболее подробно, а пока быстро «пройдемся» по всем остальным менеджерам.
Полярное расположение BorderLayout
Менеджер BorderLayoutспециально предназначен для обычных и диалоговых окон, потому что позволяет быстро и просто расположить наиболее часто используемые элементы любого окна: панель инструментов, строку состояния и основное содержимое. Для этого окно разбивается им на четыре области, или полюса (отсюда его название), а все оставшееся место заполняется компонентом, выполняющим основную функцию приложения (например, в редакторе это будет текстовое поле, в многооконном приложении — рабочий стол).
Надо сказать, что работает этот менеджер немного не так, как все остальные — чтобы добавить с его помощью компонент, в методе add() необходимо указать дополнительный
параметр, который показывает, в какую область контейнера следует поместить компонент. Ниже перечислены допустимые значения этого параметра.
Значение BorderLayout.NORTHили строка «North» — компонент располагается вдоль верхней (северной) границы окна и растягивается на всю его ширину. Обычно так размещается панель инструментов.
Значение BorderLayout.SOUTHили строка «South» — компонент располагается вдоль нижней (южной) границы и растягивается на всю ширину окна. Такое положение идеально для строки состояния.
Значение BorderL.ayout.WESTили строка «West» — компонент располагается вдоль левой (западной) границе окна и растягивается на всю его высоту, однако при этом учитываются размеры северных и южных компонентов (они имеют приоритет).
Значение BorderLayout.EASTили строка «East» - компонент располагается вдоль правой (восточной) границы окна. В остальном его расположение аналогично западному компоненту.
Значение BorderLayout.CENTERили строка «Center» — компонент помещается в центр окна, занимая максимально возможное пространство/
СОВЕТ
На север помещайте панель инструментов вашего приложения. На юг помещайте строку состояния. Оставляйте западные и восточные зоны окна свободными — только в этом случае панель инструментов можно будет перетаскивать. Для главного окна вашего приложения всегда используйте расположение BorderLayout.
Рассмотрим простой пример. В нем создается окно JFrame, в котором менеджер BorderLayoutиспользуется по умолчанию. Во все доступные зоны добавляются компоненты:
// BorderLayoutSample.java
// Полярное расположение
import javax.swing.*;
import java.awt.*;
public class BorderLayoutSample extends JFrame { public BorderLayoutSample() { super("BorderLayoutSample"); setSize(400, 300);
setDefaultCloseOperation( EXIT_0N_CL0SE );
// добавляемкомпоненты
// в качестве параметров можно использовать строки add(new JButton("Север"), "North"); add(new JButton("Юг") , "South");
// ... или константы из класса BorderLayout add(new JLabel("Запад"), BorderLayout.WEST); add(new JLabel("Восток"), BorderLayout.EAST);
// если параметр не указывать вовсе, компонент // автоматически добавится в центр add(new JButton("Центр"));
// выводим окно на экран setvisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(
new Runnable() { public void run() { new BorderLayoutSample(); ) });
}
)
Отформатировать таблицу по СТП МГУПИ
Отформатировать текст по СТП МГУПИ, ввести формулы с помощью инструмента MSEquation
является приближением к точному решению исходной задачи. Значения решения системы (5)-(6) можно находить последовательно при каждом
Вариант № 3