Orientação a Objetos com Java Julio Cesar Nardi [email protected] 2011/2 Aula: GUI - Swing Objetivos: Introdução ao Swing Principais componentes Swing Principais propriedades e eventos Criando interfaces com Swing Agenda Interfaces com o Usuário em Java Categorias Swing Fundamentos Componentes Eventos Diálogos, Janelas, Painéis, Botões, Textos e Labels; Seleção, Menus, Listas, Tabelas, Árvores, outros. 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 Principais Componentes Swing OO e Java Hierarquia de Componentes OO e Java Hierarquia de Componentes OO e Java Componentes Swing Swing foi desenvolvida de forma que seus objetos (componentes) possam ser: Montados Estendidos Definindo onde devem aparecer Caracterizados Alterando seus tamanhos e formas Posicionados Utilizando herança Dimensionados Como peças encaixando-se umas sobre as outras Modificando sua aparência e comportamento Atribuídos de Eventos Determinando seus comportamentos OO e Java Componentes Swing Botões JButton JCheckBox JRadioButton JComboBox JList Edição JTextField JTextArea JPasswordField Janelas Seleção JFrame JInternalFrame JOptionPane JMenu, JMenuItem Outros JLabel JTree JTable JPanel OO e Java Componentes Swing JPanel JButton Botão que são clicados e disparam ações JLabel Painel de propósito geral, onde outros componentes podem ser montados Rótulos para exibição de informações JTextField (JPasswordField, JTextArea) Campo de entrada de texto OO e Java Componentes Swing JCheckBox JRadioButton Botões para seleção única JComboBox Botões de seleção múltipla Caixa de seleção JMenu, JMenuItem Menus de seleção OO e Java Componentes Swing JOptionPane JFrame Caixa de diálogo para uso rápido Janelas para comportar demais componentes JInternalFrame Janelas internas às JFrames OO e Java Componentes Swing JList JTable Tabela de dados JTree Lista de seleção Á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 - Layout Managers - 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 um componente por regiã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: por IDEs SpringLayout GroupLayout ScrollPaneLayout ViewportLayout 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 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) Listener: Objeto Ouvinte (ouvinte de mouse) javax.swing.JComponent 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: Sempre que um listener é adicionado, um evento é associado a ele e uma ação é determinada: btOk.addActiontListener(actionListener); 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) MouseEvent (componentes afetados pelo mouse) WindowListener KeyEvent (componentes afetados pelo teclado) ItemListener WindowEvent (janelas) MouseListener e MouseMotionListener ItemEvent (checkboxes e similares) ActionListener KeyListener ***Event ***Listener OO e Java Components x Listeners OO e Java Referências Referências úteis para Swing: Criando Interfaces Gráficas Swing: 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/docs/books/tutorial/uiswing/index.html 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 OO e Java Aula: GUI - Swing Objetivos: Introdução ao Swing no Netbeans Principais componentes Swing Principais propriedades e eventos Criando interfaces com Swing