Sei sulla pagina 1di 7

Caselle combinate

In questa dispensa vengono presentate le principali caratteristiche delle caselle combinate (javax.swing.JComboBox). Lesempio mostrer anche come creare URI e come utilizzare lAPI Desktop. Prima di analizzare le funzionalit delle caselle combinate, vediamo come queste si collocano nella gerarchia delle classi di Java.

O bj e ct

Co m p on en t

Co nta in e r

JCo m p on en t

JComboBox

Caselle combinate: la classe JComboBox


Una casella combinata fornisce un elenco di opzioni fra le quali scegliere. Le opzioni presenti nella casella combinata: sono ordinate; sono individuabili attraverso un indice: la prima opzione ha indice 0, la seconda ha indice 1, e cos via. Le caselle combinate sono cos chiamate perch combinano l'elenco di opzioni con una casella di testo che visualizza: per default, la prima opzione dell'elenco; oppure l'opzione selezionata. Inoltre, possibile rendere la casella combinata editabile consentendo all'utente di inserire una voce, non presente in elenco, all'interno della casella di testo. L'inserimento di una nuova opzione non altera in alcun caso il contenuto dell'elenco. Una casella combinata non editabile ha l'aspetto di una casella di testo con una freccia sul lato destro, come si osserva nella seguente figura.
1 Bocchi Cinzia Ultimo aggiornamento: 25/10/2011

Fig. 1 Frame con casella combinata

Per attivare una casella di controllo, l'utente pu utilizzare il mouse oppure la barra spaziatrice (quando la casella ha il focus). La classe JComboBox parametrica e la sua definizione : public class JComboBox<E> extends JComponent implements ItemSelectable, ListDataListener, ActionListener, Accessible

Costruttori della classe JComboBox


public JComboBox () Crea una casella combinata senza opzioni in elenco. public JComboBox (E [] elenco_opzioni) Crea una casella combinata contenente l'elenco di opzioni specificato. Il parametro elenco_opzioni un array di elementi di tipo E che contiene le voci da inserire nell'elenco: queste verranno aggiunte nello stesso ordine in cui compaiono nell'array.

Metodi utili della classe JComboBox


public void addItem (E opzione) Aggiunge l'opzione specificata alla fine dell'elenco. public void insertItemAt (E opzione, int indice) Inserisce l'opzione specificata in elenco, nella posizione indicata da indice. public void removeItem (Object opzione) Rimuove dall'elenco l'opzione specificata. public void removeItemAt (int indice) Rimuove dall'elenco l'opzione che si trova nella posizione specificata da indice. public void removeAllItems ()
2 Bocchi Cinzia Ultimo aggiornamento: 25/10/2011

Rimuove dall'elenco tutte le opzioni.

public void setEditable (boolean b) Rende la casella di testo, associata alla casella combinata, editabile (se b vale true) o non modificabile (se b vale false). Nel primo caso l'utente pu inserire un'opzione non presente in elenco; nel secondo caso si deve limitare a selezionare una delle opzioni presenti in elenco.

public boolean isEditable () Restituisce true se la casella combinata editabile; false altrimenti. Per default, una casella combinata non editabile.

public void setMaximumRowCount (int righe) Imposta il numero massimo di opzioni (righe) da visualizzare, quando si fa clic sulla freccia associata alla casella combinata. Se gli elementi presenti in elenco sono in numero superiore a righe, la casella combinata viene dotata automaticamente di una barra di scorrimento verticale.

public int getMaximumRowCount () Restituisce il numero massimo di righe che la casella di controllo in grado di visualizzare, senza usare una barra di scorrimento verticale.

public void setSelectedItem (Object opzione) Seleziona l'opzione passata come parametro, all'interno della casella combinata, ma solo se l'opzione in elenco oppure se, pur non essendo in elenco, la casella combinata editabile. Se l'opzione non in elenco e la casella combinata non editabile, la selezione corrente non cambia.

public Object getSelectedItem () Restituisce l'opzione correntemente selezionata all'interno della casella combinata. public void setSelectedIndex (int indice) Seleziona l'opzione della casella combinata, che si trova nella posizione specificata. public int getSelectedIndex () Restituisce la posizione dell'opzione correntemente selezionata combinata. Se non ci sono selezioni correnti, restituisce -1.

nella

casella

public void setEnabled (boolean b) Abilita (se b true) o disabilita (se b false) la casella combinata. In una casella combinata disabilitata, non possibile selezionare opzioni in elenco o aggiungerne di nuove, nel caso sia editabile. Ridefinisce (override) il metodo setEnabled della classe JComponent.

public int getItemCount () Restituisce il numero di opzioni in elenco.

public Object getItemAt (int indice)


3

Bocchi Cinzia Ultimo aggiornamento: 25/10/2011

Restituisce l'opzione che si trova in elenco, nella posizione specificata.

Eventi generati da una JComboBox


Quando una combobox viene selezionata, facendo clic su di essa, si genera sia un evento Item che un evento Action.

Esempio: combobox non editabile


Il seguente codice crea una GUI uguale a quella illustrata nella figura 1. La combobox inserita direttamente nel pannello del contenuto del frame, dopo aver modificato il layout da border a flow. Quando si seleziona una voce dallelenco si apre, nel browser, la pagina web corrispondente al servizio indicato.
import import import import import import import import import import java.awt.Container; java.awt.Desktop; java.awt.FlowLayout; java.awt.event.ActionEvent; java.awt.event.ActionListener; java.io.IOException; java.net.URI; java.net.URISyntaxException; javax.swing.JComboBox; javax.swing.JFrame;

@SuppressWarnings("serial") public class ComboBoxFrame extends JFrame{ public ComboBoxFrame(){ super ("Combo Box"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container contentPane = getContentPane(); contentPane.setLayout(new FlowLayout()); //variabili contenenti gli URI URI blogger = null; URI google = null; URI youtube = null; URI googlemaps = null; URI picasa = null; //preparazione degli URI try{ blogger = new URI("http://www.blogger.com"); google = new URI("http://www.google.com"); youtube = new URI("http://www.youtube.com"); googlemaps = new URI("http://maps.google.com"); picasa = new URI("http://picasa.google.com"); } catch(URISyntaxException e){ e.printStackTrace(); } 4 Bocchi Cinzia Ultimo aggiornamento: 25/10/2011

//preparazione l'array contenente gli URI final URI[] uri = {blogger, google, youtube, googlemaps, picasa}; //creazione della combo box String[] items = {"Blogger", "Google", "Youtube", "Google Maps", final JComboBox<String> combo = new JComboBox<String>(items); contentPane.add(combo); //disabilita la combo box combo.setEnabled(false); //prima occorre verificare se le Desktop API sono utilizzabili if (Desktop.isDesktopSupported()) { final Desktop desktop = Desktop.getDesktop(); if (desktop.isSupported( Desktop.Action.BROWSE )) combo.setEnabled(true); //se la verifica va a buon fine, abilita la combo box //gestione dell'evento "selezione di un item" combo.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ int selectedIndex = combo.getSelectedIndex(); if (selectedIndex != -1){ try { desktop.browse(uri[selectedIndex]); } catch (IOException e1) { e1.printStackTrace(); } } } }); } } public static void main(String[] args){ ComboBoxFrame frame = new ComboBoxFrame(); frame.pack(); frame.setVisible(true); } }

"Picasa"};

URI: Uniform Resource Identifier


<<Uno Uniform Resource Identifier (URI, acronimo pi generico rispetto ad "URL") una stringa che identifica univocamente una risorsa generica che pu essere un indirizzo Web, un documento, un'immagine, un file, un servizio, un indirizzo di posta elettronica, ecc. L'URL un URI, o pi comunemente chiamato indirizzo web.>>
[da Wikipedia http://it.wikipedia.org/wiki/Uniform_Resource_Identifier]

5 Bocchi Cinzia Ultimo aggiornamento: 25/10/2011

In Java, la creazione di un URI avviene mediante i costruttori della classe java.net.URI. Il costruttore pi semplice, che stato utilizzato nellesempio precedente, ha questa firma:

public URI(String str) throws URISyntaxException Trasforma la stringa passata come parametro in un URI. Lancia una eccezione controllata URISyntaxException se la stringa non rispetta le regole sintattiche stabilite dalle specifiche. Lancia anche una eccezione incontrollata di tipo NullPointerException, se la stringa nulla.

Funzionalit dellAPI Desktop


LAPI Desktop consente di: aprire uno specifico URI con il browser di default, avviare il client di posta elettronica di default, lanciare applicazioni per aprire, editare e stampare file; lapplicazione lanciata quella associata dal sistema al file (es. writer, word, pdf,...).

Prima di utilizzare lAPI Desktop bene accertarsi che sia supportata, utilizzando il metodo:

public static boolean isDesktopSupported() Restituisce true se lAPI Desktop supportata dalla piattaforma in uso, false altrimenti. Se il metodo isDesktopSupported restituisce true, possibile ottenere una istanza di Desktop utilizzando il metodo statico:

public static Desktop getDesktop()

Dopo aver ottenuto listanza di Desktop, possibile aprire una risorsa web nel browser - in questo caso lURI un URL; inviare una mail - in questo caso lURI un indirizzo di posta elettronica; aprire, editare, o stampare una risorsa - in questo caso lURI il pathname di un file. Ogni attivit chiama unazione rappresentata da una delle seguenti istanze: Desktop.Action.BROWSE, Desktop.Action.MAIL, Desktop.Action.OPEN, Desktop.Action.EDIT, Desktop.Action.PRINT. Prima di lanciare una delle azioni citate, necessario verificare se sono supportate dallistanza di Desktop (cio dalla piattaforma in uso), utilizzando il metodo:

public boolean isSupported(Desktop.Action action) Restituisce true se lazione supportata, false altrimenti.
6 Bocchi Cinzia Ultimo aggiornamento: 25/10/2011

Durante lo svolgimento di queste verifiche opportuno disabilitare i componenti dellinterfaccia associati alle varie operazioni, utilizzando il gi noto metodo:

public void setEnabled(boolean b)

Quando i controlli sono stati effettuati e hanno dato esiti positivi, possibile invocare le varie azioni utilizzando i seguenti metodi della classe Desktop:

public void browse(URI uri) throws IOException Visualizza luri nel browser di default. public void mail() throws IOException Lancia il client di posta di default. public void mail(URI mailtoURI) throws IOException Lancia il client di posta di default e imposta i campi del messaggio di posta (to, cc, subject, body,...) ai valori passati come parametri.

public void open(File file) throws IOException Apre il file specificato con lapplicazione associata dal sistema. public void edit(File file) throws IOException Apre il file specificato nelleditor associato dal sistema. public void print(File file) throws IOException Stampa il file specificato utilizzando il comando print del sistema. Si osservi che tutti i metodi precedenti lanciano una eccezione controllata di tipo IOException.

Quest'opera stata rilasciata con licenza Creative Commons Attribution-ShareAlike 3.0 Unported. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-sa/3.0/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. 7 Bocchi Cinzia Ultimo aggiornamento: 25/10/2011