Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SPO 25-34.docx
Скачиваний:
6
Добавлен:
01.04.2025
Размер:
524.83 Кб
Скачать

Менеджер GridLayout

Менеджер GridLayout размещает компоненты в двумерной сетке (иногда такое размещение называют табличным). Число строк и столбцов сетки следует задавать при создании экземпляра объекта GridLayout. Компоненты размещаются слева направо по строкам созданной таблицы в том порядке, в котором они заданы методом add().

Конструкторы, определенные в классе GridLayout:

GridLayout()

GridLayout(int numRows, int numColumns)

GridLayout(int numRows, int numColumns, int horz, int vert)

Конструктор по умолчанию задает таблицу, в которой одна строка, а число столбцов определяется в зависимости от количества размещаемых компонентов по принципу: каждый компонент в своем столбце. Вторая форма конструктора определяет размещение с указанным числом строк и столбцов. Третья форма конструктора позволяет задать между ячейками таблицы горизонтальные и вертикальные промежутки. Указание нулевого количества строк или столбцов означает, что менеджер компоновки создает нужное число строк и столбцов в зависимости от числа размещаемых компонентов. Также следует заметить, что если одновременно указано ненулевое число строк и столбцов, то заданное значение для числа столбцов игнорируется, как если бы в качестве этого параметра был задан 0. Вместо этого, количество столбцов определяется исходя из количества строк и числа размещаемых компонентов (для каждого компонента – своя ячейка). Параметр, отвечающий за количество столбцов действует только в том случае, если количество строк указано равным 0 (тогда количество столбцов равно заданному, а количество строк зависит от числа размещаемых компонентов).

Менеджер CardLayout

Менеджер компоновки CardLayout показывает в контейнере только первый компонент. Остальные компоненты лежат под первым в определенном порядке как игральные карты в колоде. Их расположение определяется порядком, в котором написаны методы add(). Следующий компонент можно показать методом

next(Container c)

предыдущий

previous(Container c)

первый

first(Container c)

последний

last(Container c)

Аргумент этих методов – ссылка на контейнер, в который помещены компоненты, обычно this.

В классе CardLayout 2 конструктора:

CardLayout()

Конструктор по умолчанию не отделяет компонент от границ контейнера

CardLayout(int hgap, int vgap)

Данный конструктор задает горизонтальные и вертикальные промежутки между компонентом и границами контейнера.

  1. GUI: класс Graphics, модель обработки событий.

При создании компонента автоматически формируется его графический контекст (graphics context). Контекст содержит текущий и альтернативный цвет рисования и цвет фона, текущий шрифт для вывода текста, систему координат (см.рис.9.2). Управляет контекстом класс Graphics. Т.к. графический контекст сильно зависит от конкретной графической платформы, этот класс является абстрактным. Каждя JVM реализует методы этих классов, создает их экземпляры для компонента. Получить ссылку на созданный графический контекст можно с помощью метода

Graphics getGraphics()

После получения cсылки на графический контекст, можно пользоваться методами класса Graphics для работы с графикой и текстом. Основные методы класса Graphics представлены в таблице

Метод

Описание

drawLine(int x1,int y1, int x2, int y2)

Вычерчивает текущим цветом отрезок прямой между точками (x1,y1) и (x2,y2)

drawRect(int x, int y, int width, int height)

Чертит прямоугольник со сторонами, параллельными краям экрана, задаваемый координатами верхнего угла (x,y), шириной width и высотой height

draw3DRect(int x, int y, int width, int height, boolean raised)

Чертит прямоугольник, «выделяющийся» из плоскости рисования, если raised = true и «вдавленный» в плоскость, если raised = false

drawOval(int x, int y, int width, int height)

Чертит овал, вписанный в прямоугольник, заданный аргументами метода (если width = height – окружность)

drawArc(int x, int y, int width, int height, int startAngle, int arc)

Чертит дугу овала, вписанного в прямоугольник, заданный первыми четырьмя аргументами. Дуга имеет величину arc градусов и отсчитывается от угла startAngle. Угол отсчитывается в градусах от оси Ox. Положительный угол отсчитывается против часовой стрелки, отрицательный – по часовой стрелке.

drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)

Чертит прямоугольник с закругленными краями. Закругления вычерчиваются четвертинками овалов, вписанных в прямоугольники шириной arcWidth и высотой arcHeight, построенные в углах основного прямоугольника.

drawPolyline(int xPoints[], int yPoints[], int nPoints)

Чертит ломаную линию с вершинами в точках (xPoints[i], yPoints[i]) и числом вершин nPoints

drawPolygon(int xPoints[], int yPoints[], int nPoints)

Чертит замкнутую ломаную с вершинами в точках (xPoints[i], yPoints[i]) и числом вершин nPoints

drawPolygon(Polygon p)

Чертит замкнутую ломаную, вершины которой заданы объектом p класса Polygon (этот класс подробнее рассматривается ниже)

fillRect(int x, int y, int width, int height)

Эти методы аналогичны соответствующим методам draw…(), но в отличие от них вычерчивают фигуры, залитые текущим цветом

fill3DRect(int x, int y, int width, int height, boolean raised)

fillOval(int x, int y, int width, int height)

fillArc(int x, int y, int width, int height, int startAngle, int arc)

fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)

fillPolyline(int xPoints[], int yPoints[], int nPoints)

fillPolygon(int xPoints[], int yPoints[], int nPoints)

fillPolygon(Polygon p)

drawString(String s, int x,

int y)

Выводит строку s. Вывод начинается  с позиции (x,y).

drawBytes(byte b[],int offset, int length, int x, int y)

Выводит length элементов массива b, начиная с индекса offset. Вывод начинается  с позиции (x,y).

drawChars(char ch[],int offset, int length, int x, int y)

Выводит length элементов массива ch, начиная с индекса offset. Вывод начинается  с позиции (x,y).

модель обработки событий

Современные версии языка основываютя на модели делегирования событий. Основа модели делегирования событий очень проста: источник событий генерирует события и посылает их одному или нескольким слушателям.

Событие - это объект, описывающий изменение состояния источника события. Взаимодействие с элементами GUI приводит к генерации события. Любые действия с объектами GUI такие как, нажатие на кнопку, щелчок мыши, нажатие на клавиши клавиатуры приводят к генерации событий. Поэтому прямое или косвенное взаимодействие с элементами GUI, клавиатурой, мышью генерирует Событие. События могут генерироваться и в других случаях таких как, истечение времени по таймеру, начало и прекращение взаимодействия с экземпляром приложения, подтверждение или откат транзакции и другие.  Java AWT связывается при возникновении каких-либо действий с програмой, используя События и вызывая соответствующие методы для их обработки.

Источник события - это объект, который генерирует события. Когда внутреннее состояние объекта изменяется, он генерирует событие. Один источник событий может генерировать несколько видов Событий. Источник может регистрировать слушателей. Слушателю дается право на прием событий определенного типа. Источник событий имеет набор методов для регистрации одного или нескольких слушателей. Каждый тип событий имеет свой метод для регистрации. Общая форма методов: public void addListener (TypeListener e). Здесь, ТипСобытия имя события, параметр е -объектная ссылка на слушателя событий. Например,addKeyListener () метод регистрирующий события клавиатуры. Когда слушатели зарегистрированы, они получают уведомление, когда источник событий генерирует событие. Это и есть широковещание события. Некоторые источники позволяют зарегистрировать, только одного слушателя. В противном случае произойдет выброс исключения, чтобы этого не произошло необходимо использовать метод set<TunCoбытия>Listener . В этом случае вещание будет производится только одному слушателю.

  1. Многопоточность: понятие потока, способы создания нити, состояния потоков

Один поток – это одна единица исполнения кода. Каждый поток последовательно выполняет инструкции процесса, которому он принадлежит, параллельно с другими потоками этого процесса.

Итак, потоки в Java. Основа их – класс java.lang.Thread. Этот класс позволяет создать поток и запустить его на выполнение.

Существует два пути создания потока. Первый – наследование от класса java.lang.Thread и переопределение его метода run. Второй – реализация интерфейса java.lang.Runnable и создание потока на основе этой реализации. В принципе это методы эквивалентны, разница в деталях. Наследование от java.lang.Thread делает его единственным родителем класса, что не всегда удобно.

После того, как поток завершил работу, перестартовать его НЕЛЬЗЯ. Попытка вторичного вызова start приведет к исключению IllegalThreadStateException.

Таким образом, простейший поток может быть реализован так:

public class SampleThread extends Thread{

public SampleThread(){

super();

}

public void run(){

System.out.println ("Hello world!");

}

public static void main(String[] args){

Thread t = new SampleThread();

t.start();

}

}

Или так:

public class SampleRunnable implements Runnable{

public SampleRunnable(){

super();

}

public void run(){

System.out.println ("Hello world!");

}

public static void main(String[] args){

Runnable r = new SampleRunnable();

Thread t = new Thread(r);

t.start();

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]