Tworzenie appletów w javie

Programy w javie mogą być apletami lub aplikacjami. Te pierwsze są interpretowane przez wirtualną maszynę javy wbudowaną w przeglądarkę lub inną aplikację a te drugie są zwykłymi samodzielnymi aplikacjami. Teraz zajmiemy się apletami, choć budowa zwykłych aplikacji jest podobna.

Kod najprostszego appletu wygląda tak:
import java.applet.*;
import java.awt.*;

public
class Test extends Applet
{
public void paint (Graphics gDC)
	{
	gDC.drawString("applecik", 100, 100);
	}
}
Dodatkowo tworzymy plik HTML o kodzie:
<applet code="Test.java" width="100" height="100"></applet>
Gdzie Test.java to nazwa naszego kompilatu. Teraz wystarczy otworzyć ów plik w przeglądarce obsługującej aplety (każda współczesna normalna) lub też, lepiej skorzystać z appletviewer - oglądaczki apletów.
appletviewer plik.html
Przeglądarki mają tendencję do keszowania apletów przez co wprowadzane zmiany nie będą widoczne.
Teraz analiza kodu. Nasza klasa dziedziczy z predefiniowanej klasy Applet opisującej zachowanie apletów (java.applet), w której to znajduje się referencja do gDC - graphics device context - obiektu umożliwiającego rysowanie na ekranie. Przy ładowaniu appletu najpierw wykonywany jest konstruktor, potem metoda init (jeżeli istnieje), potem start a przy kończeniu działania appletu - metoda stop.

Czcionki

W apletach mamy do dyspozycji kilka czcionek oraz możliwości ich wykorzystywania w appletach.
import java.applet.*;
import java.awt.*;

public
class Test extends Applet
{
public void paint (Graphics gDC)
	{
	Font font = new Font ("SansSerif", Font.BOLD, 36);
	gDC.setFont(font);
	gDC.drawString("applecik", 100, 100);
	}
}
W konstruktorze obiektu typu Font podajemy nazwę logiczną czcionki (Serif, SansSerif, Monospaced, Dialog, DialogInput), jej typ (Font.PLAIN - zwykła, Font.BOLD - pogrubiona, Font.ITALIC - kursywa) oraz jej rozmiar.

Rysowanie grafik

Możemy również rysować proste grafiki. Rysowanie linii odbywa się za pomocą gDC.drawLine(x1, y1, x2, y2); gdzie x1, y1 to współrzędne punktu startu a x2, y2 współrzędne punktu końcowego. Przykład:
import java.applet.*;
import java.awt.*;

public
class Test extends Applet
{
public void paint (Graphics gDC)
	{
	gDC.drawLine(120, 120, 160, 40);
	gDC.drawLine(200, 120, 160, 40);
	gDC.drawLine(120, 120, 200, 120);
	gDC.drawLine(160, 200, 160, 120);
	}
}
Ten applet narysuje coś w rodzaju strzałki. Rysowanie koła i elipsy odbywa się za pomocą metod:
drawOval(x, y, długość, wysokość);
fillOval(x, y, długość, wysokość);
Gdzie x,y to współrzędne lewego górnego rogu.
import java.applet.*;
import java.awt.*;

public
class Test extends Applet
{
public void paint (Graphics gDC)
	{
	gDC.drawOval(50, 50, 100, 100);
	gDC.fillOval(75, 75, 50, 50);
	}
}
Narysuje dwa koła, drawOval rysuje niewypełnione koło a fillOval wypełnione.
Prostokąty można rysować za pomocą:
drawRect(x, y, długość, wysokość);
fillRect(x, y, długość, wysokość);
Możemy również zmieniać kolor za pomocą gDC.setColor przyjmującą obiekt typu Color "złożony" albo z 3 liczb - składowych RGB lub z predefiniowanej metody oznaczającej wybrany kolor (black, blue, cyjan, darkGray, grey, green, lightGray, magenta, orange, pink, red, white, yellow).:
import java.applet.*;
import java.awt.*;

public
class Test extends Applet
{
public void paint (Graphics gDC)
	{
	gDC.setColor(Color.red);
	gDC.drawRect(50, 50, 100, 100);
	
	Color color = Color.black;
	color = new Color(color.getRed()+40, color.getGreen()+140, color.getBlue()+10);
	gDC.setColor(color);
	gDC.fillRect(75, 75, 50, 50);
	}
}

Wyświetlanie grafiki również jest możliwe:
import java.applet.*;
import java.awt.*;

public
class Test extends Applet
{
public void paint (Graphics gDC)
	{
	Image img;
	img = getImage(getDocumentBase(), "foto.jpg");
	gDC.drawImage(img, 0, 0, this);
	}
}
Zastosowana metoda getImage przyjmuje jako parametr obiekt klasy URL - w tym przypadku lokalizacja pliku HTML z kodem wywołującym applet. URL ten pobieramy za pomocą getDocumentBase. Drugi parametr to nazwa pliku graficznego. Metoda drawImage przyjmuje 4 parametry - pierwszy to referencja do obiektu typu Image, dwie kolejne to współrzędne, od których zacznie się wyświetlanie. Ostatni to "this". Ostatni parametr musi być odnośnikiem do obiektu klasy implementucjącej interfejs ImageObserver.

Zdarzenia i Mysz

Obsługa zdarzeń wywołanych myszą jest prosta... Obsługę podstawowych zdarzeń generowanych myszą oferuje interfejs MouseListener. Za jego pomocą aplet będzie mógł reagować na kliknięcia i inne akcje myszy. Korzystając z tego interfejsu musimy zdefiniować następujące metody:
public void mouseClicked(MouseEvent evt) {}
public void mousePressed(MouseEvent evt) {}
public void mouseExited(MouseEvent evt) {}
public void mouseEntered(MouseEvent evt) {}
public void mouseReleased(MouseEvent evt) {}
Odnoszą się one do określonych zdarzeń np. mousePressed do naciśnięcia przycisku myszy. Oto przykład podający współrzędne kliknięcia:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public
class Test extends Applet implements MouseListener
{
private int x,y;
String str;
public void init()
	{
	addMouseListener(this);
	}
public void paint (Graphics gDC)
	{
	gDC.drawString("Kliknięcie: "+ x + " / " + y, 10, 200);
	}
public void mouseClicked(MouseEvent evt)
	{
	x = evt.getX();
	y = evt.getY();
	repaint();
	}
public void mousePressed(MouseEvent evt) {}
public void mouseExited(MouseEvent evt) {}
public void mouseEntered(MouseEvent evt) {}
public void mouseReleased(MouseEvent evt) {}
}
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public
class Test extends Applet implements MouseListener
{
private int x,y, z;
String str;
Rectangle rect;
public void init()
	{
	addMouseListener(this);
	rect = new Rectangle(75, 75, 50, 50);
	}
public void paint (Graphics gDC)
	{
	gDC.fillRect((int)rect.getX(), (int)rect.getY(), (int)rect.getWidth(), (int)rect.getHeight());
	gDC.drawString("Kliknięcie: "+ x + " / " + y, 10, 200);
	gDC.drawString("W kwadracie: "+ z, 10, 220);
	}
public void mouseClicked(MouseEvent evt)
	{
	x = evt.getX();
	y = evt.getY();
	if (rect.contains(x, y))
		{
		z = 1;
		}
	else
		{
		z = 0;
		}
	repaint();
	}
public void mousePressed(MouseEvent evt) {}
public void mouseExited(MouseEvent evt) {}
public void mouseEntered(MouseEvent evt) {}
public void mouseReleased(MouseEvent evt) {}
}
Drugi przykład jest nieco bardziej złożony. Tworzymy obiekt Rectangle i rysujemy go na aplecie (nieco inaczej niż do tej pory). Obiekt typu Rectangle posiada kilka przydatnych metod, w tym contains(x, y) gdzie x,y to współrzędne. Metoda ta zwróci true jeżeli współrzędne znajdują się w obrębie figury.
Innym interfejsem do zdarzeń generowanych przez mysz jest MouseMotionListener, który obejmuje ruch myszy i wymaga zdefiniowania dwóch metod: mouseDragged i mouseMoved. Pierwsza odnosi się do ruchu kursora z wciśniętym klawiszem. Przykład:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public
class Test extends Applet implements MouseMotionListener
{
private int x,y, z;
String str;
public void init()
	{
	addMouseMotionListener(this);
	}
public void paint (Graphics gDC)
	{
	gDC.drawString("Kliknięcie: "+ x + " / " + y, 10, 200);
	//Image img;
	//img = getImage(getDocumentBase(), "foto.jpg");
	//gDC.drawImage(img, 0, 0, this);
	}
public void mouseMoved(MouseEvent evt)
	{
	x = evt.getX();
	y = evt.getY();
	repaint();
	}
public void mouseDragged(MouseEvent evt) {}
}
RkBlog

C/C++ i Java, 14 July 2008

Comment article
Comment article RkBlog main page Search RSS Contact