1 / 59

Introdução à Interface Gráfica

Introdução à Interface Gráfica. Carlos Bazilio Isabel Rosseti Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense. Motivação. como fazer programas com interface gráfica em Java? algumas possibilidades:

Download Presentation

Introdução à Interface Gráfica

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Introdução à Interface Gráfica Carlos Bazilio Isabel Rosseti Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense

  2. Motivação • como fazer programas com interface gráfica em Java? • algumas possibilidades: • AWT – Abstract Window Toolkit (java.awt.*): API básica para o desenvolvimento de GUIs e applets em Java • Swing (javax.swing.*): Extensão da API básica com inclusão de componentes visuais de mais alto nível (por ex., tree view, list box e tabbed panes) • SWT - Standard Widget Toolkit (org.eclipse.swt.*): Biblioteca desenvolvida pela IBM como parte da plataforma Eclipse; entretanto, seu uso não está amarrado ao uso da IDE • Java 2D (java.awt e java.awt.image): Adição de classes ao pacote básico para desenho avançado de imagens em 2D

  3. Swing • Algumas características importantes: • Look and Feel plugável: configuração da aparência de uma aplicação • Transferência de Dados: copy-paste, drag and drop • Internacionalização e localização: permite a configuração separada de aspectos dependentes de uma região: língua, moeda, .. • Acessibilidade: permite projetar GUIs capazes de serem utilizadas por portadores de deficiências • Integração com o desktop: possibilita a integração da aplicação com o desktop hospedeiro, permitindo a execução de aplicações default com preenchimento prévio de dados, etc.

  4. Swing • À seguir, apresentamos figuras com os componentes mais comuns desta biblioteca • Estas figuras foram tiradas do tutorial da Sun (http://java.sun.com/docs/books/tutorial/ui/features/components.html)

  5. Controles Básicos

  6. Controles Interativos com Informação mais Formatada

  7. Controles Interativos com Informação mais Formatada

  8. Controles com Informação não-Editável

  9. Contêineres de mais Alto-Nível

  10. Contêineres de Propósito Geral

  11. Contêineres com Propósito Especial

  12. Roteiro de criação de interfaces gráficas • instanciar os componentes de interface • janelas, botões, campos de textos, etc • adicionar os componentes em containers • como os componentes podem ser agrupados • qual é o layout de diagramação

  13. Roteiro de criação de interfaces gráficas • estabelecer o tratamento de eventos de interface • o que deve ocorrer quando o usuário clicar um botão? • como alterar o conteúdo de um componente quando um outro sofre alguma alteração?

  14. Exemplo

  15. publicclass JanelaSimples { public JanelaSimples() { final JButton botaoLimpa = new JButton("Limpa"); //botão final JTextField campoTexto = new JTextField(10); //texto campoTexto.setText("Java"); final JFrame janela = new JFrame ("Janela Simples"); //janela janela.setSize(300,100); JPanel painel = new JPanel(); // adiciona componentes painel.add (botaoLimpa); painel.add (campoTexto); janela.getContentPane().add(painel); //Quando o usuário clicar no botao, limpa o campo de texto botaoLimpa.addActionListener (new ActionListener() { publicvoid actionPerformed (ActionEvent e) { campoTexto.setText(""); } }); janela.setVisible(true); } publicstaticvoid main(String[] args) { new JanelaSimples(); } }

  16. JFrame janela contém Container content pane contém JPanel painel contém contém JButton botaoLimpa JTextField campoTexto Exemplo

  17. Componente contém é um Container Hierarquia de composição • Componente • qualquer elemento de interface • Container • é um Componente • agregaComponentes

  18. Elementos de interface Swing • janela: • é um top-level container • é onde os outros componentes são desenhados • painel: • é um container intermediário • serve para facilitar o agrupamento de outros componentes

  19. Elementos de interface Swing • componentes atômicos • elementos de interface que não agrupam outros componentes • botões • campos de texto • … • API do Swing • À seguir serão apresentados exemplos de uso de alguns destes recursos

  20. javax.swing.JLabel • Modela um texto e/ou imagem não editável, isto é, sem interação com o usuário

  21. Exemplo de JLabel /* Cria um label com texto */ JLabel label1 = new JLabel("Label1: Apenas Texto"); /* Cria um label com texto e imagem */ JLabel label2 = new JLabel("Label2: Imagem e texto", new ImageIcon("javalogo.gif"), JLabel.CENTER); label2.setVerticalTextPosition(JLabel.BOTTOM); label2.setHorizontalTextPosition(JLabel.CENTER);

  22. javax.swing.JButton • Modela um push-button

  23. Exemplo de JButton /* Cria um botao com texto */ JButton botao1 = new JButton ("Botão Desabilitado"); botao1.setEnabled(false); botao1.setToolTipText("Exemplo de um botão de texto"); botao1.setMnemonic(KeyEvent.VK_D); // Alt-D /* Cria um botao com texto e imagem */ JButton botao2 = new JButton("Botão Habilitado", new ImageIcon("javalogo.gif")); botao2.setToolTipText("Botão de texto e imagem"); botao2.setMnemonic(KeyEvent.VK_H); // Alt-H botao2.setPressedIcon(new ImageIcon("javalogo2.gif"));

  24. Alguns containers } • Janela • Diálogo • Applet • Painel • Scroll Pane Top Level Containers } Containers Intermediários

  25. javax.swing.JFrame • representa uma janela do sistema nativo • possui título e borda • pode possuir menu

  26. Exemplo de JFrame JFrame j = new JFrame("Exemplo de Janela"); j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel msg = new JLabel("Olá Mundo!"); j.getContentPane().add(msg); j.setLocationRelativeTo(null); // centraliza j.setIconImage(new ImageIcon("javalogo2.gif").getImage()); JMenuBar menuBar = new JMenuBar(); menuBar.add(new JMenu("Menu")); j.setJMenuBar(menuBar); j.pack(); j.setVisible(true); // show(); DEPRECATED!

  27. javax.swing.JPanel • modela um container sem decoração • representa um grupo de elementos • normalmente usado para estruturar a interface • associado a um diagramador

  28. Diagramadores • arrumam um grupo de elementos • estão associados aos containers • diferentes estilos de arrumação • como fluxo de texto • orientada pelas bordas • em forma de grade • e outros ... • http://java.sun.com/docs/books/tutorial/uiswing/layout/visual.html

  29. java.awt.FlowLayout • coloca os componentes lado a lado, uma linha após a outra • alinhamento: centralizado (default), à esquerda ou à direita • default para o JPanel

  30. Exemplo de FlowLayout Container contentPane = janela.getContentPane(); contentPane.setLayout(new FlowLayout()); contentPane.add(new JButton("Button 1")); contentPane.add(new JButton("2")); contentPane.add(new JButton("Button 3")); contentPane.add(new JButton("Long-Named Button 4")); contentPane.add(new JButton("Button 5"));

  31. java.awt.BorderLayout • Divide o containerem 5 áreas:norte, sul, leste, oeste e centro • Default para content pane do JFrame

  32. Exemplo de BorderLayout Container contentPane = janela.getContentPane(); contentPane.add(new JButton("Button 1 (NORTH)"), BorderLayout.NORTH); contentPane.add(new JButton("2 (CENTER)"), BorderLayout.CENTER); contentPane.add(new JButton("Button 3 (WEST)"), BorderLayout.WEST); contentPane.add(new JButton("Long-Named Button 4 (SOUTH)"), BorderLayout.SOUTH); contentPane.add(new JButton("Button 5 (EAST)"), BorderLayout.EAST);

  33. java.awt.GridLayout • Células do mesmo tamanho especificadas pelo número de linhas e colunas

  34. Exemplo de GridLayout Container contentPane = janela.getContentPane(); contentPane.setLayout(new GridLayout(3,2)); contentPane.add(new JButton("Button 1")); contentPane.add(new JButton("2")); contentPane.add(new JButton("Button 3")); contentPane.add(new JButton("Long-Named Button 4")); contentPane.add(new JButton("Button 5"));

  35. Exercício: enunciado Usando apenas as classes JFrame, JPanel, JButton, JLabel, BorderLayout, GridLayout e FlowLayout, escreva um programa que, ao ser executado, exiba a tela ao lado. Não se preocupe com a funcionalidade do programa. Ou seja, o programa não deve responder aos cliques do usuário.

  36. Eventos • o que deve ocorrer quando o usuário clicar um botão? • como alterar o conteúdo de um componente quando um outro sofre alguma alteração? • solução: estabelecer o tratamento de eventos de interface

  37. Analogia • Antes de irmos aos detalhes, imaginem o funcionamento de uma lista de discussão: • O indivíduo deseja receber postagens de uma lista • Este indivíduo entra no site da lista e cadastra seu e-mail • À partir daí, toda a postagem na lista será encaminhada para os e-mails cadastrados

  38. Analogia • Na situação citada, a lista de discussão funciona como um recurso gráfico, como um botão • O endereço de e-mail indica quem são os assinantes, quem está “escutando” (listener) uma dada lista • O evento de envio de uma mensagem de um usuário representa acionar o recurso gráfico, como pressionar o botão • O sistema responsável por manter a lista encaminha a mensagem a todos os assinantes

  39. Orientação por eventos • modelo de programação que tornou-se bastante difundido com o uso de interfaces gráficas • o programa deixa de ter o controle do fluxo de execução, passando a um sistema encarregado de gerenciar a interface • o programa passa a ser chamado pelo sistema quando algum evento é gerado na interface

  40. Mecanismos de callback • para que o programa possa ser chamado pelo sistema, ele deve registrar uma função para cada evento de interface que ele desejar tratar • essas funções são chamadas de callbacks por serem ‘chamadas de volta’ pelo sistema

  41. Callbacks em OO • modelo é ortogonal ao modelo de orientação por objetos • é possível projetar um sistema OO que use o modelo de orientação por eventos para tratar eventos de interface, comunicações, etc • problema: não possui o conceito de função. Como resolver então?

  42. Callbacks em OO • solução: usar um objeto que faça o papel de callback • ou seja, onde registraríamos uma função, passamos a registrar um objeto • quando o sistema precisar executar a callback, ele deverá executar um determinado método do objeto • esse método, então, fará o tratamento do evento

  43. Listeners e eventos • os listeners (Java) fazem o papel das callbacks • listeners são definidos por interfaces e podem estar aptos a tratar mais de um tipo de evento • quando um listener tem um de seus métodos chamados, ele recebe um parâmetro (objeto) que descreve o evento ocorrido • existem classes para modelar diferentes grupos de eventos

  44. Exercício • Para o navegador apresentado anteriormente, modifique-o de forma que, ao passarmos o mouse sobre o label url, apareça uma caixa de diálogo solicitando um novo endereço www.

  45. Listeners • definem interfaces que representam um grupo de callbacks • são registrados junto aos componentes • java.awt.event.MouseListener public abstract void mouseClicked(MouseEvent e) public abstract void mousePressed(MouseEvent e) public abstract void mouseReleased(MouseEvent e) public abstract void mouseEntered(MouseEvent e) public abstract void mouseExited(MouseEvent e)

  46. Registro de listeners • mecanismo de callbacks • implementação da interface • uso de classes aninhadas button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("Botão pressionado"); } });

  47. Eventos • trazem informações sobre o evento ocorrido • são passados aos listeners (callbacks) • java.awt.event.MouseEvent public int getX() public int getY() public int getClickCount()

  48. WindowEvent • modela os eventos que podem ocorrer em uma janela • essa classe declara constantes que identificam os diversos eventos public static final int WINDOW_OPENED public static final int WINDOW_CLOSING public static final int WINDOW_CLOSED public static final int WINDOW_ICONIFIED public static final int WINDOW_DEICONIFIED public static final int WINDOW_ACTIVATED public static final int WINDOW_DEACTIVATED public Window getWindow()

  49. WindowListener • modela a callback de um evento do tipo WindowEvent • essa interface declara um método para cada evento do grupo public abstract void windowOpened(WindowEvent e) public abstract void windowClosing(WindowEvent e) public abstract void windowClosed(WindowEvent e) public abstract void windowIconified(WindowEvent e) public abstract void windowDeiconified(WindowEvent e) public abstract void windowActivated(WindowEvent e) public abstract void windowDeactivated(WindowEvent e)

  50. Implementando um listener • para criarmos um listener para um evento de janela, por exemplo, devemos criar uma classe que implemente a interface WindowListener • nessa classe, codificaremos o método correspondente ao evento que desejamos tratar

More Related