Liste

În cazul interfețelor utilizator grafice, se numește listă o componentă care conține articole selectabile. Selectarea lor se face de către utilizator, prin click de mouse pe articolul respectiv. Lista poate fi cu selecție simplă sau cu selecție multiplă, după cum pot fi selectate simultan unul sau mai multe articole.

În JFC/Swing, listele se realizează ca instanțe ale clasei javax.swing.JList. Articolele din listă pot fi, în principiu, orice obiecte afișabile. La crearea listei, constructorului i se dă ca argument tabloul obiectelor pe care le va conține lista. Ulterior este posibil să se adauge articole la listă, sau să se elimine.

Daca lista este mai lunga decât spațiul de afișare disponibil, ea poate fi pusă pe un panou glisant, din clasa javax.swing.JScrollPane.
 
Selectarea simplă a unui articol se face prin click de mouse pe articolul respectiv.

Selectarea multiplă se face în două moduri:
   - se face click de mouse pe primul articol din zona care trebuie selectată, apoi se apasă tasta Shift și se face click pe ultimul articol din această zonă. În acest fel se selectează toate articolele din zona respectivă;
   - se face click de mouse pe primul articol din zonă, apoi se apasă tasta Shift și se acționează tastele cu săgeți sus/jos până când sunt selectate toate articolele din zona respectivă.

De câte ori se face o selecție de articole din listă, se generează un eveniment din clasa javax.swing.event.ListSelectionEvent, care este ascultat cu ajutorul unei clase care implementează interfața javax.swing.event.ListSelectionListener.

Punerea articolelor în listă poate fi făcută astfel:
   - la crearea listei, folosind unul din constructorii
    public JList(Object[] listData) - primește ca argument un tablou de obiecte, care sunt articolele din listă
    public JList(Vector listData)- primește ca argument o instanță a clasei java.util.Vector, care are ca elemente articolele listei;
   - în timpul utilizării listei, invocându-se una din metodele
    public void setListData(Object[] listData)
    public void setListData(Vector listData)

Pentru a afla articolele selectate dintr-o listă se pot folosi metodele:
    public int[] getSelectedIndices() - întoarce tabloul indicilor articolelor selectate
    public Object[] getSelectedValues() - întoarce tabloul articolelor selectate.

Clasa are numeroase alte metode. Pentru aprofundare, recomandăm capitolul How to Use Lists din Java Tutorial.

Liste ascunse

Lista ascunsă este o listă din care se vede un singur articol (cel care este selectat), deci ocupa pe ecran spațiu mult mai putin decât una obișnuită. Celelalte articole ale listei sunt "ascunse" și devin vizibile numai dacă se face click pe articolul vizibil. Dacă acum facem click de mouse pe un alt articol din lista devenită vizibilă, acest nou articol este selectat (rămâne vizibil), iar celelalte dispar. Într-o listă ascunsă nu este posibilă selecția multiplă.

În JFC/Swing, pentru realizarea listelor ascunse se folosește clasa javax.swing.JComboBox.
 
Când este selectat un nou articol din lista ascunsă, aceasta generează un eveniment de articol din clasa java.awt.event.ItemEvent, care este ascultat cu un java.awt.event.ItemListener. La fiecare acționare asupra listei ascunse, se generează, de asemenea, un java.awt.ActionEvent.

În mod implicit, instanțele clasei JComboBox nu sunt editabile. Totuși, este posibil ca acestea sa fie făcute editabile, în care caz ele se comportă ca o combinație între listă și câmpul de text: utilizatorul poate să introducă textul manual, sau poate să aleagă unul din listă.

Punerea articolelor în listă se poate face astfel:
  - la crearea listei ascunse, folosind unul din constructorii
    public JComboBox(Object[] items)
    public JComboBox(Vector items)
  - în timpul utilizării listei, folosind metodele
    public void addItem(Object anObject) - adaugă un articol la sfârșitul listei;
    public void insertItemAt(Object anObject, int index) - înserează un articol pe poziția index.

Eliminarea unui articol din listă se face cu una din metodele
public void removeItem(Object anObject) - elimină articolul anObject;
public void removeItemAt(int anIndex) - elimină articolul de pe poziția anIndex.

Pentru a afla articolul selectat se folosește metoda 
    public Object getSelectedItem()
iar pentru a afla indicele articolului selectat se foloșeste metoda
public int getSelectedIndex()

Pentru ca lista ascunsă sa devină editabilă, se folosește metoda
    public void setEditable(boolean aFlag)- în care parametrul boolean aFlag indică dacă lista va fi sau nu editabilă.

Pentru aprofundarea folosirii listelor ascunse recomandăm capitolul How to Use Combo Boxes din Java Tutorial.


 
Exemplu

În fișierul Liste.java este dat un exemplu de aplicație în care se folosesc instanțe ale claselor JList și JComboBox.
 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
 

class Liste { 
 static AF af=new AF();
 static AAL ascult=new AAL();
 static AEA ascult1=new AEA();
 static IUG iug=new IUG("Diferite tipuri de liste");

 /* clasa imbricata pentru interfata utilizator grafica */
 static class IUG extends JFrame {
  JList lista1, lista2;
  JComboBox combo;
  JLabel label;

  IUG(String titlu) { // constructorul clasei IUG
   super(titlu);
   setSize(350, 240);
   setLocation(200, 50);
   Container cp=getContentPane();
   addWindowListener(af);  // adaugarea ascultatorului de fereastra

   /* Se creeaza o lista cu zilele saptamanii. Listei nu i se pune
      un model de selectie, deci se pot face implicit selectii 
      multiple intr-o singura zona continua
   */
   String zile[]={"Luni", "Marti", "Miercuri", "Joi", "Vineri",
         "Sambata", "Duminica"};
   lista1=new JList(zile);
   lista1.setBorder(BorderFactory.createTitledBorder(
         "Lista"));
   lista1.addListSelectionListener(ascult); // ascultarea listei
   cp.add(lista1, BorderLayout.WEST);

   /* Se creeaza o lista cu lunile anului, pusa intr-un panou
      glisant. Listei i se pune un model de selectie care 
      permite numai selectarea unui singur articol 
   */
   String luni[]={"Ianuarie", "Februarie", "Martie", "Aprilie",
      "Mai", "Iunie", "Iulie", "August", "Septembrie", 
      "Octombrie", "Noiembrie", "Decembrie"};
   lista2=new JList(luni);
   lista2.setBorder(BorderFactory.createTitledBorder(
         "Lista glisanta"));
   lista2.setSelectionModel(new DefaultListSelectionModel());
   lista2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

   lista2.addListSelectionListener(ascult);
   JScrollPane scroll=new JScrollPane(lista2); // panoul glisant 
      // care contine lista nou creata, lista2
   cp.add(scroll, BorderLayout.CENTER);

   /* Se creeaza o lista ascunsa (din clasa JComboBox) */
   String ordinea[]={"Primul            ", "Al doilea", 
    "Al treilea", "Al patrulea"};
   combo=new JComboBox(ordinea);
   combo.setBorder(BorderFactory.createTitledBorder(
     "Lista ascunsa"));
   combo.addItemListener(ascult1);
   JPanel panel=new JPanel();
   panel.add(combo);
   cp.add(panel, BorderLayout.EAST);

   /* Se creeaza o "eticheta" pentru afisarea mesajelor */
   label=new JLabel("Selectati articolele si urmariti efectul");
   label.setBorder(BorderFactory.createTitledBorder(
      "Afisarea mesajelor privind articolele selectate"));
   cp.add(label, BorderLayout.SOUTH);
   setVisible(true);
  }
 } 

 /* Clasa ascultatoare de fereastra */ 
 static class AF extends WindowAdapter {
  public void windowClosing(WindowEvent e) {
   System.exit(0); // incheierea executarii aplicatiei
  }
 }

 /* Clasa ascultatoare de selectari ale articolelor de lista
    folosita pentru JList. La aparitia unui astfel de
    eveniment, se afiseaza toate articolele selectate din
    lista sursa
 */
 static class AAL implements ListSelectionListener {
  public void valueChanged(ListSelectionEvent e) {
    JList sursa=(JList)e.getSource();
    Object selectie[]=sursa.getSelectedValues();
    StringBuffer buff=new StringBuffer();
    for(int i=0; i<selectie.length; i++)
       buff.append(selectie[i].toString()+" "); 
    iug.label.setText(buff.toString());
  }
 }

 /* Clasa ascultatoare de evenimente de articol 
    folosita pentru JComboBox. La aparitia unui astfel
    de eveniment, se afiseaza articolul care l-a produs
 */
 static class AEA implements ItemListener {
  public void itemStateChanged(ItemEvent e) {
    iug.label.setText(e.getItem().toString());
  }
 }

 /* Metoda principala a aplicatiei */
 public static void main(String args[]) {
 }
}



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