joi, 14 mai 2009

Table Layout - partea 2

4. Alinierea
O componenta care se intinde pe o singura celula poate fi aliniata atat pe verticala cat si pe orizontala. Pentru fiecare orientare sunt patru variante posibile. Pentru aliniera pe orizontala este posibila left, center, right, and full. Acestea au efect decat daca atributul preferred width al componentei este mai mic decat lungimena celulei.

Componetele pot fi de asemenea aliniate pe verticala. Cele patru variante sunt top, center, bottom, and full. Comportamentul este similar cu cel de la alinierea pe orizontala.
Pentru a specifica alinierea unui component nu trebuie decat sa precizati prima litera a variantei dorite. De exemplu pentru a alinia la dreapta si sus, va trebui sa utilizati literele r si t (right si top), in paramentru de tip string pe care il trimiteti metodei de adaugare:

frame.add(component, "2, 1, r, t");

Alinierea pe orizontala este specificata inaintea alinierii pe verticala. Daca ar fi sa transpunem in cuvinte linia de cod de mai sus aceasta ar suna in felul urmator : pozitioneaza componenta in partea dreapta a coloanei cu indexul 2 si in partea superioara a randului cu indexul 1.

Aliniera default pentru o anumita componenta este cea de umplere (full) atat pe orizontala cat si pe verticala. Prin urmare linia de cod container.add (component, "2, 1"); este identica din punct de vedere functional cu  container.add (component, "2, 1, f, f");.

5. Adaugarea pe mai multe celule 
O anumita componeta poate fi adaugata si pe un set dreptunghiular de celule. Aceasta se realizeaza specificand colturile din stanga sus si dreapta jos pentru acest dreptughi. De exemplu linia de cod frame.add (component, "1, 1, 2, 3") va adauga componenta trimisa ca parametru pe toate celulele cuprinse de dreptunghiul delimitat de colturile 1,1 si 2,3. Componetele care ocupa mai mult de o singura celula au dimensiunea egala cu aria totala a celulelor pe care le ocupa. Pentru acest tip de componeta nu se poate specifica nici un atribut de aliniere.

6. Un simplu exemplu
Urmatorul cod creeaza TableLayout-ul de mai jos :

import info.clearthought.layout.TableLayout;
import javax.swing.*;

public class Simple
{    
    public static void main (String args[])
    {
        // creare fereastra
        JFrame frame = new JFrame("LEC Exemplu TableLayout");
        frame.setBounds (100, 100, 300, 300);

        // creare table layout
        double border = 10;

        double size[][] =
            {{border, 0.10, 20, TableLayout.FILL, 20, 0.20, border},  // Columns
             {border, 0.20, 20, TableLayout.FILL, 20, 0.20, border}}; // Rows

        frame.setLayout (new TableLayout(size));

        // creare componente
        String label[] = {"Top", "Bottom", "Left", "Right", "Center", "Overlap"};
        JButton button[] = new JButton[label.length];

        for (int i = 0; i <>
            button[i] = new JButton(label[i]);

        //adaugare butoane
        frame.add (button[0], "1, 1, 5, 1"); // sus
        frame.add (button[1], "1, 5, 5, 5"); // jos
        frame.add (button[2], "1, 3      "); // stanga
        frame.add (button[3], "5, 3      "); // dreapta
        frame.add (button[4], "3, 3, c, c"); // centru
        frame.add (button[5], "3, 3, 3, 5"); // suprapunere

        
        // afisare frame
        frame.setVisible(true);
    }   
}

Imaginea din stanga reprezinta frame-ul creat folosind codul de mai sus. In imaginea alaturata ei, au fost adaugate linii pentru a delimita randurile si coloanele. Lungimea coloanelor este afisata in marginea inferioara si inaltimea randurilor este afisata in partea dreapta.

Dupa cum se poate observa acest exemplu utilizeaza TableLayout pentru a crea un border de b pixeli in jurul componetelor de interfata grafica. Acesta este o tehnica usor de folosit pentru a crea un border pe un container care nu dispune de asa ceva. Din moment ce b este doar o primitiva de tip double cu valori intregi mai mari decat decat zero, borderul poate fi creat la orice dimensiuni. 

De asemenea acest exemplu arata cum se pot pune spatii intre componete. In acest caz a fost inserat un spatiu de 20 de pixeli atat pe verticala si orizontala, pentru a separa componetele intre ele. Majoritatea layout managerilor utilizeaza atributul padding pentru a insera spatii intre componente. Folosind TableLayout, singurul lucru care trebuie facut este un rand si/sau o coloana de o anumita dimensiune si sa nu plasati nimic in acestea. 

Butoanele din stanga si dreapta ocupa o singura celula si tot timpul de aceeasi dimensiune ca si celula. Butoanele de sus si jos se intind pe parcursul a cinci celule. TableLayout poate fi folosit oricand in locul lui BorderLayout si multi alti layout manageri, cu un plus considerabil de flexibilitate. 

Butonul cu denumirea Center se afla in celula din centru si este centrat atat pe verticala si pe orizontala. Dat fiind faptul ca s-au utilizat optiunile de aliniere acestui buton i-au fost alocate dimensiunile din atributul preferred size. In cazul in care acest frame este micsorat foarte mult atunci butonul center se va miscora, insa niciodata nu va depasi dimensiunile precizate in preferred size indiferent cat de mare va fi fereastra. 


Dupa cum se poate observa acest exemplu utilizeaza TableLayout pentru a crea un border de b pixeli in jurul componetelor de interfata grafica. Acesta este o tehnica usor de folosit pentru a crea un border pe un container care nu dispune de asa ceva. Din moment ce b este doar o primitiva de tip double cu valori intregi mai mari decat decat zero, borderul poate fi creat la orice dimensiuni. 

De asemenea acest exemplu arata cum se pot pune spatii intre componete. In acest caz a fost inserat un spatiu de 20 de pixeli atat pe verticala si orizontala, pentru a separa componetele intre ele. Majoritatea layout managerilor utilizeaza atributul padding pentru a insera spatii intre componente. Folosind TableLayout, singurul lucru care trebuie facut este un rand si/sau o coloana de o anumita dimensiune si sa nu plasati nimic in acestea. 

Butoanele din stanga si dreapta ocupa o singura celula si tot timpul de aceeasi dimensiune ca si celula. Butoanele de sus si jos se intind pe parcursul a cinci celule. TableLayout poate fi folosit oricand in locul lui BorderLayout si multi alti layout manageri, cu un plus considerabil de flexibilitate. 

Niciun comentariu:

Trimiteți un comentariu