Beruflich Dokumente
Kultur Dokumente
In questa dispensa saranno presentati ulteriori componenti dell'interfaccia utente definiti nel package javax.swing. In particolare ci occuperemo di: caselle di controllo (JCheckBox); pulsanti di opzione (JRadioButton); gruppi di pulsanti di opzione (ButtonGroup). Prima di analizzare le funzionalit dei diversi componenti, vediamo come questi si collocano nella gerarchia delle classi di Java.
Obje ct
ButtonGroup
Com pone nt
Contain er
JCom p onent
Ab stractB utton
JT ogg leButto n
JCheckBox
JRadioButton
Una casella di controllo ha la forma di un piccolo quadrato, con un eventuale segno di spunta all'interno, qualora sia selezionata, come si pu vedere nella figura seguente.
Per attivare una casella di controllo, l'utente pu utilizzare il mouse oppure la barra spaziatrice (quando la casella ha il focus).
public void setSelected (boolean stato) Imposta lo stato della casella di controllo al valore specificato. public void doClick () Realizza un clic, cio ha lo stesso effetto di un clic eseguito dall'utente. public Icon getIcon () Restituisce l'icona della casella di controllo. public void setIcon (Icon icona) Imposta l'icona della casella di controllo al valore passato come parametro. public void setEnabled (boolean b) Abilita (se b true) o disabilita (se b false) la casella di controllo. Ridefinisce (override) il metodo setEnabled della classe JComponent.
public Object[] getSelectedObjects () Restituisce un array di oggetti, di dimensione 1, contenente: l'etichetta del pulsante, se esso selezionato; null altrimenti.
Esempio
Il seguente codice crea una GUI uguale a quella illustrata nella figura 1. Il frame contiene due pannelli: un pannello centrale che riporta la frase "Modifica lo stile del testo"; un pannello a sud, che contiene le due caselle di controllo. La stringa presente nel pannello centrale acquisisce lo stile impostato con le checkbox.
import import import import import import import import import import java.awt.BorderLayout; java.awt.Container; java.awt.Font; java.awt.event.ItemEvent; java.awt.event.ItemListener; javax.swing.JCheckBox; javax.swing.JFrame; javax.swing.JLabel; javax.swing.JPanel; javax.swing.SwingConstants;
public class UseCheckBoxFrame extends JFrame { private JPanel southPane = null; 3 Bocchi Cinzia Ultimo aggiornamento: 25/10/2011
JPanel centerPane = null; JLabel label = null; JCheckBox bold = null; JCheckBox italic = null;
public UseCheckBoxFrame(){ super("CheckBox"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //creazione dei componenti southPane = new JPanel(); centerPane = new JPanel(); label = new JLabel("Modifica lo stile del testo"); label.setFont(new Font("Helvetica",Font.PLAIN,40)); //*******************checkbox****************** bold = new JCheckBox("BOLD"); italic = new JCheckBox("ITALIC"); //********************************************* //aggiunta dei componenti ai pannelli centerPane.add(label,SwingConstants.CENTER); southPane.add(bold); southPane.add(italic); //inserimento dei pannelli nel contentPane Container contentPane = getContentPane(); contentPane.add(centerPane, BorderLayout.CENTER); contentPane.add(southPane, BorderLayout.PAGE_END); //gestore dell'evento ItemListener listener = new ItemListener(){ public void itemStateChanged(ItemEvent e){ applyStyle(); } }; //registrazione del gestore di evento bold.addItemListener(listener); italic.addItemListener(listener); } public void applyStyle(){ if (bold.isSelected() && ! italic.isSelected()) label.setFont(new Font("Helvetica",Font.BOLD,40)); else if (bold.isSelected() && italic.isSelected()) label.setFont(new Font("Helvetica",Font.BOLD+Font.ITALIC,40)); else if (! bold.isSelected() && italic.isSelected()) label.setFont(new Font("Helvetica",Font.ITALIC,40)); else label.setFont(new Font("Helvetica",Font.PLAIN,40)); } public static void main(String[] args){ UseCheckBoxFrame frame = new UseCheckBoxFrame(); frame.pack(); frame.setVisible(true); } }
Si osservi che le due caselle di controllo sono associate allo stesso gestore.
E' importante osservare che il raggruppamento di pi pulsanti di scelta avviene a livello logico ma non si riflette sul layout dei componenti. Per raggruppare visivamente i pulsanti, bisogna inserirli in un pannello.
Esempio
Il seguente codice crea una GUI uguale a quella illustrata nella figura 2. Il frame contiene due pannelli: un pannello centrale colorato; un pannello a sud, che contiene tre pulsanti di opzione. Il pannello centrale acquisisce il colore selezionato. Se nessun radio button selezionato, lo sfondo bianco. Il pannello a sud ha un bordo inciso con titolo che racchiude i pulsanti.
import import import import import import import import import import import import java.awt.BorderLayout; java.awt.Color; java.awt.Container; java.awt.event.ItemEvent; java.awt.event.ItemListener; javax.swing.BorderFactory; javax.swing.ButtonGroup; javax.swing.JFrame; javax.swing.JPanel; javax.swing.JRadioButton; javax.swing.border.Border; javax.swing.border.TitledBorder;
public class UseRadioButtonFrame extends JFrame { private private private private private JPanel southPane = null; JPanel centerPane = null; JRadioButton blue = null; JRadioButton red = null; JRadioButton green = null;
public UseRadioButtonFrame(){ super("RadioButton"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //creazione dei componenti southPane = new JPanel(); centerPane = new JPanel(); centerPane.setBackground(Color.WHITE); //*******************radio button****************** blue = new JRadioButton("BLUE"); red = new JRadioButton("RED"); green = new JRadioButton("GREEN"); //********************************************* //gestione dell'evento di selezione blue.addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent e){ centerPane.setBackground(Color.BLUE); } }); 8 Bocchi Cinzia Ultimo aggiornamento: 25/10/2011
red.addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent e){ centerPane.setBackground(Color.RED); } }); green.addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent e){ centerPane.setBackground(Color.GREEN); } }); //inserimento dei pulsanti in un gruppo ButtonGroup group = new ButtonGroup(); group.add(blue); group.add(red); group.add(green); //aggiunta dei componenti ai pannelli southPane.add(blue); southPane.add(red); southPane.add(green); //inserimento del bordo Border border = BorderFactory.createEtchedBorder(); Border titledBorder = BorderFactory.createTitledBorder(border, "Colori", TitledBorder.CENTER, TitledBorder.DEFAULT_POSITION); southPane.setBorder(titledBorder); //inserimento dei pannelli nel contentPane Container contentPane = getContentPane(); contentPane.add(centerPane, BorderLayout.CENTER); contentPane.add(southPane, BorderLayout.PAGE_END); } public static void main(String[] args){ UseRadioButtonFrame frame = new UseRadioButtonFrame(); frame.pack(); frame.setVisible(true); }
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. 9 Bocchi Cinzia Ultimo aggiornamento: 25/10/2011