Clasa BoxLayout

Gestionarul de poziționare javax.swing.BoxLayout plasează toate componentele containerului pe o singură direcție, care poate fi orizontală sau verticală.

Constructorul clasei este
    public BoxLayout(Container target, int axis)
în care target este o referința la containerul țintă (al cărui gestionar de poziționare este creat), iar axis poate fi BoxLayout.X_AXIS sau BoxLayout.Y_AXIS și indică direcția (axa) după care vor fi plasate componentele.
 
Exemplul 1
În fișierul ButoaneBox.java se dă un exemplu de aplicație, în care se testează clasa BoxLayout. În acest caz, gestionarul BoxLayout a fost folosit direct în containerul contentPane al ferestrei aplicației. La lansarea aplicației în execuție, se indică numărul de butoane de contorizare și direcția după care acestea vor fi plasate (x sau y). Se poate urmări efectul modificării cu mouse-ul a dimensiunilor ferestrei. Se observă că dimensiunile componentelor rămân constante, fără a mai fi influențate de dimensiunile ferestrei.
 
/* Testarea gestionarului de pozitionare BoxLayout.

   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 si numele axei in lungul careia
   vor fi plasate componentele (X sau Y). De exemplu, comanda
      java ButoaneBox 5 Y
   are ca efecte punerea in executie a aplicatiei cu 5 butoane contor
   si un buton de anulare, toate plasate unul sub altul
*/
 

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

class ButoaneBox { 
 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 int axa;

 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(350,350);
   setLocation(200,150);
   addWindowListener(af);
   cp.setLayout(new BoxLayout(getContentPane(), axa));
   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!=2 ) {
    System.out.println(
      "Utilizare: java ButoaneBox <numarButoane> <axa>");
    System.exit(1);
  }
  String numeAxa=args[1].toUpperCase();
  if(numeAxa.equals("Y")) axa=BoxLayout.Y_AXIS;
  else 
    if(numeAxa.equals("X")) axa=BoxLayout.X_AXIS;
    else {
      System.out.println("Axa nu poate fi decat X sau Y");
      System.exit(1);
    }
  numarButoane=Integer.parseInt(args[0]);
  iug=new IUG("BoxLayout cu "+numarButoane+
   " butoane de contorizare");
 }
}

În loc de a folosi gestionarul BoxLayout într-un container oarecare, se preferă să se foloseasca clasa javax.swing.Box, care are acest gestionar implicit.
 
Exemplul 2
În fișierul TestBox.java se dă o variantă a aplicației din exemplul precedent, în care se utilizează drept container pentru butoane o instanță a clasei Box. În constructorul ferestrei aplicației, după ce se creeaza această instanță a clasei Box, se adaugă la ea succesiv toate componentele, după care este ea însăși adaugată la conținutul ferestrei aplicației (la contentPane). În această situație, gestionarul de poziționare BoxLayout este folosit prin intermediul instanței clasei Box, în care sunt plasate componentele.
 
/* Testarea clasei javax.swing.Box

   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 si numele axei in lungul careia
   vor fi plasate componentele (X sau Y). De exemplu, comanda
      java TestBox 5 Y
   are ca efecte punerea in executie a aplicatiei cu 5 butoane contor
   si un buton de anulare, toate plasate unul sub altul
*/
 

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

class TestBox { 
 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 int axa;

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

  IUG(String titlu) { // constructorul ferestrei aplicatiei
   super(titlu);
   setSize(350,350);
   setLocation(200,150);
   addWindowListener(af);
   box=new Box(axa); // se creeaza o instanta a clasei Box
                     // orientata pe directia axa
   bc=new ButonContor[numarButoane];
   for(int i=0; i<numarButoane; i++) { 
    bc[i]=new ButonContor("B"+(i+1)); // crearea butoanelor
    box.add(bc[i]); // adaugarea butoanelor la caseta box
   }
   box.add(br); // adaugarea butonului de anulare
   br.addActionListener(anulare); // adaugarea ascultatorului
   getContentPane().add(box); // adaugarea casetei box la 
                              // contentPane
   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!=2 ) {
    System.out.println(
      "Utilizare: java Box <numarButoane> <axa>");
    System.exit(1);
  }
  String numeAxa=args[1].toUpperCase();
  if(numeAxa.equals("Y")) axa=BoxLayout.Y_AXIS;
  else 
    if(numeAxa.equals("X")) axa=BoxLayout.X_AXIS;
    else {
      System.out.println("Axa nu poate fi decat X sau Y");
      System.exit(1);
    }
  numarButoane=Integer.parseInt(args[0]);
  iug=new IUG("Box cu "+numarButoane+
   " butoane de contorizare");
 }
}



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