Você está na página 1de 12

AULA TEÓRICA 3

Tema 3. Gestão de eventos (continuação)


 Componentes Caixa de Verificação e Botões de
Rádio
 Componente Caixa de Combinação

1
Componentes Caixa de Verificação e Botões de Rádio
Os componentes GUI Swing contêm três classes para 3 tipos de botões: JToggleButton,
JCheckBox e JRadioButton que têm valores activados/desactivados ou verdadeiro/falso.
As classes JCheckBox e JRadioButton são subclasses de JToggleButton.
Os componentes de JRadioButton e JCheckBox são diferentes não apenas pela forma.
Normalmente existem vários RadioButton agrupados e apenas um dos RadioButton do
grupo pode estar seleccionado (verdadeiro) a qualquer momento.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CheckBoxTest extends JFrame
{ private JTextField campo;
private JCheckBox bold, italic;
private Container cont;
// configura a GUI
public CheckBoxTest()
{ super( "JCheckBox Test");
cont = getContentPane();
cont.setLayout(new FlowLayout());
// configura JTextField e configura a fonte
campo = new JTextField("Watch the font style change", 20);
campo.setFont(new Font("Serif", Font.PLAIN, 14));
cont.add(campo);
2
// cria objectos de JCheckBox
bold = new JCheckBox("Bold");
cont.add(bold);
italic = new JCheckBox("Italic");
cont.add(italic);

// registra listener para JCheckBox


TrataEvento trat = new TrataEvento();
bold.addItemListener(trat);
italic.addItemListener(trat);
setSize(275, 100);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args)


{ new CheckBoxTest();
}

3
//classe interna para tratmento de eventos
private class TrataEvento implements ItemListener
{ private int valBold = Font.PLAIN;
private int valItalic = Font.PLAIN;

public void itemStateChanged(ItemEvent x)


{ // processa eventos da caixa bold
if (x.getSource() == bold)
if (x.getStateChange() == ItemEvent.SELECTED)
valBold = Font.BOLD;
else
valBold = Font.PLAIN;
// processa eventos da caixa italic
if (x.getSource() == italic)
if (x.getStateChange() == ItemEvent.SELECTED)
valItalic = Font.ITALIC;
else
valItalic = Font.PLAIN;

// configura a fonte do campo de texto para ambas caixas


campo.setFont(new Font("Serif", valBold + valItalic, 14));
}
} 4
}
Quando o utilizador clica em um CheckBox, é gerado um ItemEvent que pode ser
tratado por um ItemListener. O ItemListener deve definir o método
itemStateChanged. Esse método é chamado quando o utilizador clica na caixa bold e
italic. O método utiliza x.getSource() para determinar em qual das caixas se clicou.

Os botões de opção (definidos na classe JRadioButton) são semelhantes às caixas


de marcação no sentido de que têm dois estados – seleccionado e não seleccionado.
Entretanto, os botões de opção normalmente aparecem como um grupo em que apenas
um botão de opção pode ser seleccionado por vez. Seleccionar um botão de opção
diferente no grupo automaticamente força todos os outros botões de opção no grupo a
passar para o estado não- seleccionado (mutuamente exclusivas).

O relacionamento lógico entre os botões de opção é mantido por um objecto


ButtonGroup (da javax.swing). O objecto ButtonGroup em si não é um
componente de GUI e por isso não é exibido numa interface com o utilizador. Em seu
lugar, os objectos individuais JRadioButton do grupo são exibidos na GUI.
Um erro comum consiste em adicionar um objecto ButtonGroup a um Container.

5
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class RadioButtonTest extends JFrame
{ private JTextField field;
private Font plainFont, boldFont,italicFont,boldItalicFont;
private JRadioButton plainButton,boldButton,italicButton,
boldItalicButton;
private ButtonGroup radioGroup;
private Container cont;
// cria GUI e fontes
public RadioButtonTest()
{ super("RadioButton Test");
cont = getContentPane();
cont.setLayout(new FlowLayout());
field = new JTextField("Watch the font style change", 25);
cont.add(field);
// cria botões de opção
plainButton = new JRadioButton("Plain", true);
cont.add(plainButton);
boldButton = new JRadioButton("Bold", false);
cont.add(boldButton);
italicButton = new JRadioButton("Italic", false);
6
cont.add(italicButton);
boldItalicButton = new JRadioButton("Bold/Italic", false);
cont.add(boldItalicButton);
// registra eventos para JRadioButtons
TrataEvento x = new TrataEvento();
plainButton.addItemListener(x);
boldButton.addItemListener(x);
italicButton.addItemListener(x);
boldItalicButton.addItemListener(x);
// cria relacionamento logico entre JRadioButtons,
radioGroup = new ButtonGroup();
radioGroup.add(plainButton);
radioGroup.add(boldButton);
radioGroup.add(italicButton);
radioGroup.add(boldItalicButton);

// cria objectos Font


plainFont = new Font("Serif", Font.PLAIN, 14);
boldFont = new Font("Serif", Font.BOLD, 14);
italicFont = new Font("Serif", Font.ITALIC, 14);
boldItalicFont = new Font("Serif",Font.BOLD+Font.ITALIC,14);
field.setFont(plainFont);
setSize(300, 100);
setVisible(true); 7
}
public static void main(String[] args)
{ RadioButtonTest apl = new RadioButtonTest();
apl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

// classe interna para tratar eventos de radio botoes


private class TrataEvento implements ItemListener
{ // trata eventos com radio botoes
public void itemStateChanged(ItemEvent evt)
{ if (evt.getSource() == plainButton)
field.setFont(plainFont);
else
if (evt.getSource() == boldButton)
field.setFont(boldFont);
else
if (evt.getSource() == italicButton)
field.setFont(italicFont);
else
if (evt.getSource() == boldItalicButton)
field.setFont(boldItalicFont);
}
}
}
8
Componente Caixa de Combinação
A caixa de combinação fornece uma lista da qual o utilizador pode fazer uma selecção.
A classe JComboBox, assim como as JCheckBox e os JRadioButton, geram
ItemIvent.
No exemplo a seguir utiliza-se uma Combo Box para fornecer uma lista de quatro
nomes de ficheiros de imagem. Quando se selecciona um nome de ficheiro, a imagem
correspondente é exibida como um Icon num Label.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ComboBoxTest extends JFrame
{ private JComboBox imagesComboBox;
private JLabel lab;
private String names[]={"bug1.gif","bug2.gif","travelbug.gif",
"buganim.gif"};
private Icon icons[] = {new ImageIcon(names[0]),
new ImageIcon(names[1]),
new ImageIcon(names[2]),
new ImageIcon(names[3])};
// configura a GUI
public ComboBoxTest()
{ super("Testing JComboBox");
Container c = getContentPane();
9
c.setLayout(new FlowLayout());
// configura a JComboBox e registra o gestor de eventos
imagesComboBox = new JComboBox(names);
imagesComboBox.setMaximumRowCount(3);
imagesComboBox.addItemListener(
//classe interna anonima para tratar eventos de JComboBox
new ItemListener()
{ public void itemStateChanged(ItemEvent ev)
{ if (ev.getStateChange() == ItemEvent.SELECTED)
lab.setIcon(icons[imagesComboBox.getSelectedIndex()]);
}
} // fim da classe interna anonima
); // fim da chamada para addActionListener
c.add(imagesComboBox);
// configura o JLabel para exibir icones
lab = new JLabel(icons[0]);
c.add(lab);
setSize(350, 150);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
10
public static void main(String[] args)
{ new ComboBoxTest(); }
}

O método setMaximumRowCount() permita estabelecer o número máximo de


elementos que são exibidos quando o utilizador clica na JComboBox. Se houver mais
itens que o número máxmo de elementos que são exibidos, a JComboBox fornece
automaticamente uma barra de rolagem.

11
Referência bibliográfica:
António José Mendes; Maria José Marcelino.
“Fundamentos de programação em Java 2”. FCA. 2002.
Elliot Koffman; Ursula Wolz.
“Problem Solving with Java”. 1999.
F. Mário Martins;
“Programação Orientada aos objectos em Java 2”, FCA, 2000,
John Lewis, William Loftus;
“Java Software Solutions: foundation of program design”, 2nd edition, Addision-Wesley

John R. Hubbard.
“Theory and problems of programming with Java”. Schaum’s Outline series. McGraw-Hill.
H. Deitel; P. Deitel.
“Java, como programar”. 4 edição. 2003. Bookman.
Rui Rossi dos Santos.
“Programando em Java 2– Teoria e aplicações”. Axcel Books. 2004

12

Você também pode gostar