Gruparea componentelor

Pentru a poziționa componentele în structuri mai complicate decât cele oferite de clasele de gestionare a poziției existente, se poate recurge la gruparea mai multor componente în containere auxiliare, care se plasează apoi în containerul principal. Drept containere auxiliare, se folosesc cel mai frecvent instanțe ale claselor java.awt.Panel, javax.swing.JPanel și javax.swing.Box.

Clasele Panel si JPanel

Clasa java.awt.Panel (panou) reprezinta cel mai simplu container, care este o suprafață dreptunghiulară fără bordură. Gestionarul de poziționare implicit este FlowLayout, dar se poate pune oricare altul. Panourile sunt frecvent folosite pentru a plasa pe ele diferite componente, formând un grup care se plaseaza apoi într-un alt container. Clasa javax.swing.JPanel este varianta de Panel folosită în JFC/Swing, fiind un container genreric.
 
Exemplu

În fișierul Panouri.java este dat un exemplu în care fereastra aplicației, cu gestionar de pozitionare GridLayout, conține în cele patru celule ale rețelei două panouri și două butoane de anulare. Un panou conține 5 butoane de contorizare amplasate cu gestionar BorderLayout, iar alt panou conține trei butoane de contorizare amplasate cu FlowLayout (gestionarul implicit). Fiecare buton de anulare pune la zero contoarele de apăsări dintr-un panou.
 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class Panouri {
 static ButonContor bc[]=new ButonContor[8];
 static JButton br1=new JButton("Reset 1"),
                br2=new JButton("Reset 2");
 static Anulare anulare=new Anulare();
 static IUG iug=new IUG("Gruparea componentelor pe panouri");

 static class IUG extends JFrame {
  JPanel p1=new JPanel(); // p1 are implicit FlowLayout
  JPanel p2=new JPanel(new BorderLayout()); // p2 primeste BorderLayout

  IUG(String titlu) {
   super(titlu);
   Container cp=getContentPane();
   setSize(500,400);
   addWindowListener(new AF());
   cp.setLayout(new GridLayout(2,2));
   /* Crearea butoanelor */
   for(int i=0; i<8; i++) bc[i]=new ButonContor("B"+i);
   /* Completarea cu butoane a panoului p2 */
   p2.add(bc[0], BorderLayout.NORTH);
   p2.add(bc[1], BorderLayout.WEST);
   p2.add(bc[2], BorderLayout.CENTER);
   p2.add(bc[3], BorderLayout.EAST);
   p2.add(bc[4], BorderLayout.SOUTH);
   /* Completarea panoului p1 */
   for(int i=5; i<8; i++) p1.add(bc[i]);
   /* Adaugarea de ascultatori la butoanele de anulare */
   br1.addActionListener(anulare);
   br2.addActionListener(anulare);
   /* Adaugarea de panouri si butoane la controlPane */
   cp.add(p2);
   cp.add(p1);
   cp.add(br1);
   cp.add(br2);
   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<5; i++) bc[i].reset();
    else if(actiune.equals(br2.getText()))
      for(int i=5; i<8; i++) bc[i].reset();
  }
 }

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



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