esperanto
français
 

Un tabella de objectos Rectangle

Arrivate a iste passo, nos sape designar 216 rectangulos de colores differente, e nos sape render un sol rectangulo cliccabile, gratias a un objecto Rectangle.
In prime loco, nos va instantiar automaticamente plure objectos Rectangle, e stockar los in un tabella. Ille maniera de facer non es multo subtil, sed illo va auxiliar vos a comprehender le notion de tabella de objectos.
In le passos sequente, nos utilisara un methodo plus efficace.

Instantiar automaticamente objectos

Al passo 10, nos ha instantiate un sol objecto Rectangle per le instruction :
Rectangle r = new Rectangle(10,10,20,20);
Si nos vole render plure rectangulos cliccabile, il essera necessari de instantiar tante objectos de ille sorta. Nos utilisara un iteration de ille typo :

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

 

Le inconveniente, como vos lo vide forsan, es que ille iterationes crea cinque vices le mesme objecto Rectangle r : il esserea necessari de donar a cata objecto un nomine differente (r1, r2...), e postea referer se al attributos e methodos de cata rectangulo [per exemplo : r1.width, r2.inside()], sed illo es impossibile con ille medio.
Le solution es de emplear un tabella de objectos.

Un tabella

Un tabella permitte de stockar e de retrovar facilemente plure variabiles. Nos ha dicte al passo 5 que un variabile era un cassa, que nos pote impler con un valor. Un tabella es un cassa plus grande que pote continer un o plure variabiles.
Nos ha etiam viste que, a fin que un variabile existe, il basta de declarar lo indicante su typo e su nomine, de ille maniera :
int i;
Iste instruction face nascer un variabile de typo "numero integre" nominate i.

De quasi le mesme maniera nasce un tabella :
int [] tabi ;
Iste instruction face nascer un tabella de variabiles de typo "numero integre" nominate tabi.

Il es etiam possibile de precisar lo que se nomina le longitude del tabella, id es le numero de elementos que continera le tabella :
int [] tabi = new int[5];
Iste instruction face nascer un tabella de variabiles de typo "numero integre" nominate tabi. Iste tabella potera continer solmente 5 numeros integre.

Quomodo impler un tabella ? Il es possibile de utilisar un instruction de ille sorta :
tabi[4] = 25;
Iste instruction assigna al quinte elemento del tabella (illo cuje indicio es 4) le valor 25.
Attention al trappa : tabi[0] designa le prime elemento del tabella tabi !

Ille parve schema vos adjutara forsan a vider lo que es un tabella con su indicios :

Il es si facile, utilisante un iteration con for(), de impler un tabella. Per exemplo :

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

 

Iste instructiones face nascer un tabella de cinque numeros integre : 0, 1, 2, 3, 4.

Un tabella de objectos

Nos va applicar iste astute medios al creation de un tabella de objectos Rectangle.

int abscissa = 0;
Rectangle [] tabRectangle = new Rectangle[5];--- declaration de un tabella de objectos Rectangle
for (int i=0; i<5; i++)
{
tabRectangle [i] = new Rectangle(abscissa,10,10,10);--- assignation de valores al tabella gratias a un iteration
abscissa +=12;
}

 

Iste codice permitte de crear 5 objectos Rectangle, cata uno habente un abscissa differente. Il essera possibile postea de designar cata uno de iste objectos per lor indicio in le tabella : tabRectangle[0] es le prime Rectangle (su abscissa es 0), tabRectangle[1] es le secunde (su abscissa es 12), et cetera.
Naturalmente, cata uno de iste objectos possede tote le attributos e methodos del objectos Rectangle, que es designabile per le notation per puncto : per exemplo tabRectangle[0].x designa le abscissa del angulo superior sinistre del objecto.

Ecce le codice complete del applet, inricchite per un zona de texto, como viste in le passo precedente :

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

public class applet15 extends Applet
{
int abscissa = 0;
Rectangle [] tabRectangle = new Rectangle[5];
boolean intra;
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(abscissa,30,10,10);
   abscissa+=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++)
      {
      intra =(tabRectangle[k].inside(x,y)) ? true : false;
      if (intra)
         {
         t="Si";
         T.setText(t);
         }
      }//for k
   return true;
   }

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

 

Ecce le resultato :
- clicca super le applet, sed extra le rectangulos ;
- clicca super le rectangulos.

Le codice preste al uso