|
|||
|
Примеры программирования на Java
ICanvas.java
import java.awt.*;
import java.applet.*;
/*
Класс ICanvas - потомок Canvas
Он просто рисует изображение, используя свой графический контекст.
Рисуя изображение , в методе drawImage указывается класс, который
реализует интерфейс ImageObserver , т.е. отслеживает процесс
загрузки изображения через свой метод imageUpdate
*/
public class ICanvas extends Canvas {
Image image;
Applet parent;
ICanvas(Image img,Applet prnt ) {
image = img;
parent = prnt;
}
public void paint(Graphics g) {
g.drawImage(image,0,0,parent);
}
public void update (Graphics g) {
paint(g);
}
}
ImageLoader.java
import java.awt.*;
import java.awt.image.*;
import java.applet.*;
/*
ImageLoader - главный класс приложения
Потомок класса Applet, реализует интерфейс ImageObserver , т.е.
содержит метод imageUpdate , который отслеживает загрузку изображения
*/
public class ImageLoader extends Applet implements ImageObserver
{
Image image;
int imageHeight = 0;
ICanvas imageCanvas;
ProgressBar progressCanvas;
Label progressLabel;
/*
В методе init происходит инициализация апплета :
getImage запрашивает example.gif с сервера ;
компонуется экранная форма .
*/
public void init () {
image = getImage(getDocumentBase(),"example.gif");
progressCanvas = new ProgressBar();
progressLabel = new Label("0%");
imageCanvas = new ICanvas (image,this);
Panel progressPanel = new Panel ();
progressPanel.setLayout(new BorderLayout());
progressPanel.add("West",new Label("Loading:",Label.RIGHT));
progressPanel.add("Center",progressCanvas);
progressPanel.add("East",progressLabel);
setLayout(new BorderLayout());
add("South",progressPanel);
add("Center",imageCanvas);
}
/*
Во время загрузки изображения вызывается метод updateImage каждый раз,
когда приходит новая порция данных.
Параметр flags сообщает о состоянии загрузки на данный момент
(загружена новая порция изображения , изображение полностью
загружено , загрузка прекращена из-за ошибки и т.д.).
*/
public boolean imageUpdate (Image img, int flags, int x, int y, int w, int h)
{
if ((flags ? SOMEBITS) != 0)
{ // Если загружена новая порция ..
if (imageHeight == 0) // Если мы еще не узнали высоту
// всего изображения...
imageHeight = img.getHeight(this); // ...то запоминаем ее
if (imageHeight != 0)
{
int loaded = (y+h)*100/imageHeight; //вычисляется процент загруженной
//части
progressLabel.setText( Integer.toString(loaded)+"%");
progressCanvas.setLoaded(loaded);
imageCanvas.repaint(x,y,w,h);
}
}
else
if ((flags ? ABORT ) != 0)
{ // Если загрузка прервана , то завершаем
// работу
System.out.println("Can't get iamge.");
System.exit(1);
};
return ((flags ? (ALLBITS | ABORT)) == 0 );
}
ProgressBar.java
import java.awt.*;
/*
Класс ProgressBar является потомком класса Canvas.
Метод setLoaded записывает в переменную loaded количество
подгруженного изображения в процентах ( от 0 до 100 )
А метод paint рисует прямоугольник, длина которого зависит от loaded
*/
public class ProgressBar extends Canvas {
int loaded = 0;
public void setLoaded(int t) {
loaded = t;
repaint();
}
public void paint(Graphics g) {
g.setColor(Color.blue);
Dimension dim = size();
g.drawRect(1,1,dim.width-2,dim.height-2);
g.fillRect(5,5,loaded*(dim.width-10)/100,dim.height-10);
}
public void update(Graphics g) {
paint(g);
}
}
Sun Microsystems |
||