|
Fari rektangulon surklakebla
Ni unue desegnos unu rektangulon. Kiam oni surklakos tiun rektangulon, teksto malsupre aperos.
La principo
Ni jam vidis, kiel desegni rektangulan formon [g.fillRect()] kaj kiel uzi la musklakojn sur la retprograma zono. Nun ni devas ankoraŭ kontroli, ĉu la musklakoj okazas sur la surfaco de la desegnita rektangulo.
Unu solvo de tiu problemo estas generi objekton Rectangle (ne konfuzu kun la rektangula formo desegnita per g.fillRect() !), kies spacaj ecoj (absciso, ordinato, larĝeco, alteco) respondos al la rektangula formo, kiun ni desegnos. Tiu objekto diros al ni, ĉu li ricevis musklakon.
La klaso Rectangle
En la ĉi-suba retprogramo, ni uzas la jenan instrukcion :
Rectangle r = new Rectangle(10,10,20,20);
Longaj klarigoj estus necesaj pri tiu instrukcio, ĉar ĝi estas tipa ekzemplo de instrukcio, kiun oni skribas per objektema programlingvo kiel Ĝavo. Mallonge, kaj probable neklare, ni diru la jenon :
- Rectangle estas pradifinita klaso de la lingvo Ĝavo : ĝi estas strukturo, kiu ebligas konstrui objektojn (rektangulojn), kies ecoj (la atributoj) estas konataj, ĉar priskribitaj en la dokumentaro pri Ĝavo. La instrukcio Rectangle r = new Rectangle(10,10,20,20); ebligas generi objekton de la klaso Rectangle, ĉi tie nomata r ;
- ĉiu objekto de la klaso Rectangle havas, ekzemple, la ecojn (atributojn) width (larĝeco de la rektangulo), height (alteco de la rektangulo), x (absciso de la maldekstra supra angulo de la rektangulo) kaj y (ordinato de la maldekstra supra angulo de la rektangulo), kiujn ni uzas en la retprogramo ;
- plie, la klaso Rectangle disponigas instrukciojn, aŭ procedurojn (metodojn), kiuj ebligas agi per la rektanguloj. Unu el tiuj instrukcioj estas la metodo inside(), per kiu oni povas scii, ĉu punkto troviĝas ene de rektangulo. [Atentu : tiu metodo ne plu ekzistas ekde la versio 1.1 de Ĝavo.]
Jen la kodo de la retprogramo :
import java.applet.*;
import java.awt.*;
public class apleto12 extends Applet
{
Rectangle r = new Rectangle(10,10,20,20);--- objekto, kiu difinas rektangulan zonon
boolean ene;
public void paint(Graphics g)
{
g.setColor(Color.black);
g.fillRect(r.x,r.y,r.width,r.height);--- uzo de la atributoj de la objekto Rectangle r
if (ene)
{
g.setColor(Color.black);
g.drawString("Jes", 10, 50);
}//if
}//paint
public boolean mouseDown(Event evt, int x, int y)
{
ene =(r.inside(x,y)) ? true : false;--- testo : ĉu oni musklakis en la objekto r ?
repaint();
return true;
}
public boolean mouseUp(Event evt, int x, int y)
{
ene=false;
repaint();
return true;
}
}
Jen la rezulto :
- klaku sur la retprogramo, sed ekstere de la rektangulo ;
- klaku sur la rektangulo.
La uzpreta kodo
Kelkaj klarigoj
Rectangle(10,10,20,20)
La metodo Rectangle() ebligas konstrui objekton de la klaso Rectangle. La 4 argumentoj petitaj kiel parametroj (inter krampoj) estas entjeroj, kiuj indikas, en tiu ordo, la valorojn de la atributoj x, y, width kaj height de la rektangula zono tiel generita. La dokumentaro de la lingvo Ĝavo tiel prezentas la aferon : Rectangle(int x, int y, int width, int height), kaj poste donas la signifon de la atributoj x, y, width kaj height.
g.fillRect(r.x,r.y,r.width,r.height)
La metodo fillRect() petas ankaŭ 4 argumentojn (vidu la paŝon 3). Ĉi tie ni pasigas al ĝi la valorojn de la atributoj de la objekto r, kiun ni supre generis. Por indiki tiujn valorojn, ni uzas la perpunktan referencmanieron : objekto + punkto + atributo (r.width).
ene =(r.inside(x,y)) ? true : false;
? : estas sea triopa operacisimbolo.
Ĝi ebligas unue testi la verecon de propozicio : ĉu (r.inside(x,y)) estas vera ?
Se la propozicio estas vera, la unua valoro, antaŭ la : , estas donita al la variablo, ĉi tie nomata ene.
Se la propozicio estas malvera, la dua valoro, post la : , estas donita al la variablo, ĉi tie nomata ene.
Alie dirite :
fina_valoro = testo ? A : B; signifas :
se testo estas vera, fina_valoro ricevas la valoron A;
se testo estas malvera, fina_valoro ricevas la valoron B;
|