Пример 1.7. Двойная буферизация



import java.applet.Applet;

import java.awt.*;

import java.net.*;

 

public class QuickPicture extends Applet  {

Image pic;                

boolean picLoaded=false;    // проверка загрузки изображения

private String m_FileName = "simple.gif";

private final String PARAM_String_1 = "fileName";

int x=0, y=0;

Image offScreenImage;

public void init(){

String param;

param = getParameter(PARAM_String_1);

if (param != null) m_FileName = param;

pic=getImage(getDocumentBase(), m_FileName);

resize(320, 240);

}

public void paint (Graphics g){

// создание виртуального экрана

int width = getSize().width;

int height = getSize().height;

offScreenImage=createImage(width,height);

// получение его контекста

Graphics offScreenGraphics= offScreenImage.getGraphics();

// вывод изображения на виртуальный экран

offScreenGraphics.drawImage(pic,x,y,this);

if(picLoaded)     {

// 4-м параметром в drawImage() передается null.

// Он не позволяет функции вызывать метод imageUpdate()

// в процессе вывода

   g.drawImage(offScreenImage,0,0,null);

   showStatus("Done");

}

else  

      showStatus("Loading image");

}

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

 

public boolean imageUpdate(Image img, int infoflags,int x, int y,int w, int h) {

if(infoflags==ALLBITS) {

 picLoaded=true; // изображение загружено полностью

repaint();         // перерисовать окно апплета

return false;           // больше метод imageUpdate не вызывать

}

return true;                 // изображение загружено не полностью

}

}

События и их обработка

 

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

В современной технологии Java используется так называемое делегирование событий.

 

Апплет, обрабатывающий события. Создадим апплет Event, отображающий строку текста в месте положения щелчка мыши. Кроме того, добавим перемещение строки текста с помощью клавиш управления курсором.

 

Пример 1.8. Обработка событий от мыши и клавиатуры

import javax.swing.event.MouseInputAdapter;

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

 

public class Event extends Applet {

int x=0, y=0;

public Event() {

// обработчик события от мыши

MouseInputAdapter pm;

pm = new MouseInputAdapter() {

  public void mousePressed(MouseEvent e) {

        x=e.getX(); y=e.getY();

        System.out.println(x);

        repaint();

  }};

  this.addMouseListener(pm);

// обработчик события от клавиатуры

KeyAdapter pk;

pk = new KeyAdapter(){

public void keyPressed(KeyEvent e) {

        System.out.println(e);

        int keyCode = e.getKeyCode();

        switch(keyCode)      {

         case KeyEvent.VK_DOWN:

                   y = y + 5; repaint(); break;

          case KeyEvent.VK_UP:

                   y = y - 5; repaint(); break;

          case KeyEvent.VK_RIGHT:

                   x = x + 5; repaint(); break;

          case KeyEvent.VK_LEFT:

                   x = x - 5; repaint(); break;

         }

    }

};

  this.addKeyListener(pk);

}

public void init() { }

public void paint (Graphics g) {

  g.drawString("Applet with Events",x, y);

}

}

 

Для обработки событий от кнопок мыши используется тип MouseListener. Это интерфейс. Для обработки этих событий надо, чтобы класс реализовывал указанный интерфейс, то есть в классе должны быть реализованы все методы этого интерфейса. Обработка событий от нажатия на клавиши клавиатуры выполнено также, как и от мыши, но используется другой адаптер - KeyAdapter, интерфейс (KeyListener) и метод (KeyPressed).

 

Апплеты двойного назначения

 

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

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

С помощью экземпляра апплета можно вызвать методы init() и start(), запуская апплет в методе main() так, как обычно это делает браузер. А затем апплет просто вставляется в окно-рамку.

Передавать приложению параметры можно в командной строке. Т.е. передача параметров апплету двойного назначения должна дублироваться при помощи командной строки и при помощи тега <PARAM> HTML-файла.

 


Дата добавления: 2018-04-15; просмотров: 315; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!