Orientação a Objetos com Javajulionardi.scalfoni.com.br/arquivos/PROIII_Apresentacao7.pdf ·...
Transcript of Orientação a Objetos com Javajulionardi.scalfoni.com.br/arquivos/PROIII_Apresentacao7.pdf ·...
Aula:GUI - Swing
Objetivos: Introdução ao Swing
Principais componentes Swing
Principais propriedades e eventos
Criando interfaces com Swing
OO e Java
Agenda
Interfaces com o Usuário em Java Categorias
Swing Fundamentos Componentes
Diálogos, Janelas, Painéis, Botões, Textos e Labels; Seleção, Menus, Listas, Tabelas, Árvores, outros.
Eventos Ação, Teclado, Mouse
Posicionamento Layout Managers
OO e Java
Interfaces com o Usuário
Java dispões de diversas categorias de interfaces com o usuário: Texto, via console, usando entrada e saída padrão. AWT (Abstract Window Toolkit), antigo conjunto de
componentes de interface gráfica Java, dependentes de plataforma.
Applets, rodam no browser, usando Swing, AWT, 2D (demo\applets).
J2D, Java 2 Dimension (javahome\demo\jfc\Java2D). J3D, Java 3 Dimension. Swing, novo conjunto de componentes, independentes
de plataforma. JSP, baseada em html para interface Web.
OO e Java
GUI - Swing
AWT (Abstract Window Toolkit) Fornece infra-estrutura mínima de GUI; Componentes com aparência dependente da plataforma
(fidelidade ao toolkit nativo); Bugs e incompatibilidades entre plataformas (no
WORA).
Swing (javahome\demo\jfc\SwingSet2)
Uma das bibliotecas gráficas mais completas existentes;
Componentes independentes da implementação nativa (escrita em Java puro);
Aparência consistente entre plataformas.
OO e Java
GUI com Frameworks
A criação de interfaces gráficas em Java pode ser um processo trabalhoso;
Quando se utiliza ferramentas para a criação das GUI pode-se obter ganhos de produtividade;
Algumas ferramentas, entretanto, utilizam bibliotecas proprietárias, o que pode gerar alguma dependência;
Deve-se, portanto, analisar as necessidades, os ganhos e as restrições durante o desenvolvimento do projeto GUI.
OO e Java
Componentes Swing
Swing foi desenvolvida de forma que seus objetos (componentes) possam ser: Montados
Como peças encaixando-se umas sobre as outras Estendidos
Utilizando herança Dimensionados
Alterando seus tamanhos e formas Posicionados
Definindo onde devem aparecer Caracterizados
Modificando sua aparência e comportamento Atribuídos de Eventos
Determinando seus comportamentos
OO e Java
Componentes Swing
Botões JButton
Seleção JCheckBox JRadioButton JComboBox JList
Edição JTextField JTextArea JPasswordField
Janelas JFrame JInternalFrame JOptionPane JMenu, JMenuItem
Outros JLabel JTree JTable JPanel
OO e Java
Componentes Swing
JPanel Painel de propósito geral,
onde outros componentes podem ser montados
JButton Botão que são clicados e
disparam ações
JLabel Rótulos para exibição de
informações
JTextField(JPasswordField, JTextArea) Campo de entrada de texto
OO e Java
Componentes Swing
JCheckBox Botões de seleção múltipla
JRadioButton Botões para seleção única
JComboBox Caixa de seleção
JMenu, JMenuItem Menus de seleção
OO e Java
Componentes Swing
JOptionPane Caixa de diálogo para uso
rápido
JFrame Janelas para comportar
demais componentes
JInternalFrame Janelas internas às JFrames
OO e Java
Componentes Swing
JList Lista de seleção
JTable Tabela de dados
JTree Árvore com elementos (nós)
JFileChooser Seleção de arquivos
OO e Java
JOptionPane
Métodos básicos:
– showConfirmDialog,
– showInputDialog,
– showMessageDialog
Tipos de Mensagem:
– ERROR_MESSAGE,
– INFORMATION_MESSAGE,
– WARNING_MESSAGE,
– QUESTION_MESSAGE,
– PLAIN_MESSAGE
OO e Java
JFrame
Métodos básicos:
– Construtor
– setSize
– setVisible
– setIconImage
– add
– setLayout
– setDefaultCloseOperation
OO e Java
JLabel
Principais métodos void setText(String) String getText()
OO e Java
JTextField
Principais métodos void setText(String) String getText() void setEditable(boolean) boolean isEditable()
OO e Java
JButton
Principais métodos void setText(String) String getText()
OO e Java
JTextArea
Principais métodos void setText(String) String getText() void setEditable(boolean) boolean isEditable() void append(String)
JScrollPane
OO e Java
JComboBox
Principais métodos void addItem(Object) void insertItemAt(Object, int) Object getItemAt(int) Object getSelectedItem() void removeAllItems() void removeItemAt(int) void removeItem(Object)
OO e Java
JRadioButton / ButtonGroup
Principais métodos void setSelected(boolean) boolean isSelected() void doClick() void doClick(int) void add(AbstractButton) void remove(AbstractButton) public ButtonGroup clearSelection()
OO e Java
JCheckBox
Principais métodos void setSelected(boolean) boolean isSelected()
OO e Java
JList Principais métodos
Object getSelectedValue() Object[] getSelectedValues() void setSelectedIndex(int) void setSelectedIndices(int[])
Utilização de Modelos– DefaultListModel: uma implementação básica dos
métodos já está disponível para você.
– AbstractListModel: você herda alguns métodos e implementa outros.
– ListModel: você gerencia tudo.
Modos de seleção
OO e Java
JMenuBar / JMenu / JMenuItem
Principais métodos void setEnabled(boolean) void remove(JMenuItem) void remove(int) JMenu add(JMenu)
OO e Java
JTable
Principais métodos getSelectedRow(); getSelectedColumn(); getRowCount(); Para Models:
setValueAt(Object value, int rowIndex, int colIndex) getValueAt(int rowIndex, int colIndex)
OO e Java
JInternalFrame
Semelhante ao JFrame, mas possui particularidades importantes;
“Está entre” o JFrame e o JOptionPane;
Deve ser inserido em um JDesktopPane;
OO e Java
Gerenciadores de Layout
Os Layout Managers são utilizados para organizar componentes GUI em um container.
Permitem que o programador se concentre "na aparência e no comportamento" das interfaces
Dão menos trabalho que determinar a posição e o tamanho exatos de cada componente na interface.
Os componentes não precisam ter um tamanho fixo e podem ser redimensionar juntamente com as janelas.
Object Component Container JComponent
OO e Java
Layout Managers
Null Layout Tamanho e Posição exatos dos componentes são
necessários component.setBounds(posX, posY, larg, alt)
Valores exatos são difíceis de prever. Janela inflexível
Permite obter qualquer configuração de GUI É bom para desenvolvedor pouco experiente
OO e Java
Layout Managers
Flow Layout Padrão do JPanel Componentes são adicionados em um fluxo
horizontal Alinhamento pode ser ao centro, esquerda ou
direita.
OO e Java
Layout Managers
Border Layout Padrão das janelas (JFrame, JInternalFrame) Componentes organizados em 5 regiões:
PAGE_START, PAGE_END, LINE_START, LINE_END e CENTER
Com redimensionamento, região CENTER ocupa espaço extra.
Somente umcomponente porregião.
OO e Java
Layout Managers
Grid Layout Divide o container em uma grade,
organizando os componentes em células ao longo de linhas e colunas
Apenas um componente por célula, todos com o mesmo tamanho
Adição de componentesé feita na ordem linha,coluna.
OO e Java
Layout Managers
Box Layout Componentes organizados de forma horizontal
(esquerda direita) ou vertical (cima baixo) Construtor com o container que está controlando e
a orientação do layout (X_AXIS ou Y_AXIS)
OO e Java
Layout Managers
Grid Bag Layout LM mais poderoso, e complexo Funciona como o GridLayout, porém, os
componentes podem ocupar mais de uma célula e podem ser adicionados em qualquer ordem
Utiliza um objeto GridBagConstraints para configurar algumas variáveis: gridx e gridy: linha e coluna do componente gridwidth e gridheight: células a ocupar
OO e Java
Layout Managers
Outros: Existem ainda outros gerenciadores de layout
oferecidos pelo Java: SpringLayout GroupLayout ScrollPaneLayout ViewportLayout
por IDEs AbsoluteLayout XYLayout VerticalFlowLayout
e, além desses o desenvolvedor pode se habilitar a criar os seus próprios layouts .
OO e Java
Tratamento de Eventos
Introdução As interfaces gráficas funcionam com um loop que
fica o tempo todo atualizando a tela. Como saber se um botão foi clicado? Como saber qual botão foi clicado? Como saber se o mouse passou por algum componente? Como saber se algum caractere foi digitado? Ficar o tempo todo verificando cada botão, a posição do
mouse, as teclas? Vale a pena criar um loop gigante com um switch
enorme para fazer todas essas verificações?
OO e Java
Tratamento de Eventos
Java permite, através da biblioteca AWT, que os eventos sejam tratados com mais facilidade.
Há três conceitos principais: Component: Componente Gráfico (botão)
javax.swing.JComponent
Listener: Objeto Ouvinte (ouvinte de mouse) java.util.EventListener
Event: Evento a ser tratado (clique do mouse) java.util.EventObject
OO e Java
Tratamento de Eventos
Funcionamento básico: Quando se deseja ‘monitorar’ um componente, é
adicionado um listener (ouvite) a ele: btOk.addActiontListener(actionListener);
Sempre que um listener é adicionado, um evento é associado a ele e uma ação é determinada: public void actionPerformed(ActionEvent ae) { System.out.println("Botão Ok Clicado!");}
Dessa forma, o listener fica ‘escutando’ os eventos dos S.O. para saber sobre o mouse e o teclado e dispara os eventos quando necessário.
OO e Java
Tratamento de Eventos
Exemplo: JButton btSalvar = new JButton("Salvar");
btSalvar.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { System.out.println("Botão Salvar Clicado"); }});
Foi adicionado o ouvinte ActionListener ao botão, com o evento ActionEvent associado e a ação de imprimir uma mensagem.
OO e Java
Tratamento de Eventos
Alguns tipos de eventos e listeners: ActionEvent (componentes de ação)
ActionListener MouseEvent (componentes afetados pelo mouse)
MouseListener e MouseMotionListener ItemEvent (checkboxes e similares)
ItemListener WindowEvent (janelas)
WindowListener KeyEvent (componentes afetados pelo teclado)
KeyListener ***Event
***Listener
OO e Java
Referências
Referências úteis para Swing: Criando Interfaces Gráficas Swing:
http://java.sun.com/docs/books/tutorial/uiswing/index.html
A Visual Guide to Swing Components (Java Look and Feel): http://java.sun.com/docs/books/tutorial/ui/features/components.html
Java Web Start Demos: The SwingSet Demo: http://java.sun.com/products/javawebstart/demos.html
Aplicações Desenvolvidas com Swing: http://java.sun.com/products/jfc/tsc/sightings/index.html
OO e Java
Referências
Eventos Tutorial da Sun:
http://java.sun.com/docs/books/tutorial/uiswing/events/index.html
Layout Managers Tutorial da Sun:
http://java.sun.com/docs/books/tutorial/uiswing/layout/index.html
OO e Java
Swing: Ferramentas
Ferramentas para desenvolvimento de interfaces Swing: NetBeans (Matisse) Eclipse (Visual Editor, Matisse4Eclipse) Swing Designer JFormDesigner FormLayoutMaker Abeille JGoodies