Пример 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!