Clasa FlowLayout

Gestionarul de poziționare java.awt.FlowLayout plasează componentele pe suprafața containerului una după alta, în ordinea în care acestea sunt adăugate, de la stânga la dreapta și de sus în jos. Când s-a terminat o linie, se trece la linia următoare. Numărul de componente pe o linie depinde de lățimea componentelor și de lățimea containerului în care sunt acestea plasate.

Este posibil să se specifice modul de aliniere a componentelor: la stânga, la dreapta sau la centru. Aceasta se face fie specificând alinierea ca argument al constructorului, fie invocând metoda
    public void setAlignement(int align)
în care argumentul align poate fi FlowLayout.LEFT, FlowLayout.RIGHT sau FlowLayout.CENTER.
 
Exemplul 1
În fișierul ButoaneF.java este dat un exemplu de aplicație, în care se testează gestionarul de poziționare FlowLayout. În fereastra aplicației sunt plasate mai multe butoane din clasa ButonContor și un buton de anulare a tuturor contoarelor. Numărul de butoane de contorizare este dat la punerea în execuție a aplicatiei, ca parametru în linia de comanda. Modificând cu mouse-ul dimensiunile ferestrei, putem constata cum se modifică în mod corespunzator dimensiunile și amplasarea butoanelor. Îtrucât la crearea gestionarului de poziționare nu s-a precizat alinierea componentelor, modul de aliniere este implicit CENTER.
 
/* Testarea gestionarului de pozitionare FlowLayout.

   In fereastra aplicatiei apar mai multe butoane din clasa
   ButonContor si un buton de anulare, a carui apasare anulaza
   toate contoarele.

   La lansarea in executie se da ca parametru in linia de comanda
   numarul de butoane de contorizare
*/

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

class ButoaneF { 
 static AF af=new AF(); // ascultatorul de fereastra
 static Anulare anulare=new Anulare(); // ascultatorul
                                       // butonului de anulare
 static IUG iug;  // fereastra aplicatiei
 static int numarButoane;

 static class IUG extends JFrame {
  JLabel lab=new JLabel("Actionati butoanele");
  ButonContor bc[];
  JButton br=new JButton("Reset"); 

  IUG(String titlu) { // constructorul ferestrei aplicatiei
   super(titlu);
   Container cp=getContentPane();
   setSize(300,150);
   setLocation(200,150);
   addWindowListener(af);
   cp.setLayout(new FlowLayout()); // setarea gestionarului
                                   // de pozitionare
   bc=new ButonContor[numarButoane];
   for(int i=0; i<numarButoane; i++) {
    bc[i]=new ButonContor("B"+(i+1)); // crearea butoanelor
    cp.add(bc[i]); // adaugarea butoanelor la contentPane
   }
   cp.add(br); // adaugarea butonului de anulare
   br.addActionListener(anulare); // adaugarea ascultatorului
   setVisible(true);
  }
 }

 static class AF extends WindowAdapter { 
  public void windowClosing(WindowEvent e) {
   System.exit(0);
  }
 }

 static class Anulare implements ActionListener {
  public void actionPerformed(ActionEvent e) {
    for(int i=0; i<numarButoane; i++) iug.bc[i].reset();
  }
 }

 public static void main(String args[]) throws Exception {
  if(args.length!=1) {
    System.out.println("Utilizare: java ButoaneF <numarButoane>");
    System.exit(1);
  }
  numarButoane=Integer.parseInt(args[0]); // crearea tabloului de 
                                          // butoane
  iug=new IUG("FlowLayout cu "+numarButoane+
   " butoane de contorizare"); // crearea ferestrei aplicatiei
 }
}

Remarcăm că aplicația ButoaneF este o modificare a aplicației Butoane din fișierul Butoane.java și se deosebește de aceasta prin următoarele:
  - în metoda main se preia un argument din linia de comandă, care trebuie să fie numărul de butoane de acționare solicitat de utilizator, după care se construiește fereastra aplicației;
  - s-a introdus tabloul bc[] care conține referințe la instanțele clasei ButonContor. Atât acest tablou, cât și butoanele respective, se creează în constructorul clasei IUG;
  - după adăugarea butoanelor de contorizare, se adaugă la fereastra aplicației butonul de anulare br, din clasa JButton;
  - pentru ascultarea acționării butonului de anulare, a fost declarată clasa imbricată Anulare, care implementează interfața ActionListener.


 
Exemplul 2
În fișierul Aliniere.java este dată o modificare a aplicației din exemplul precedent, în care s-au introdus trei butoane suplimentare, care au ca efect modificarea alinierii butoanelor pe suprafața containerului. În acest scop:
  - Pentru a se afla care buton a fost acționat, în metoda actionPerformed() a clasei imbricate de ascultare a evenimentelor de acțiune Actiuni s-a invocat metoda getActionCommand()a clasei ActionEvent. Această metodă întoarce un String care, în mod obisnuit, este textul de pe butonul respectiv. Este posibil, totuși, să se modifice acest șir folosind metoda setActionCommand(String command), care există în toate clasele care generează evenimente de acțiune, de exemplu în clasa AbstractButton, din care este derivată și clasa JButton.
  - Modificarea alinierii se face invocând pentru gestionarul de poziționare metoda setAlignment(int align) a clasei FlowLayout. Dupa ce s-a aplicat această metodă, se invocă pentru conținutul ferestrei (contentPane) metoda doLayout() a clasei Container, pentru a se aplica efectiv noua poziționare.
 
/* Testarea alinierii componentelor cand se foloseste
   gestionarul de pozitionare FlowLayout.

   In fereastra aplicatiei apar mai multe butoane din clasa
   ButonContor, trei butoane de aliniere si un buton de anulare.

   La lansarea in executie se da ca parametru in linia de comanda
   numarul de butoane de contorizare

   Actionarea unuia din butoanele de aliniere are ca efect 
   modificarea corespunzatoare a alinierii componentelor pe
   suprafata containerului

   Actionarea butonului de anulare produce anuloarea tuturor
   contoarelor.
*/

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

class Aliniere { 
 static AF af=new AF(); // ascultatorul de fereastra
 static Actiuni actiuni=new Actiuni(); // ascultatorul
               // butoanelor de aliniere si de anulare
 static IUG iug;  // fereastra aplicatiei
 static int numarButoane;
 static FlowLayout layout=new FlowLayout();

 static class IUG extends JFrame {
  JLabel lab=new JLabel("Actionati butoanele");
  ButonContor bc[];
  JButton br=new JButton("Anulare");
  JButton bas=new JButton("Stanga"), bac=new JButton("Centru"),
      bad=new JButton("Dreapta"); 

  IUG(String titlu) { // constructorul ferestrei aplicatiei
   super(titlu);
   Container cp=getContentPane();
   setSize(300,150);
   setLocation(200,150);
   addWindowListener(af);
   cp.setLayout(layout); // setarea gestionarului de pozitionare
   bc=new ButonContor[numarButoane];
   for(int i=0; i<numarButoane; i++) { 
    bc[i]=new ButonContor("B"+(i+1)); // crearea butoanelor
    cp.add(bc[i]); // adaugarea butoanelor la contentPane
   }
   cp.add(bas); cp.add(bac); cp.add(bad); // adaugare butoane
                                          // de aliniere
   cp.add(br); // adaugarea butonului de anulare
   br.addActionListener(actiuni); // adaugarea ascultatorului
   bas.addActionListener(actiuni);
   bac.addActionListener(actiuni);
   bad.addActionListener(actiuni);
   setVisible(true);
  }
 }

 static class AF extends WindowAdapter { 
  public void windowClosing(WindowEvent e) {
   System.exit(0);
  }
 }

 static class Actiuni implements ActionListener {
  public void actionPerformed(ActionEvent e) {
    String comanda=e.getActionCommand();
    if(comanda.equals("Anulare"))
      for(int i=0; i<numarButoane; i++) iug.bc[i].reset();
    else {
      if(comanda.equals("Stanga"))
        layout.setAlignment(FlowLayout.LEFT);
      else if(comanda.equals("Centru"))
        layout.setAlignment(FlowLayout.CENTER);
      else if(comanda.equals("Dreapta"))
        layout.setAlignment(FlowLayout.RIGHT);
      iug.getContentPane().doLayout();
    }
  }
 }

 public static void main(String args[]) throws Exception {
  if(args.length!=1) {
    System.out.println("Utilizare: java Aliniere <numarButoane>");
    System.exit(1);
  }
  numarButoane=Integer.parseInt(args[0]); // crearea tabloului de 
                                          // butoane
  iug=new IUG("FlowLayout cu "+numarButoane+
   " butoane de contorizare"); // crearea ferestrei aplicatiei
 }
}



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