Poziționarea absolută a componentelor în container

În general, este recomandabil ca pentru amplasarea componentelor în containere să se folosească gestionari de poziționare. În acest fel se asigură modificarea automată a poziției și dimensiunilor componentelor, atunci când se modifică dimensiunile containerului. Există totuși situații, în care se preferă ca pozițiile și dimensiunile componentelor să fie fixe și să fie indicate prin program. Din această cauză, în afară de amplasarea flexibilă a componentelor în containere, folosind clasele de gestionare a poziționării, este posibil să se proiecteze și interfețe grafice în care poziționarea componentelor se face folosind coordonatele și dimensiunile absolute ale acestora. În acest scop:
    a/ pentru a se indica faptul că nu se folosește un gestionar de poziționare, se recurge la instrucțiunea:
    setLayout(null);
    b/ pentru stabilirea coordonatelor colțului din stânga sus și dimensiunilor fiecărei componente se folosește metoda
    public void setBounds(int x, int y, int width, int height);
din clasa java.awt.Component. În acest mod, fiecare componentă este plasată în container cu colțul stânga-sus în punctul de coordonate (x,y)și are dimensiunile date prin lățimea width și înălțimea height.
În locul metodei setBounds se pot folosi și metodele
    public void setLocation(Point location)
    public void setSize(int latime, int inaltime)
care există, de asemenea, în clasa Component și permit setarea separată a poziției și dimensiunilor componentelor.

Poziția și dimensiunile astfel stabilite ale componentelor rămân neschimbate, chiar dacă se modifică dimensiunile containerului care le conține.
 
Exemplu:

În fișierul PozAbs.java se dă un exemplu de aplicație, în care se recurge la poziționarea absolută a componentelor pe suprafața ferestrei principale a aplicației, care este o instanță a clasei JFrame.

În fereastră (mai exact în containerul contentPane al ferestrei) se plasează următoarele componente:

  - o etichetă cu textul "Butoane de contorizare";
  - patru butoane de contorizare ale clasei ButonContor, creată de noi anterior;
  - o etichetă cu textul "Anularea tuturor contoarelor >>>";
  - un buton din clasa JButton cu inscriptia "Reset", care servește aici pentru a comanda punerea la zero a tuturor contoarelor.

Pentru a realiza poziționarea absolută a acestor componente, se seteaza la null gestionarul de poziționare al containerului contentPane conținut în fereastra aplicației, iar pentru fiecare componentă se indică poziția și dimensiunile, invocând metoda setBounds().
 
/* Pozitionarea absoluta a componentelor in container */

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class PozAbs { 
 static AF af=new AF(); // ascultatorul de fereastra
 static AA aa=new AA(); // ascultatorul de actiuni
 static IUG iug=new IUG("Pozitionare absoluta");

 static class IUG extends JFrame {
  JLabel et1=new JLabel("Butoane de contorizare");
  JLabel et2=new JLabel("Anularea tuturor contoarelor >>>");
  JButton br=new JButton("Reset");
  int numarContoare=4;
  ButonContor bc[]=new ButonContor[numarContoare];

  /* Constructorul ferestrei aplicatiei */
  IUG(String titlu) {
   super(titlu);
   Container cp=getContentPane();
   setSize(420,220);
   setLocation(200,150);
   addWindowListener(af);
   cp.setLayout(null); // se elimina gestionarul de pozitionare din
                       // contentPane
   et1.setBounds(150, 5, 160,10); // pozitia si dimensiunile etichetei
   cp.add(et1);  // adaugarea etichetei
   for(int i=0; i<numarContoare; i++) {
    bc[i]=new ButonContor("B"+i);  // crearea butoanelor-contor
    bc[i].setBounds(10+100*i, 20, 90,70);  // stabilirea pozitiei
          // si dimensiunilor butoanelor-contor
    cp.add(bc[i]);  // adaugarea butoanelor-contor la contentPane
   }
   et2.setBounds(10, 140, 200,10); // locul si dimens. etichetei 2
   cp.add(et2); // adaugarea etichetei 2 la contentPane
   br.setBounds(210, 120, 70, 60); // pozitia si dimensiunile
                  // butonului de anulare
   br.addActionListener(aa); // ascultarea butonului de anulare
   cp.add(br);  // adaugarea butonului de anulare la contentPane
   setVisible(true);
  }
 }

 /* Ascultatorul actiunilor butonului de anulare. Cand este apasat
    acest buton, se pun la zero toate contoarele
 */
 static class AA implements ActionListener {
  public void actionPerformed(ActionEvent e) {
   for(int i=0; i<iug.numarContoare; i++) iug.bc[i].reset();
  }
 }

 /* Ascultarea evenimentelor de fereastra */
 static class AF extends WindowAdapter {
  public void windowClosing(WindowEvent e) {
   System.exit(0);
  }
 }

 public static void main(String args[]) {
 }
}



© Copyright 2000 - Severin BUMBARU, Universitatea "Dunărea de Jos" din Galați