List

AWT

In dit voorbeeld worden gegevens van de ene list naar de andere gekopieerd

Applet

H8P8.jpg (15415 bytes)

Programmacode

//  AwtList.java
// Kopieert items van een srcList naar destList en omgekeerd
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class AwtList extends Applet implements ItemListener, ActionListener {
   private List srcList, destList;
   private Button copyButton, backButton;
   final static int AANTAL = 10;

    public void init()   {
        // een lijst met 5 zichtbare elementen
        // meervoudige selectie (true)
        srcList = new List( 5, true );

        // een lijst met default 4 zichtbare elementen
        // meervoudige selectie
        destList = new List( 0, true );

        copyButton = new Button( ">>" );
        backButton = new Button( "<<" );


        // voeg items toe aan srcList
        for (int i = 0; i < AANTAL ; i++)
            srcList.addItem( "item" + i );

        // voeg de list en button toe aan de applet
        add( srcList );
        add( copyButton );
        add( backButton );
        add( destList );
        
        // meld de knoppen en lijsten aan bij hun eventlisteners
        copyButton.addActionListener(this);
        backButton.addActionListener(this);
        srcList.addItemListener(this);
        destList.addItemListener(this);
    }
    // hier worden de knoppen afgehandeld
    public void actionPerformed ( ActionEvent e )   {
        if ( e.getSource() == copyButton )
            move(srcList, destList);
        else if ( e.getSource() == backButton)
            move (destList, srcList);
    }

    // als in ene list wordt geselecteerd dan wordt de andere de deselecteerd
    public void itemStateChanged( ItemEvent e ) {
        if ( e.getSource() == srcList )
            for (int i = 0; i < destList.getItemCount(); i++)       
                destList.deselect(i);   
        else if ( e.getSource() == destList )
            for (int i = 0; i < srcList.getItemCount(); i++)        
                srcList.deselect(i);    
    }


    void move(List src, List dest) {
        String[] items = src.getSelectedItems();
        int [] indexes = src.getSelectedIndexes();

        for (int i = 0; i< items.length; i++)
           dest.addItem(items[i]);
        for (int i = 0; i < indexes.length; i++)
           src.delItem(indexes[i]);
    }

}

Uitleg

Wat is een List?

De List klasse is een lijst van elementen waarvan er één of meerdere geselecteerd kunnen worden. De elementen hebben een naam en een index. Eerst wordt een lege lijst gecreëerd. Vervolgens worden er elementen toegevoegd met add() of addItem(). Elementen kunnen verwijderd worden met delItem(), remove() en removeAll.

Een applet met een ItemListener voor de List en een ActionListener voor de Button.
 

init()

De List srcList wordt in een for-lus gevuld met 10 elementen, genaamd "item1" t/m "item9". De destList is leeg en bestaat default uit 4 elementen. Met twee knoppen kunnen elementen van de ene List in de andere kopieerd worden.
   srcList = new List( 5, true );

   for (int i = 0; i < AANTAL ; i++)
       srcList.addItem( "item" + i );

   destList = new List( 0, true );
De knoppen en lijsten worden aangemeld bij de LayoutManager en bij hun respectievelijke EventListeners ActionListener en ItemListener.
        copyButton = new Button( ">>" );
        backButton = new Button( "<<" );

        add( srcList );
        add( copyButton );
        add( backButton );
        add( destList );
        
        copyButton.addActionListener(this);
        backButton.addActionListener(this);
        srcList.addItemListener(this);
        destList.addItemListener(this);
    }

actionPerformed()

De afhandelingsmethode van de knoppen roepen de move methode aan om het eigenlijke werk uit te voeren.
 public void actionPerformed ( ActionEvent e )   {
        if ( e.getSource() == copyButton )
            move(srcList, destList);
        else if ( e.getSource() == backButton)
            move (destList, srcList);
    }

move()

In de move methode worden de geselecteerde elementen en indexes van de verzendende List ingelezen in een tweetal arrays. In een for-lus worden de geselecteerde elementen gekopieerd naar de andere List en vervolgens verwijderd uit de verzendende lijst.
    void move(List src, List dest) {
        String[] items = src.getSelectedItems();
        int [] indexes = src.getSelectedIndexes();

        for (int i = 0; i< items.length; i++)
           dest.addItem(items[i]);
        for (int i = 0; i < indexes.length; i++)
           src.delItem(indexes[i]);
    }

  itemStateChanged()

Deze methode wordt aangeroepen als de gebruiker een enkelvoudige muisklik op een element in de lijst uitvoerd. In deze methode worden de elementen uit de lijst geselecteerd.

De dubbelklik genereert een ActionEvent, die is hier niet afgehandeld.

  public void itemStateChanged( ItemEvent e ) {
        if ( e.getSource() == srcList )
            for (int i = 0; i < destList.getItemCount(); i++)       
                destList.deselect(i);   
        else if ( e.getSource() == destList )
            for (int i = 0; i < srcList.getItemCount(); i++)        
                srcList.deselect(i);    
    }
deselect() lijkt op het eerste gezicht niet nodig, maar de gebruiker verwacht dat als hij naar de andere List verhuisd de activiteiten in de ene List onderbroken worden. Dus dat eventuele gemaakte selectie ongedaan gemaakt worden. Hiervoor worden in een for-lus alle elementen van niet aangeklikte List vrijgegeven

De list klasse

public class List  extends Component 
   
public List(); 
public List(int rows, boolean multipleSelections); 
constructors
   
addItem(String item); voeg een element toe aan het einde
addItem(String item, int index);   
delItem(int position);
remove()
verwijder een element
removeAll();  verwijder alle elementen
 
public String getItem(int index);  haal een element met de index
public int getRows();  haal het aantal rijen in de lijst
public int countItems(); tel het aantal elementen
public void replaceItem(String st, int index) vervang een element
   
public void deselect(int index);  deselecteer deze index
public int getSelectedIndex();  haal de geselecteerd index
public int[] getSelectedIndexes();  haal de geselecteerde indices
public String getSelectedItem(); haal de geselecteerde tekst
public String[] getSelectedItems();  haal de geselecteerde teksten
public boolean isIndexSelected(int index); is deze index geselecteerd?
public void select(int index)  selecteer deze index
   
public void setMultipleMode(boolean v) stel meervoudige selectie in 
public boolean isMultipleMode(); is meervoudige selectie mogelijk?
   
public void makeVisible(int index) schuif de lijst zo dat dit element zichtbaar wordt
public int getVisibleIndex();  haal de index van element dat het laatste zichtbaar was
   
public Dimension getMinimumSize()  bereken de minimale afmeting
public Dimension getPreferredSize() bereken de gewenste afmeting
copyright ® Little World 1998