Clasa Box

Clasa javax.swing.Box are ca instanțe containere speciale, care nu pot folosi decât gestionarul de poziționare javax.swing.BoxLayout. Orice incercare de a-i pune alt gestionar produce o eroare de execuție din clasa AWTError.

Într-un container din clasa Box, componentele pot fi amplasate numai pe o singură direcție: orizontală sau verticală.
 
Clasa dispune de metode statice pentru crearea de "casete" (instanțe ale clasei Box) orizontale sau verticale:
    public static Box createHorizontalBox()
    public static Box createVerticalBox()
Se pot creea, de asemenea "componente invizibile" de dimensiuni fixe sau variabile, care pot fi folosite la distanțarea componentelor vizibile. În acest scop, se folosesc metodele
    public static Component createRigidArea(Dimension d) - creeaza o "componentă ascunsă" de dimensiune fixă;
    public static Component createHorizontalStrut(int width) - creeaza o "componentă ascunsă" de lățime fixă, dar de înălțime variabilă;
    public static Component createVerticalStrut(int height) - creeaza o "componentă ascunsă" de înalțime fixă, dar de lățime variabilă;
    public static Component createGlue() - creaza o "componentă ascunsă" cu ambele dimensiuni variabile;

Combinarea adecvată de containere din clasa Box și folosirea în acestea a diferitelor componente vizibile și ascunse permite crearea de interfețe grafice cu aspecte foarte diversificate.
 
Exemplu

În fișierul Casete.java este dată o aplicație în care se folosesc trei casete din clasa Box: două verticale și una orizontală.
 
/* Exemplu de utilizare a containerelor din clasa javax.swing.Box */

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

class Casete {
 static ButonContor bc[]=new ButonContor[5];
 static JButton br1=new JButton("Reset 1"),
                br2=new JButton("Reset 2");
 static Anulare anulare=new Anulare();
 static IUG iug=new IUG("Gruparea componentelor in casete");

 static class IUG extends JFrame {
  Box c1=Box.createVerticalBox(); 
  Box c2=Box.createVerticalBox();
  Box c3=Box.createHorizontalBox();

  IUG(String titlu) {
   super(titlu);
   setSize(280,160);
   addWindowListener(new AF());
   /* Crearea butoanelor */
   for(int i=0; i<5; i++) bc[i]=new ButonContor("B"+i);
   /* Completarea cu butoane a casetei c1 */
   c1.add(Box.createVerticalStrut(18)); // deplasare in jos
   c1.add(bc[0]);
   c1.add(bc[1]);
   c1.add(Box.createVerticalStrut(10)); // deplasare in jos
   c1.add(br1);
   /* Completarea casetei c2 */
   for(int i=2; i<5; i++) c2.add(bc[i]);
   c2.add(Box.createVerticalStrut(5)); // deplasare in jos
   c2.add(br2);
   /* Adaugarea de ascultatori la butoanele de anulare */
   br1.addActionListener(anulare);
   br2.addActionListener(anulare);
   /* Adaugarea casetelor c1 si c2 la caseta c3 */
   c3.add(Box.createGlue()); // pentru alinierea la centru
   c3.add(c1);
   c3.add(Box.createHorizontalStrut(10));
   c3.add(c2);
   /* Adaugarea casetei c3 la contentPane */
   getContentPane().add(c3);
   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) {
    String actiune=e.getActionCommand();
    if(actiune.equals(br1.getText())) 
      for(int i=0; i<2; i++) bc[i].reset();
    else if(actiune.equals(br2.getText()))
      for(int i=2; i<5; i++) bc[i].reset();
  }
 }

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

Remarcăm următoarele:
  - butoanele au fost plasate în cele două casete verticale, c1 și c2;
  - întrucât numărul de butoane din cele două casete este diferit, în caseta c1 s-a introdus o componentă ascunsă pentru alinierea la partea inferioară. De asemenea, în ambele casete verticale s-au introdus în fața ultimului buton componente ascunse pentru distanțare;
  - cele două casete verticale au fost introduse în cea orizontală;
  - componenta ascunsă cu dimensiuni variabile, introdusă în fața primei casete din c3, a fost pusă pentru a se obține alinierea pe centru a casetelor c1 și c2. În lipsa acesteia, caseta c1 ar fi fost aliniată la stânga;
  - caseta c3 a fost introdusă în contentPane.
Urmăriți ce se întâmplă când modificați cu mouse-ul dimensiunile ferestrei aplicației. 



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