package elte.java2_utikalauz5.gui; /** Listákat szemléltető példaprogram.

Két lista segítségével tetszőleges mennyiségű opciók bármely részhalmazának kiválasztására adunk módot. Bal és jobb oldalt egy-egy rendezett lista látható, ezekbe elemeket felvenni a felület alján található szövegbeviteli mező segítségével és a sorvége billentyű lenyomásával lehet. A két lista közül mindig csak az egyik az aktuális, ide történik az új elemek felvétele, a másik nem engedélyezett. A listákban a legutoljára kiválasztott elem megjelenik a felület alján található szövegmezőben is, duplakattintáskor (vagy a sorvége billentyű megnyomásakor) a kiválasztott elemek átkerülnek a másik listába. Hosszabb lista görgetett megjelenítése esetén a látható területet adott elemre irányíthatjuk a látni kívánt szöveg prefixének begépelésével.

A felület tetején egy vezérlő legördíthető lista található a lehetséges műveletekkel: kiválaszthatjuk az aktuális listát, átmásolhatjuk/mozgathatjuk a kiválasztott elemeket az aktuális listából a másikba, vagy törölhetjük a kiválasztott elemeket.

Középen pedig egy nem szerkeszthető szövegmező a fellépő eseményeket naplózza. @link.forrásfájl {@docRoot}/../data/gui/src ListaTeszt.java @link.letöltés {@docRoot}/../data/gui ListaTeszt.jar @see java.awt.List @see java.awt.Choice @since Java 2 Útikalauz programozóknak 1.3 */ class ListaTeszt extends java.awt.event.KeyAdapter implements java.awt.event.ItemListener, java.awt.event.ActionListener { /** Műveleteket kiválasztó lista */ private java.awt.Choice legördíthetőlista = new java.awt.Choice(); /** Bal oldali rendezett lista */ private java.awt.List ballista = new java.awt.List(5, true); /** Jobb oldali rendezett lista */ private java.awt.List jobblista = new java.awt.List(5, true); /** Szövegbevitel mező listabevitelhez */ private java.awt.TextField szövegmező = new java.awt.TextField(); /** Naplókomponens */ private java.awt.TextArea napló = new java.awt.TextArea(); /** GUI-t felépítő konstruktor. @param felület a felhasználói felületet tartalmazó konténer */ private ListaTeszt( java.awt.Container felület ) { felület.setLayout( new java.awt.BorderLayout() ); legördíthetőlista.add("<--Aktivál"); //vezérlő legördíthető menü legördíthetőlista.add("Aktivál-->"); legördíthetőlista.add("Átmásol"); legördíthetőlista.add("Átmozgat"); legördíthetőlista.add("Töröl"); felület.add( legördíthetőlista, java.awt.BorderLayout.NORTH ); legördíthetőlista.addItemListener( this ); felület.add( ballista, java.awt.BorderLayout.WEST ); ballista.addItemListener( this ); ballista.addActionListener( this ); ballista.addKeyListener( this ); jobblista.setEnabled(false); felület.add( jobblista, java.awt.BorderLayout.EAST ); jobblista.addItemListener( this ); jobblista.addActionListener( this ); jobblista.addKeyListener( this ); felület.add( szövegmező, java.awt.BorderLayout.SOUTH ); szövegmező.addActionListener( this ); napló.setEditable( false ); felület.add( napló ); } /** Szövegbeírás vagy kiválasztás véglegesítése. @param esemény Akció eseményobjektum */ public void actionPerformed( java.awt.event.ActionEvent esemény ) { napló.append(esemény+"\n"); if (esemény.getSource() instanceof java.awt.List) { legördíthetőlista.select(3); //átmozgatás itemStateChanged(new java.awt.event.ItemEvent( legördíthetőlista, 0, null, 0)); return; } String szöveg = szövegmező.getText().trim(); if (szöveg.length()==0) return; felvesz( szöveg, ballista.isEnabled() ? ballista : jobblista); szövegmező.setText(""); } /** Kiválasztási és törlési események feldolgozása, naplózása. @param esemény Kiválasztási/törlési esemény */ @SuppressWarnings("fallthrough") public void itemStateChanged( java.awt.event.ItemEvent esemény ) { napló.append(esemény+"\n"); java.awt.List aktuálista = ballista.isEnabled() ? ballista : jobblista; java.awt.List nemaktuálista = aktuálista==ballista ? jobblista:ballista; if (esemény.getSource() instanceof java.awt.List) { if (esemény.getStateChange()==java.awt.event.ItemEvent.SELECTED) szövegmező.setText(aktuálista.getItem(((Integer)esemény.getItem( )).intValue())); //kiválasztott listaelem másolása return; } boolean váltás = false; switch (legördíthetőlista.getSelectedIndex()) { case 0: if (aktuálista==ballista) break; aktuálista = ballista; //bal oldali lista aktiválása nemaktuálista = jobblista; váltás = true; case 1: if (!váltás) { if (aktuálista==jobblista) break; aktuálista = jobblista; //jobb oldali lista aktiválása nemaktuálista = ballista; } aktuálista.setEnabled(true); nemaktuálista.setEnabled(false); aktuálista.setVisible(false); nemaktuálista.setVisible(false); ballista.setVisible(true); jobblista.setVisible(true); idő = 0; //keresési prefix törlése keresés = ""; break; case 2: váltás = true; //átmásol case 3: int indexek[] = aktuálista.getSelectedIndexes(); //átmozgat for (int index : indexek) felvesz( aktuálista.getItem( index ), nemaktuálista ); if (váltás) break; case 4: indexek = aktuálista.getSelectedIndexes(); //töröl for (int index = indexek.length; --index>=0;) aktuálista.remove(indexek[index]); } if (legördíthetőlista.getSelectedIndex()>1) legördíthetőlista.select( aktuálista==ballista? 0 : 1); //aktuális elem visszaállítása } /** Szövegrendező */ private java.text.Collator rendező = java.text.Collator.getInstance(); /** Lista rendezett bővitése. @param szöveg a felvevendő szöveg @param lista a bővítendő lista */ private void felvesz( String szöveg, java.awt.List lista ) { int index = lista.getItemCount(); //beszúrásos rendezés szöveg = szöveg.toLowerCase(); for (; --index>=0;) { int sorrend = rendező.compare( szöveg, lista.getItem(index).toLowerCase()); if (sorrend==0) return; if (sorrend > 0) break; } lista.add( szöveg, index+1 ); } /** Utolsó billentyűlenyomás ideje */ private long idő; /** Keresett szöveg prefixe */ private String keresés = ""; /** Listagörgetés résszöveg beírásával. @param billentyűesemény a fellépett billentyűzetesemény */ @Override public void keyTyped( java.awt.event.KeyEvent billentyűesemény ) { if (billentyűesemény.getWhen()>idő+3000) keresés = ""; idő = billentyűesemény.getWhen(); keresés += billentyűesemény.getKeyChar(); java.awt.List lista = (java.awt.List)billentyűesemény.getSource(); int maxindex = lista.getItemCount()-1; //elem keresése int index = 1; while (index<=maxindex&&rendező.compare(keresés,lista.getItem(index))>0) index++; lista.makeVisible( index-1 ); } /** Teszt grafikus felhasználói felület felépítése. @param felület A felhasználói felületet tartalmazó konténer. @param argumentumok Az indításkor megadott paraméterek. */ public static void felépít(java.awt.Container felület, String argumentumok[]) { new ListaTeszt( felület ); } /** A tesztprogram indítása. @param argumentumok Az indításkor megadott paraméterek. */ public static void main(String argumentumok[]) { java.awt.Frame ablak = new AblakTeszt.Ablak("Listák tesztje"); felépít( ablak, argumentumok ); //felület felépítése ablak.setVisible(true); //és megjelenítése } }