Title
Приложения
Глава 1
Глава 2
Глава 3
Глава 4
Глава 5
Приложения

на главную   назад   вперед

Реализация простого апплета


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

Пример:"Жизнь апплета" ("Hello, world!")

Ниже представлен простой пример, демонстрирующий жизненный цикл апплета:

   import java.awt.*;    // импортируем классы для создания оконного
                            интерфейса
   import java.applet.*; // импортируем классы для создания апплета

   /**
   * Этот класс демонстрирует жизненный цикл апплета.
   * @author Веселов Роман
   * @author Хивин Алексей
   * @version beta
   */
   public class Life extends Applet {
      /** 
      * Это - конструктор.
      * Он вызывается всегда при создании объекта данного класса.
      */
      public Life() {
         System.out.println("Constructor");
      }

      /**
      * Данный метод вызывается первым.
      * В нем проводится инициализация апплета.
      */
      public void init() {    
         System.out.println("Method init()");
      }
      
      /**
      * Вызывается вторым, после init().
      * Вызывается также для перезапуска апплета.
      * Начинает или продолжает выполнение.
      */
      public void start() {   
         System.out.println("Method start()");
      }

      /**
      * Вызывается, когда апплет остановлен.
      * Приостанавливает выполнение.
      */
      public void stop() {
         System.out.println("Method stop()");
      }

      /**
      * Вызывается, когда апплет завершается.
      * Это - последний выполняемый метод.
      * Выполняет завершающие действия.
      */
      public void destroy() {
         System.out.println("Method destroy()");
      }

      /**
      * Вызывается, когда окно апплета должно быть перерисовано.
      * Показывает содержимое окна (апплета).
      * @param g графический контекст апплета.
      */
      public void paint(Graphics g) {
         g.drawString("Hello, world!",70,50);
         System.out.println("Method paint()");
      }
   }
   

Откомпилировать программу можно командой:
   >javac Life.java

Тег <applet>

Для интеграции апплета с HTML предусмотрен тег applet. Далее показан синтаксис этого стандартного тега:

   <APPLET
      [CODEBASE = базовый URL-адрес кода апплета]
      CODE=имя class-файла апплета
      [ALT=альтернативный текст]
      [NAME=имя экземпляра апплета]
      WIDTH=ширина апплета в пикселях
      HEIGHT=высота апплета в пикселях
      [ALIGN=выравнивание апплета]
      [VSPACE=пустой интервал выше и ниже апплета в пикселях]
      [HSPACE=пустой интервал левее и правее апплета в пикселях]
   >
      [<PARAM name=имя атрибута(1) value=значение(1)>]
      ...
      [<PARAM name=имя атрибута(n) value=значение(n)>]
      [альтернативный текст в формате HTML]
   </applet>

Например, для того, чтобы поместить апплет Life, рассмотренный в предыдущей главе на вашу страничку вставьте следующий текст в html-документ:
   <APPLET CODE="Life.class" WIDTH="200" HEIGHT=100>
   </APPLET>
Предполагается, что файл класса находится в одном каталоге с html-документом.

Запуск апплетов

При открытии web-страницы броузеры автоматически запускают апплет, но пользоваться web-броузерами в процессе отладки довольно неудобно. К счастью, в пакет разработки SDK входит стандартная утилита appletviewer, которая позволяет быстро и эффективно запускать апплеты. Это довольно примитивный инструмент, который извлекает из html-документа тег <applet> и запускает апплет на выполнение. Например, для запуска апплета Life наберите в командной строке:
   >appletviewer Life.htm
Вот как выглядит этот апплет:

Пример:"Простой графический редактор"

Следующий учебный пример является более интересным и реализует простой графический редактор:

   import java.applet.*;
   import java.awt.*;
   import java.awt.event.*;

   /**
   * Этот апплет реализует простой графический редактор.
   * @author Хивин Алексей
   * @author Веселов Роман
   * @version beta
   */
   public class SimpleGraphicEditor extends Applet {
      
      private Canvas screen = new Canvas();//область для рисования

         // группа переключателей цветов
      private CheckboxGroup group = new CheckboxGroup();
      private Checkbox
            // красный переключатель
         r = new Checkbox("красный",group,true),
            // зеленый переключатель
         g = new Checkbox("зеленый",group,false),
            // синий переключатель
         b = new Checkbox("синий",group,false);

         // кнопка очистки области рисования
      private Button clear = new Button("Очистить");  
      
      /**
      * В это методе проводится инициализация апплета.
      */
      public void init() {
         // установка параметров апплета
         setBackground(Color.lightGray);  
         // настройка компонентов
         screen.setSize(300,200);
         screen.setBackground(Color.white);
         r.setForeground(Color.red);
         g.setForeground(Color.green);
         b.setForeground(Color.blue);
         clear.addActionListener(new buttonListener());
         screen.addMouseMotionListener(new scrListener());
         // добавление компонентов на рабочую область
         add(r);
         add(g);
         add(b);
         add(screen);
         add(clear);
      }
         // реализация слушателя события действий
      private class buttonListener implements ActionListener {
         public void actionPerformed(ActionEvent e) {
            screen.repaint();
         }
      }
         // реализация слушателя события перетаскивания
            и перемещения мыши
      private class scrListener implements MouseMotionListener {
         public void mouseDragged(MouseEvent e) {
            Graphics gr = screen.getGraphics();
            if (group.getSelectedCheckbox()==r)
               gr.setColor(Color.red);
            else if (group.getSelectedCheckbox()==g)
               gr.setColor(Color.green);
            else 
               gr.setColor(Color.blue);
            gr.fillOval(e.getX(),e.getY(),3,3);
         }
         public void mouseMoved(MouseEvent e) {
         }
      }
   }

Вот что должно получиться: