Upload
others
View
10
Download
0
Embed Size (px)
Citation preview
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Interfaces Gr�a�cas em Java
Sum�ario
I SWING generalidadesI Componentes e ContentoresI Modelo de eventosI Gestores de Coloca�c~aoI Componentes e Contentores com exemplos
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Bibliogra�a
I The Java Tutorial, Trail: Creating a GUI with JFC/SwingI \Java How to Program", Deitel & Deitel, (cap��tulo 12)I The Java API
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Sugest~oes para estudar/praticar
I http://developer.java.sun.com/developer/onlineTraining/I ver os exemplos que vem com o JDK (direct�orio demo)I ver exemplos (downloadable) do livro de Deitel & Deitel
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Java Foundation Classes (JFC)
conjunto de APIs na tentativa de tornar o Java uma linguagempara aplica�c~oes empresarais completasJFC �e composta por 5 APIs:
I AWTI Java 2DI AcessibilidadeI Drag and DropI Swing
AWT | Abstract Windowing Toolkit
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Swing | resumo
I Widgets do Swing extendem os do AWTI O modelo de eventos do AWT continua a ser usadoI Baseado em Componentes (e Contentores)I suporta os componentes do AWT mais outros (ex JComponent)I Drag and Drop Support - troca de informa�c~ao entre aplica�c~oes
noutra API do JFCI Utiliza componentes lightweight (n~ao dependentes de componentes
nativos)I Utiliza uma variante da arquitectura Model View Controller (MVC)I Tem Pluggable Look And Feel (PLAF) - visual das janelas con�gur�avelI Utiliza o Delegation Event Model
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Porque Swing
I AWT n~ao �e su�cientemente funcional para aplica�c~oesindustriaisa biblioteca de widgets �e pequenaos widgets s�o disp~oem de funcionalidades b�asicasextens~oes s~ao habitualmente necess�arias
I componentes AWT dependem de componentescorrespondentes nativos
I widgets n~ao tem exactamente o mesmo comportamento emdiferentes plataformas
AWT { Abstract Windowing Toolkit
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Pacotes importantes
I javax.swing - new GUI tools com novos componentes ...I javax.border - classes para desenhar contornos nos
componentesI javax.swing.colorchooser - classes para escolha de coresI javax.swing.event - classe para novos modelos de eventosI javax.swing.�lechooser - classes para escolha de �cheirosI javax.swing.plaf.* - classes for the Pluggable Look and FeelI javax.swing.text - manipula�c~ao de textoI ...I javax.accessibility - for disabled-persons accessibility
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Componente �uteis
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Componentes Heavyweight
I Usados pelo AWTI RectangularesI OpacosI S~ao sempre desenhados em cima de componentes lightweightI Dependem de cong�eneres nativosI Look and Feel depedente do sistema operativo (SO)I funcionalidade determinada pelo SOI mais r�apidos porque o SO realiza o trabalho
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Componentes Lightweight
I Podem ter partes transparentesI Podem tomar qualquer formaI Podem-se sobrepor entre elesI Eventos do rato ocorrem atrav�es das partes transparentesI N~ao depedem de cong�eneres nativos
I Look and Feel desenhado em tempo de execu�c~ao pelo quefuncionalidades s~ao o mesmo em todas as plataformas. Maislento por que o Java tem que fazer o trabalho.
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Interface Gr�a�ca b�asica
import javax.swing.*;import java.awt.*;import java.awt.event.*;
public class TestaJFramef
public static void main(String s[])fJFrame frame = new JFrame("Exemplo de JFrame");Container c = frame.getContentPane();c.setBackground( Color.yellow );c.add(new JButton(\botao"), BorderLayout.SOUTH);c.add(new JLabel(\Frase para o JLabel"));frame.addWindowListener(
new WindowAdapter() f // listener para terminar qd fecha janelapublic void windowClosing(WindowEvent event)f System.exit(0);g
g);frame.setSize(400,400);frame.show();
gg
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Resultado da Interface Gr�a�ca b�asica
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Elementos da Interface Gr�a�ca
I Contentores de topo - onde os outros componentes se desenhamJFrame, JDialog, JApplet
I Contentores Interm�edios- facilitam arranjo de outrosJPanel, JScrollPane, JTabbedPane
I Componentes at�omicos - apresentam informa�c~aoJButton, JComboBox, JTextField, Jtable
I Cria�c~ao de ComponentesI cria�c~ao do objectoI altera�c~ao dos atributosI (para contentores) associa�c~ao de um gestor de coloca�c~oes
(Layout Manager)I associa�c~ao de um gestor de eventos e programa�c~ao de
comportamentosI (se n~ao �e contentor de topo) adicionar a um contentor
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Swing | hierarquia de componentes | (semelhantes aos de AWT)
do tutorial: http://developer.java.sun.com/developer/onlineTraining/GUI/Swing1/
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Swing | hierarquia de componentes \novos"
do tutorial: http://developer.java.sun.com/developer/onlineTraining/GUI/Swing1/
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Hierarquia de componentes comuns do Swing
java.lang.Object"
java.awt.Component"
java.awt.Container"
javax.swing. JComponent
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Model / View / Controller
Elementos independentes:I Model
I dados de estado para cada componenteI dados diferentes para modelos diferentes
I ViewI \visual" do componente no ecr~a
I ControllerI como o componente reage a eventos
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Comunica�c~ao em MVC
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Exemplo de MVC
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
MVC em Java
I Swing usa o model-delegate design, uma arquitectura semelhante aoMVC.
I O View e Controller s~ao combinados no UI delegate uma vez que o Javatrata a maioria do seventos como o AWT.
I Multiplas views podem ser usados com um �unico modelo.I Mudan�cas num �unico modelo podem afectar v�arias views.I Os componentes podem partilhar um modelo (JScrollbar e JSlider
partilham o BoundedRangeModel).
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
MVC em Java
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Swing | Eventos
I EventObject
I objecto com informa�c~ao sobre evento (inclui id fonte)I fontes de eventos: componentesI Object getSource() Returns the object that �red the event
I Tipos de eventos
I eventos de baixo n��velI ex: eventos do rato e do teclado, resultados de entradas do
utilizadorI eventos semanticos
I ex: eventos de ac�c~ao e de selec�c~ao, com de�ni�c~ao dependentedo componente
I Tratamento: dirigido pelos eventos semanticos
I independentes da plataforma e do "look and feel"I independentes da composi�c~ao do objecto gerador
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Tratar Eventos
I Tratar eventos
I associar atendedores �as fontes de eventosI cada fonte pode ter v�arios atendedoresI cada atendedor pode tratar eventos de v�arias fontes
I Usar um atendedor de eventos
I de�nir classe que implementa um Listener ou extende classeque o implementaI public class UmaClasse implements ActionListener f...
I Registar uma instancia do gestor como atendedor de um oumais componentesI umComponente.addActionListener(instanciaDeUmaClasse)
I escrever c�odigo para os m�etodos da interface do ListenerI public void actionPerformed(ActionEvent e) f...
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Registar um Event handler
do livro Deitel & Deitel
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Atendedores de Eventos
I Cada tipo de atendedor tem uma interface de�nida
I interface tem m�etodos para todos os eventos que o atendedorpode tratar
I atendedor espec���co tem de implementar todos os m�etodosI m�etodos para eventos irrelevantes podem ter corpo vazio
I em vez de usar interface: usar adaptadorI classe que implementa a interface e fornece m�etodos por
omiss~aoI subclasse desta s�o tem de de�nir os m�etodos a que quer dar
conte�udo pr�oprio
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Atendedores de Eventos
I Classe do atendedor pode ser interna
I classe interna tem acesso a atributos privados da classeI no exemplo: class QuitListener implements ActionListener f
I Classe do atendedor pode ser an�onima
I desnecess�ario criar nome para classe que se de�ne para criar 1s�o instancia
I no exemplo: combo.addActionListener( new ActionListener ()fpublic void actionPerformed(ActionEvent e) f ...gg)
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Exemplos de Atendedores
// classes embutidas ("nested")
class QuitListener implements ActionListener fpublic void actionPerformed(ActionEvent e) fSystem.exit(0);
gg
class ClickListener implements ActionListener fpublic void actionPerformed(ActionEvent e) fnumClicks++;etiqueta.setText(labelPre�x + numClicks);
gg
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Delegation Event Model
o Swing �e baseado no Delegation Event Model do JDK 1.1
I No JDK 1.0 s�o as classes dos componentes tem m�etodos paratratar eventos, e por isso nenhum outro objecto pode tratareventos.
I M�etodos de tratamento e eventos de componentes s~aosbstituidos por interfaces de event listener classes deadapta�c~ao
I Qualquer classe pode usar listener interfaces ou adapterclasses.
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Modelo de eventos do JDK 1.0
I programas tem que extender os componentes GUI e sobreporaction() ou handleEvent()
I s~ao necess�arias muitas classesI eventos s~ao propagados pela hierarquia acima do GUI at�e
serem consumidos ou atingirem a raizI eventos para a hierarquia podem ser tratados por um
container (�e necess�ario uma instru�c~ao condicional complexa)
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Problemas com o modelo de eventos do JDK 1.0
I extender a classe de um componente sem mudar nada �eredundante e enfadonho
I n~ao �e poss��vel separar o modelo da aplica�c~ao do GUI (n~ao h�aMVC)
I complicado processar tipos diferentes de eventos uma vez queos eventos s~ao tratados pelos mesmos m�etodos
I events s~ao entregues aos componentes quer os componentesos processem ou n~ao
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
JDK 1.1 Event Listeners
I objectos que implementam uma interface EventListenerespec���ca por extens~ao do gen�erico java.util.EventListener
I de�ne os m�etodos que pode ser invocados pela fonte deeventos em resposta a cada tipo de evento espec���co tratadopela interface
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
I Baixo n��vel
I entrada de baixo n��vel ou uma ocorrencia janela-sistema numcomponente visual no ecr~a
I java.awt.event.ComponentEvent (redimensionamento decomponente, movido, etc.)
I java.awt.event.KeyEvent (componente recebeu key-press,key-release, etc.)
I java.awt.event.MouseEvent (componente recebeumouse-down, mouse-move, etc.)
I java.awt.event.FocusEvent (componente recebeu focus, perdade focus)
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Tipos de Eventos
I SemanticosI relacionados com a semantica do modelo de componentes de
uma interface com o utilizadorI java.awt.event.ActionEvent ("executa comando")I java.awt.event.AdjustmentEvent ("valor do componente
ajustado")I java.awt.event.ItemEvent ("estado de um item modou")I java.awt.event.TextEvent ("o valor do texto mudou")
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Fontes de Eventos
I M�ultiplos atendedores de eventos podem ser atribuidos a umafonte (ordem n~ao �e garantida)
I Baixo n��velI java.awt.Component
I addComponentListener ( ComponentListener l)I addMouseListener ( MouseListener l)I addMouseMotionListener ( MouseMotionListener l)
I SemanticoI java.awt.List
I addActionListener ( ActionListener l)I addItemListener ( ActionListener l)
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Classes de Adaptadores
Estas podem ser extendidads em vez de se usar interfaces, quandoo interface tem muitos m�etodos n~ao usados (ex:MouseMotionListener).As classes Adapter:I java.awt.event.ComponentAdapterI java.awt.event.ContainerAdapterI java.awt.event.FocusAdapterI java.awt.event.KeyAdapterI java.awt.event.MouseAdapterI java.awt.event.MouseMotionAdapterI java.awt.event.WindowAdapter
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Layout Managers
I arranjam os widgets de acordo com um padr~aoI podem actualizar os contentores para suportar
redimensionamento do contentor ou componentes internosI tornam poss��vel a elabora�c~ao de UIs complexos
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Swing | Gestor de Coloca�c~ao
I Determina o arranjo dos componentes
I tamanho e posi�c~ao dos componentes nos contentores
I Variantes de Gestor:
I BorderLayout, BoxLayout, FlowLayout, GridBagLayout,GridLayout, CardLayout
I BorderLayoutNORTH
WETS CENTER EASTSOUTH
I BoxLayout: componentes em linhaI FlowLayout: componentes por ordem em linhasI GridLayout: componentes do mesmo tamanho, em linhas e
colunasI GridBagLayout: componentes em linhas e colunas, tamanhos
ex��veis
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Flow Layout
I Arranja os componentes da esquerda para a direita e do cimo para baixoI Coloca tantos componentes numa linha quanto possivel antes de passar �a linha
seguinteI deixa o utilizador especi�car o alinhamentoe espa�camento horizontal e vertical
toolbar.setLayout(new FlowLayout(FlowLayout.LEFT));toolbar.add(playButton);
toolbar.add(stopButton);
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Border Layout
I Dsitribui os componentes pelos bordos ou centro
I NORTH
I SOUTH
I EAST
I WEST
I CENTERI permite especi�car espa�camento horizontal e vertical
contentPanel.setLayout(new BorderLayout(0,0));contentPanel.add(\Center", oPanel);
contentPanel.add(\South, controlPanel);
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
Grid Layout
I Distribui os components numa grelha com um n�umero de colunas e linahsespeci�cado
I linhas tem a mesma altura e colunas a mesma largura
contentPanel.setLayout(new GridLayout(2,4));contentPanel.add(startButton, 0, 0);
contentPanel.add(stopButton, 1, 3);
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
JLabel { exemplo
import java.awt.*;import java.awt.event.*;import javax.swing.*;
public class LabelTest extends JFrame fprivate JLabel label1, label2, label3;
public LabelTest()f // constroi o GUIsuper( "Testing JLabel" );Container container = getContentPane(); // obtem area colocar componentescontainer.setLayout( new FlowLayout() );
label1 = new JLabel( "Label with text" ); // construtor com argumento Stringlabel1.setToolTipText( "This is label1" );container.add( label1 );
Icon bug = new ImageIcon("bug1.gif");label2 = new JLabel( "Label with text and icon", bug, SwingConstants.LEFT ); // construtor com String e Iconlabel2.setToolTipText( "This is label2" );container.add( label2 );
do livro Deitel & DeitelRui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
JLabel { exemplo | continua�c~ao
label3 = new JLabel(); // construtor sem argumentoslabel3.setText( "Label with icon and text at bottom" );label3.setIcon( bug );label3.setHorizontalTextPosition( SwingConstants.CENTER );label3.setVerticalTextPosition( SwingConstants.BOTTOM );label3.setToolTipText( "This is label3" );container.add( label3 );
setSize( 275, 170 );setVisible( true );
g
public static void main( String args[] ) f // executar a apliaccaoLabelTest application = new LabelTest();application.setDefaultCloseOperation(JFrame.EXIT ON CLOSE );
gg // �m da classe LabelTest
do livro Deitel & Deitel
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
JTextField { exemplo
import java.awt.*;import java.awt.event.*;import javax.swing.*;
public class TextFieldTest extends JFrame fprivate JTextField textField1, textField2, textField3;private JPasswordField passwordField;
public TextFieldTest() f // constroi o GUIsuper( "Testing JTextField and JPasswordField" );Container container = getContentPane();container.setLayout( new FlowLayout() );
textField1 = new JTextField( 10 );container.add( textField1 );
textField2 = new JTextField( "Enter text here" );container.add( textField2 );
do livro Deitel & DeitelRui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
JTextField { exemplo | continua�c~ao
textField3 = new JTextField( "Uneditable text �eld", 20 );textField3.setEditable( false );container.add( textField3 );
passwordField = new JPasswordField( "Hidden text" );container.add( passwordField );
TextFieldHandler handler = new TextFieldHandler(); // registar o handlertextField1.addActionListener( handler );textField2.addActionListener( handler );textField3.addActionListener( handler );passwordField.addActionListener( handler );setSize( 325, 100 );setVisible( true );
g
public static void main( String args[] ) f // executar a apliaccaoTextFieldTest application = new TextFieldTest();application.setDefaultCloseOperation(JFrame.EXIT ON CLOSE);
g
do livro Deitel & DeitelRui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
JTextField { exemplo | continua�c~ao
private class TextFieldHandler implements ActionListener f //classe privada internapublic void actionPerformed( ActionEvent event )f // procesa os eventosString string = "";
if ( event.getSource() == textField1 )string = "textField1: " + event.getActionCommand();
else if ( event.getSource() == textField2 )string = "textField2: " + event.getActionCommand();
else if ( event.getSource() == textField3 )string = "textField3: " + event.getActionCommand();
else if ( event.getSource() == passwordField ) fJPasswordField pwd = (JPasswordField) event.getSource();string = "passwordField: " + new String(passwordField.getPassword());g
JOptionPane.showMessageDialog( null, string );g
g // �m da classe privada interna TextFieldHandlerg // �m da classe TextFieldTest
do livro Deitel & DeitelRui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
JButton { exemplo
import java.awt.*;import java.awt.event.*;import javax.swing.*;
public class ButtonTest extends JFrame fprivate JButton plainButton, fancyButton;
public ButtonTest()f // cnstruir o GUIsuper( "Testing Buttons" );Container container = getContentPane();container.setLayout( new FlowLayout() );
// criar os botoesplainButton = new JButton( "Plain Button" );container.add( plainButton );
do livro Deitel & Deitel
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
JButton { exemplo | continua�c~ao
Icon bug1 = new ImageIcon( "bug1.gif" );Icon bug2 = new ImageIcon( "bug2.gif" );fancyButton = new JButton( "Fancy Button", bug1 );fancyButton.setRolloverIcon( bug2 );container.add( fancyButton );
ButtonHandler handler = new ButtonHandler(); // event handler para os botoesfancyButton.addActionListener( handler );plainButton.addActionListener( handler );
setSize( 275, 100 );setVisible( true );
g
public static void main( String args[] ) fButtonTest application = new ButtonTest();
application.setDefaultCloseOperation(JFrame.EXIT ON CLOSE);g
do livro Deitel & DeitelRui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
JButton { exemplo | continua�c~ao
private class ButtonHandler implements ActionListener f
public void actionPerformed( ActionEvent event )fJOptionPane.showMessageDialog(null,"You pressed: "+event.getActionCommand());
gg // �m da classe privada interna ButtonHandler
g // �m da classe ButtonTest
do livro Deitel & Deitel
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
JRadioButton | exemplo
import java.awt.*;import java.awt.event.*;import javax.swing.*;
public class RadioButtonTest extends JFrame fprivate JTextField �eld;private Font plainFont, boldFont, italicFont, boldItalicFont;private JRadioButton plainButton, boldButton, italicButton, boldItalicButton;private ButtonGroup radioGroup;
do livro Deitel & Deitel
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
JRadioButton | exemplo | continua�c~ao
public RadioButtonTest()f // cria a GUIsuper( "RadioButton Test" );Container container = getContentPane(); // obtem area para colocacao componentescontainer.setLayout( new FlowLayout() ); // escolhe layout
�eld = new JTextField("Watch the font style change", 25);container.add( �eld );
// criar os botoesplainButton = new JRadioButton("Plain", true);container.add(plainButton);boldButton = new JRadioButton( "Bold", false );container.add( boldButton );italicButton = new JRadioButton( "Italic", false );container.add( italicButton );boldItalicButton = new JRadioButton("Bold/Italic", false);container.add(boldItalicButton);
do livro Deitel & DeitelRui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
JRadioButton | exemplo | continua�c~ao
// registar o handler para os botoesRadioButtonHandler handler = new RadioButtonHandler();plainButton.addItemListener( handler );boldButton.addItemListener( handler );italicButton.addItemListener( handler );boldItalicButton.addItemListener( handler );
// criar a relacao entre os botoes de um JRadioButtonsradioGroup = new ButtonGroup();radioGroup.add( plainButton );radioGroup.add( boldButton );radioGroup.add( italicButton );radioGroup.add( boldItalicButton );
do livro Deitel & Deitel
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
JRadioButton | exemplo | continua�c~ao
// criar objectos tipo fontplainFont = 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 );�eld.setFont( plainFont );
setSize( 300, 100 );setVisible( true );
g
do livro Deitel & Deitel
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
JRadioButton | exemplo | continua�c~ao
public static void main( String args[] ) f // executar a aplicacaoRadioButtonTest application = new RadioButtonTest();application.setDefaultCloseOperation(JFrame.EXIT ON CLOSE );
g
private class RadioButtonHandler implements ItemListener fpublic void itemStateChanged( ItemEvent event ) f // processar eventosif ( event.getSource() == plainButton ) // click no plainButton�eld.setFont( plainFont );
else if ( event.getSource() == boldButton ) // click no boldButton�eld.setFont( boldFont );else if ( event.getSource() == italicButton ) // click no italicButton�eld.setFont( italicFont );else if ( event.getSource() == boldItalicButton ) // click no boldItalicButton�eld.setFont( boldItalicFont );
gg // �m da classe privada RadioButtonHandler
g // �m da classe RadioButtonTest
do livro Deitel & DeitelRui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
JComboBox | exemplo
import java.awt.*;import java.awt.event.*;import javax.swing.*;
public class ComboBoxTest extends JFrame fprivate JComboBox imagesComboBox;private JLabel label;private String names[] = f"bug1.gif","bug2.gif", "travelbug.gif","buganim.gif" g;private Icon icons[] = f new ImageIcon(names[0]), new ImageIcon(names[1]),
new ImageIcon(names[2]), new ImageIcon(names[3]) g;
do livro Deitel & Deitel
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
JComboBox | exemplo | continua�c~ao
public ComboBoxTest() f // construir a GUIsuper( "Testing JComboBox" );Container container = getContentPane(); // obter area para colocar componentescontainer.setLayout(new FlowLayout()); // escolher layout
imagesComboBox = new JComboBox(names);imagesComboBox.setMaximumRowCount(3);imagesComboBox.addItemListener( // crie e registe o \listener"
new ItemListener() f // classe anonimapublic void itemStateChanged(ItemEvent event) f // \event handler"if ( event.getStateChange() == ItemEvent.SELECTED )label.setIcon(icons[imagesComboBox.getSelectedIndex()]);
gg // �m da classe anonima
); // �m do registo do \listener"container.add( imagesComboBox );label = new JLabel( icons[ 0 ] ); // cria o JLabelcontainer.add( label ); // coloca no contentorsetSize( 350, 100 );setVisible( true );
g
do livro Deitel & Deitel
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
JComboBox | exemplo | continua�c~ao
public static void main( String args[] ) f // execute a aplicacaoComboBoxTest application = new ComboBoxTest();
application.setDefaultCloseOperation(JFrame.EXIT ON CLOSE );g
g // �m da classe ComboBoxTest
do livro Deitel & Deitel
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
JPanel | exemplo
import java.awt.*;import java.awt.event.*;import javax.swing.*;
public class PanelDemo extends JFrame fprivate JPanel buttonPanel;private JButton buttons[];
public PanelDemo() f // preparacao da GUIsuper( "Panel Demo" );
Container container = getContentPane(); // obter local colocacao componentes
buttons = new JButton[ 5 ]; // criar o array de botoes
buttonPanel = new JPanel();buttonPanel.setLayout(new GridLayout(1, buttons.length)); //escolha do layout
do livro Deitel & DeitelRui Camacho Complementos de Programa�c~ao e Algoritmos { LEICApresenta�c~aoJava { conceitos B�asicosJava { t�opicos espec���cos
JPanel | exemplo { continua�c~ao
// criar e adicionar os botoesfor(int count = 0; count < buttons.length; count++) fbuttons[count] = new JButton(\Button \ + (count + 1));buttonPanel.add(buttons[count]);
g
container.add( buttonPanel, BorderLayout.SOUTH );setSize( 425, 150 );setVisible( true );
g
public static void main( String args[] ) f // execute a aplicacaoPanelDemo application = new PanelDemo();
application.setDefaultCloseOperation(JFrame.EXIT ON CLOSE);g
g // �m da classe PanelDemo
do livro Deitel & Deitel
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC