Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5 метод по вып практ раб.doc
Скачиваний:
24
Добавлен:
17.11.2018
Размер:
549.89 Кб
Скачать

Лабораторная работа №2 Разработка визуального приложения.

Данная лабораторная работа посвящена построению приложений с использованием графического интерфейса библиотек awt и swing. Все задачи предполагают решение подзадач управления событиями и\или сложной динамикой отображения и требуют построения графического приложения. В сети Интернет (помимо ссылок, указанных в прошлой лабораторной работе) рекомендуется также:

http://www.ibm.com/developerworks/ru/edu/j-dw-java-intswing-i.html

http://www.mexmat.sgu.ru/sites/chairs/prinf/materials/java/lesson8.htm

http://www.uic.rsu.ru/doc/programming/java/TIJ2e.ru/Chapter13.html

Графические инструменты в языке Java реализованы с помощью двух пакетов:

AWT (для доступа загружается пакет java.awt)содержит набор  классов, позволяющих выполнять графические операции и создавать элементы управления.

Swing (для доступа загружается пакет import.javax.swing) содержит новые классы, в основном аналогичные AWT. К именам этих классов добавляется J (JButton, JLabel и т. д.).

Работа с окнами и графикой в системе Java осуществляется в апплетах и графических приложениях. Апплеты – это небольшие программы, встраиваемые в веб-документ и использующие для своей визуализации средства веб-броузера. Графические приложения сами отвечают за свою прорисовку. Апплеты используют окна, производные от класса Panel, графические приложения используют окна, производные от класса Frame, порожденного от класса Window.

Иерархия классов применяемых для построения визуальных приложений приведена на рисунке 1.

Рис.2. Иерархия классов основных графических компонент.

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

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

Графические приложения используют класс Window (окно верхнего уровня), который сам непосредственно для вывода не используется. Для этого применяется его подкласс Frame. С помощью объекта типа Frame создается стандартное окно со строкой заголовка, меню, размерами.

Еще один используемый для вывода класс Canvas не является подклассом Container, это пустое окно, в котором можно рисовать.

В настоящее время при использовании управляющих компонентов в апплетах принято использовать интерфейсные классы, в которых компонент на экране создается средствами Java и в минимальной степени зависит от платформы и оборудования. Такого рода классы компоненты были объединены в библиотеку под названием Swing.

import javax.swing.*;

import java.awt.*;

public class MyJApplet extends JApplet {

JLabel lbl = new JLabel("Swing-applet!");;

public void init() {

Container c = getContentPane();

c.add(lbl);

}

}

Рис.3. Простой аплет

В этой программе производится помещение текстовой метки JLabel на форму в апплете. Конструктор класса JLabel принимает объект String и использует его значение для создания метки. Автоматически вызываемый при загрузке апплета метод init() обычно отвечает за инициализацию полей и размещение компонента на форму. Для этого вызывается метод add() класса Container, который помещает компонент в контейнер. Метод add() сразу не вызывается, как в библиотеке AWT. Пакет Swing требует, чтобы все компоненты добавлялись в "панель содержания" формы ContentPane, так что требуется сначала вызывать метод getContentPane() класса JApplet для создания ссылки на объект, как часть процесса add().

import java.awt.*;

import javax.swing.*;

public class InitDemo extends JApplet {

private int i;

private String msg = null;

private Color c;

public void init() {

c = new Color(0, 0, 255);

this.setBackground(c);

this.setForeground(Color.white);

setFont(new java.awt.Font("Courier", 1, 14));

msg = " initialization";

i = 1;

}

public void start() {

int j = i * 25;

if (j < 255){

c = new Color (j, j, 255 - j); }

setBackground(c);

String str = Integer.toString(i);

msg += " " + str;

}

public void paint(Graphics g)

{ g.drawString(msg, 30, 30);}

public void stop() {

i++;

msg = "start() - stop()";

}

}

Рис.4. Исследование методов аплета

При работе со шрифтами можно узнать, какие из них доступны на компьютере, и использовать их. Для получения этой информации применяется метод getAvailableFontFamilyNames() класса GraphicsEnvironment. Метод возвращает массив строк, содержащий имена доступных семейств шрифтов.

import javax.swing.*;

import java.awt.*;

public class FontDemo extends JApplet {

private int i;

private String msg = null;

private String[] fonts;

public void init() {

GraphicsEnvironment ge =

GraphicsEnvironment.getLocalGraphicsEnvironment();

fonts = ge.getAvailableFontFamilyNames();

}

public void start() {

int j = i;

if (j > fonts.length) i = 0;

else setFont(new Font(fonts[j], 1, 14));

String str = Integer.toString(i);

msg = fonts[j] + " " + str;

i++;

}

public void paint(Graphics g) {

g.drawString(msg, 30, 30);

}

}

Рис.5. Вывод строки.

Библиотека Swing, также как и библиотека AWT, поддерживает набор графических методов класса Graphics. Вся графика рисуется относительно окна. Вывод в окно выполняется через графический контекст с помощью методов paint() или update(). Класс Graphics, объект которого передается в контекст, определяет функции рисования.

  Фреймы

В отличие от апплетов графические приложения, расширяющие класс java.awt.Frame или его подкласс jawax.swing.JFrame, не нуждаются в броузере. Для создания графического интерфейса приложения необходимо предоставить ему объект Frame или JFrame, в который будут помещаться используемые приложением компоненты GUI.

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

import java.awt.*;

import java.awt.event.*;

public class WindowApp extends Frame{

String msg = "Window-Application";

int x1 = 30, y1 = 50, x2 = 200, y2 = 50;

public void paint(Graphics g){

g.drawString(msg, 30, 40); /*вывод строки с позиции х=30 y=40*/

g.drawLine(x1, y1, x2, y2);//вывод линии

int x = 30, y = 200, width = 150, height = 100;

Color c = new Color(255, 100, 100);/* установка красного цвета */

g.setColor(c);

g.drawOval( x, y, width, height);//овал

g.drawArc (x + 100, y + 50, width - 50, height, 0, 360);//сектор

}

public static void main(String args[]){

WindowApp fr = new WindowApp();

fr.setSize(new Dimension(500, 400));/*устанавливается размер окна*/

fr.setTitle("awt-Application");//заголовок

fr.setVisible(true); //видимость

fr.repaint(); //перерисовка - вызов paint()

}

}

Рис.6. создание объекта класса Frame

Метод main() вызывает методы установки параметров окна и метод перерисовки окна repaint(). Большое число методов класс Frame наследует по иерархии от классов Component, Container и Window. Класс JFrame из библиотеки Swing является подклассом класса Frame.

В следующем апплете проверяется принадлежность точки нажатия "мыши" прямоугольнику.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class MyRect extends JApplet implements MouseListener {

   Rectangle a = new Rectangle(20, 20, 100, 60);

public void init() {

 setBackground(Color.yellow);

//регистрация данного класса в качестве блока прослушивания

 addMouseListener(this);

     }

//реализация всех пяти методов интерфейса MouseListener

public void mouseClicked(MouseEvent me) {

   int x = me.getX();

   int y = me.getY();

 if (a.inside(x,y))

  System.out.println("клик в зеленом прямоугольнике");

     else   System.out.println("клик в желтом фоне");

}

//реализация следующих методов пустая

public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}

public void mousePressed(MouseEvent e) {}

public void mouseReleased(MouseEvent e) {}

public void paint(Graphics g) {

    g.setColor(Color.green);

    g.fillRect(a.x, a.y, a.width, a.height);

  }

}

Способ обработки событий в компонентах Swing - это интерфейс (графические компоненты) и реализация (код, который запускается при возникновении события). С одним компонентом может быть связано несколько событий. Каждое событие содержит сообщение, которое может быть обработано в разделе реализации.

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