|
Tabelo da objektoj RectangleJe tiu paŝo, ni jam scipovas desegni 216 rektangulojn de malsamaj koloroj, kaj ni scipovas fari unu rektangulon surklakebla, dank'al objekto Rectangle. Aŭtomate generi objektojnEn la paŝo 10, ni generis unu objekton Rectangle per la instrukcio :
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. TabeloPer 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. 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 : Kiel plenigi tabelon ? Oni povas uzi tian instrukcion : 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 objektojNi 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. 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 :
|
||
![]() |
![]() |