français
interlingua
 

Tabelo da objektoj Rectangle

Je tiu paŝo, ni jam scipovas desegni 216 rektangulojn de malsamaj koloroj, kaj ni scipovas fari unu rektangulon surklakebla, dank'al objekto Rectangle.
Unue, ni aŭtomate generos plurajn objektojn Rectangle, kaj ni konservos ilin en tabelo. Tiu agmaniero ne estas tre subtila, sed ĝi helpos al vi kompreni la nocion tabelo da objektoj.
En la postaj paŝoj, ni uzos pli efikan metodon.

Aŭtomate generi objektojn

En la paŝo 10, ni generis unu objekton Rectangle per la instrukcio :
Rectangle r = new Rectangle(10,10,20,20);
Se ni deziras fari plurajn rektangulojn surklakeblaj, ni devos generi plurajn objektojn de tiu speco. Ni uzos tian iteracian strukturon :

int absciso = 0;
for (i=0; i<5; i++)
{
Rectangle r = new Rectangle(absciso, 10, 10, 10);
absciso+=12;
}

 

La malavantaĝo - tion vi eble vidas - estas, ke tiuj iteracioj kreas kvinfoje la saman objekton Rectangle r : necesus doni al ĉiu objekto specifan nomon (r1, r2...), por poste referenci ĉies atributojn kaj metodojn [ekzemple : r1.width, r2.inside()], sed tio estas neebla per tiu procedo.
La solvo estas uzi tabelon da objektoj.

Tabelo

Per tabelo oni povas facile konservi kaj retrovi plurajn variablojn. Ni diris en la paŝo 5, ke variablo estas skatolo, kiun oni plenigas per valoro. Tabelo estas pli granda skatolo, kiu povas enteni unu aŭ plurajn variablojn.
Ni vidis ankaŭ, ke, por ke variablo ekzistu, sufiĉas ĝin deklari per ĝia tipo kaj nomo, tiel :
int i;
Tiu instrukcio naskas variablon de tipo "entjero" nomata i.

Estas preskaŭ same por naski tabelon :
int [] tabi ;
Tiu instrukcio naskas tabelon da variabloj de tipo "entjero" nomata tabi.

Oni povas ankaŭ precizigi la longecon de la tabelo, t.e. la nombron de elementoj entenotaj de la tabelo :
int [] tabi = new int[5];
Tiu instrukcio naskas tabelon da variabloj de tipo "entjero" nomata tabi. Tiu tabelo povos enteni nur 5 entjerojn.

Kiel plenigi tabelon ? Oni povas uzi tian instrukcion :
tabi[4] = 25;
Tiu instrukcio donas al la kvina elemento (la elemento, kies indico estas 4) de la tabelo la valoron 25.
Atentu, kaptilo : tabi[0] referencas pri la unua elemento de la tabelo tabi !

Jen skemeto por pli bone kompreni, kio estas tabelo kaj indicoj :

Oni tiel povas facile plenigi tabelon per iteracio for(). Ekzemple :

int [] tabi = new int[5];
for (int i=0; i<5; i++)
{
tabi [i] = i;
}

 

Tiuj instrukcioj naskas tabelon, kiu entenas kvin entjerojn : 0, 1, 2, 3, 4.

Tabelo da objektoj

Ni uzos tiun procedon por krei tabelon da objektoj Rectangle.

int absciso = 0;
Rectangle [] tabRectangle = new Rectangle[5];--- deklaro de tabelo da objektoj Rectangle
for (int i=0; i<5; i++)
{
tabRectangle [i] = new Rectangle(absciso,10,10,10);--- plenigo de la tabelo per iteracio
absciso+=12;
}

 

Tiu kodo ebligas krei 5 objektojn Rectangle, kun specifa absciso por ĉiu el ili. Oni povos poste referenci pri ĉiu el tiuj objektoj per ilia indico en la tabelo : tabRectangle[0] estas la unua Rectangle (ĝia absciso estas 0), tabRectangle[1] estas la dua (ĝia absciso estas 12), kaj tiel plu.
Kompreneble, ĉiu el tiuj objektoj havas la atributojn kaj metodojn de la objektoj Rectangle, kiujn oni indikas per la perpunkta referencmaniero : ekzemple tabRectangle[0].x indikas la abscison de la maldekstra supra angulo de la objekto.

Jen la tuta kodo de la retprogramo, al kiu ni aldonis entajpeblan linion, kiel vidite en la antaŭa paŝo :

import java.applet.*;
import java.awt.*;

public class apleto15 extends Applet
{
int absciso = 0;
Rectangle [] tabRectangle = new Rectangle[5];
boolean ene;
String t = new String("");
TextField T = new TextField(t, 5);

public void init()
{
add(T);
for (int i=0; i<5; i++)
   {
   tabRectangle [i] = new Rectangle(absciso,30,10,10);
   absciso+=12;
   }//for i
}//init

public void paint(Graphics g)
   {
   g.setColor(Color.black);
   for (int j=0;j<5;j++)
      {
      g.fillRect(tabRectangle[j].x,tabRectangle[j].y,tabRectangle[j].width,tabRectangle[j].height);
      }//for j
   }//paint

   public boolean mouseDown(Event evt, int x, int y)
   {
   int k;
   for (k=0; k<5;k++)
      {
      ene =(tabRectangle[k].inside(x,y)) ? true : false;
      if (ene)
         {
         t="Jes";
         T.setText(t);
         }
      }//for k
   return true;
   }

   public boolean mouseUp(Event evt, int x, int y)
   {
   ene=false;
   t="";
   T.setText(t);
   return true;
   }
}

 

Jen la rezulto :
- klaku sur la retprogramo, sed ekster la rektanguloj ;
- klaku sur la rektanguloj.

La uzpreta kodo