Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_Po_Tp.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.44 Mб
Скачать

1.1 Панели

Панель (класс Panel) является наиболее общим видом контейнеров в Java. Панель можно использовать как внутри другого контейнера (например, фрейма или апплета), так и непосредственно в окне WWW-броузера. Когда интерфейс состоит из большого количества элементов, почти всегда есть смысл объединить группы связанных по смыслу элементов с помощью панелей. Панель может иметь свой собственный менеджер размещения (по умолчанию это FlowLayout), независимый от менеджера размещения контейнера, в который эта панель входит.

Класс Panel имеет подкласс Applet, так что апплеты рассматриваются как расширение класса панелей. Панели очень часто используются в апплетах, имеющий сложный графический интерфейс пользователя.

Создание панелей

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

Например, для создания в окне апплета двух панелей, разделяющих его по горизонтали, следует выбрать режим GridLayout, используя метод setLayout() контейнера, в данном случае апплета:

setLayout(new GridLayout(2,1)); // установка менеджера размещения

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

Далее нужно создать объекты класса Panel:

Panel top, bottom; // объявление панелей

top=new Panel(); // создание верхней панели

bottom=new Panel(); // создание нижней панели

Добавление панелей в контейнеры

Для добавление любых компонент (и панелей тоже) в любой контейнер используется метод add() контейнера:

add(top); // ввод верхней панели в контейнер (например, в апплет)

add(bottom); // ввод нижней панели в контейнер (например, в апплет)

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

top.setLayout(new GridLayout(1,2)); // установка менеджера размещения

Panel left, right; // объявление панелей

left=new Panel(); // создание левой панели

right=new Panel(); // создание правой панели

top.add(left); // ввод левой панели в панель top

top.add(right); // ввод правой панели в панель top

Добавление компонент в панели

Для добавления компонент в панели (элементов управления или других контейнеров) необходимо указывать, в какую панель вводится тот или иной компонент, например:

Button btn1, btn2; // объявление кнопок

btn1=new Button("Yes"); // создание первой кнопки

btn2=new Button("Cancel"); // создание второй кнопки

bottom.add(btn1); // ввод первой кнопки в панель bottom

bottom.add(btn2); // ввод второй кнопки в панель bottom

Рисование в окне панели

Для того, чтобы что-то нарисовать, необходимо сначала получить контекст отображения окна. Методу paint() компонент передается необходимый контекст отображения через параметр.

Первый способ рисования в панелях заключается в том, что в методе paint() контейнера, содержащего эту панель, можно получить контекст отображения панели, а затем приступить к рисованию. Например, рассмотрим процесс рисования в панели DrawPanel в методе paint() апплета:

public void paint(Graphic g) // метод апплета, g - контекст апплета

{ // gDrawPanel контекст панели DrawPanel

Graphics gDrawPanel=DrawPanel.getGraphics();

// теперь можно рисовать в окне панели

gDrawPanel.drawString("Text inside panel",10,10);

}

Второй способ рисования в панелях основан на создании собственного класса на базе класса Panel и переопределения в этом классе метода paint(). Естественно, этому методу paint() передается в качестве параметра контекст отображения панели.

Обработка и передача событий

Когда компонент, расположенный внутри панели, получает событие, этому компоненту первому предоставляется возможность его обработать. Если компонент не обработает событие до конца (и не запретит другим компонентам продолжать обработку), то событие передается другим компонентам панели и, в конце концов, - панели. Если панель находится внутри другой панели и не запретит дальнейшую обработку события, то после завершения обработки внутренней панелью событие перейдет ко внешней панели. Однако, если существует множество панелей, вложенных одна в другую, передача событий может усложниться. Например, существует пять панелей, одна внутри другой: panel5 находится внутри panel4, panel4 - внутри panel3, panel3 - внутри panel2, panel2 - внутри panel1, а panel1 - внутри апплета. При нажатии на кнопку на panel5 первой событие нажатия кнопки получит сама кнопка, Затем, если обработка события не была прервана, то оно перейдет к panel5, и дальнейшую обработку события делает panel5. Если panel5 не прервет дальнейшую обработку, то событие затем перейдет к panel4 и так до тех пор, пока не дойдет до апплета.

При использовании вложенных панелей важно понять, что порядок их добавления определяет их иерархию. Иерархия обработки событий обратна последовательности добавления компонентов. Если событие не было до конца обработано ни одним компонентом и даже апплетом, то оно передается системе управления, в которой выполняется данная программа. Эта система отвечает за конечную обработку события и его завершение.

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