Programação Visual em Java 1
Sumário Introdução Contentores Componentes Layouts Eventos Exemplos 2
Introdução Interfaces gráficas são compostas por: Contentores Janelas, painéis Componentes botões, menus, caixas de texto layouts Disposição dos componentes nos contentores Eventos Rato, teclado, sistema operativo 3
Introdução (Graphical User Interface -Interface Gráfica do Utilizador) : AWT (Abstract Window Toolkit) Infra-estrutura mínima de interface gráfica É implementada sobre componentes nativos do sistema operativo. Limitado em recurso Diferentes plataformas possuem aparência diferente Bugs e incompatibilidades entre plataformas 4
Introdução JFC (Java Foundation Classes) Implementado inteiramente em Java. Oferece uma interface muito mais rica e componentes mais flexíveis. É preciso importar java.awt e java.swing para usar a JFC suporta: definição de botões, menus, etc desenho 2D (java.awt.geom) funcionalidades drag-and-drop (java.awt.dnd) API com acessibilidade a usuários (javax.accessibility 5
Histórico Java 1.0 Interface executa de forma medíocre em todas as plataformas Modelo de eventos arcaico Java 1.1 Melhora o modelo de eventos por delegação usando o design pattern Observer Java 1.2 JFC/Swing substitui totalmente os componentes AWT Mantém e estende a interface de eventos e layout 6
Componentes Todos os elementos de uma aplicação são componentes Principais métodos (chamados pelo sistema): void paint (java.awt.graphics g) void repaint() void update (java.awt.graphics g) Outros métodos importantes: getsize() e setsize () getlocation e setlocation getforeground e setforeground getfont e setfont setenable setvisible 7
contentores Aplicações 8
Hierarquia de classes: 9
Classes Contentoras Frame (AWT) e JFrame (Swing) Servem de base para qualquer aplicação gráfica possui uma barra de título e características para receber menus e outros componentes. Applet e JApplet Tipo de Panel (JPanel) que serve de base para aplicações que se executam dentro de browsers Pode ser inserido dentro de uma página HTML e ocupar o contexto gráfico do browser Dialog e JDialog Usada para definir janelas de diálogo para entrada de dados 10
Aplicações visuais Aplicações gráficas em Java: Applets: componentes iniciados via browser Aplicações stand alone iniciados pelo sistema operativo Capturam eventos do sistema Rato, teclado,... Desenham-se sobre um contexto gráfico fornecido pelo Sistema operativo Aplicação gráfica Browser Fornece os recursos gráficos Controla o seu ciclo de vida Inicio, fim,... Possuem restrições de segurança 11
Ola windows Programa OlaWindows public class OlaWindows extends javax.swing.jframe{ public OlaWindows(String nome) { super(nome); this.setsize(400,350); this.setvisible(true); public static void main(string[] args) ) { new new OlaWindows(" Ola Ola Windows"); 12
Ola Applet Programa OlaApplet public public class class OlaApplet OlaApplet extends extends JApplet{ JApplet{ public public void void paint(graphics paint(graphics g){ g){ g.drawstring("ola g.drawstring("ola Applet",10,100); Applet",10,100); Página Página HTML HTML <html <html> html> <body <body> body> <APPLET <APPLET code="olaapplet.class code="olaapplet.class" OlaApplet.class" " width=350 width=350 height=200> height=200> </APPLET> </APPLET> </body </body> body> </html </html> html> 13
Applets: ciclo de vida Não têm função main 14
Ola Applet Programa OlaApplet public public class class OlaApplet OlaApplet extends extends JApplet{ JApplet{ StringBuffer StringBuffer msg msg ; ; public public void void init(){ init(){ msg msg = = new new StringBuffer(); StringBuffer(); msg.append("iniciando msg.append("iniciando o o Applet Applet.....");."); public public void void start(){ start(){ msg.append("come msg.append("começando "Começando o o Applet Applet.....");."); public public void void stop(){ stop(){ msg.append("parando msg.append("parando o o Applet Applet.....");."); public public void void destroy(){ destroy(){ msg.append("destruindo msg.append("destruindo o o Applet Applet.....");."); public public void void paint(graphics paint(graphics g){ g){ g.drawstring(msg.tostring(),10,100); g.drawstring(msg.tostring(),10,100); 15
Passagem de parâmetros Página Página HTML HTML <html <html> html> <body <body> body> <APPLET <APPLET code="olaapplet.class code="olaapplet.class" OlaApplet.class" " width=350 width=350 height=200> height=200> <param name name = "texto" value="isto é um um parametro"> </APPLET> </APPLET> </body </body> body> </html </html> html> Programa OlaApplet public public class class OlaApplet OlaApplet extends extends JApplet{ JApplet{ public public void void init(){ init(){ msg msg = = new new StringBuffer(); StringBuffer(); msg.append("iniciando msg.append("iniciando o o Applet Applet.....");."); String parametro1 = getparameter("texto"); msg.append(" msg.append(" " " " + + parametro1); parametro1); 16
Restrições dos applets (sandbox) Não pode carregar bibliotecas externas Não pode ler ou escrever arquivos na máquina cliente Não pode fazer ligações de rede a não ser para a máquina de onde veio Não pode iniciar a execução de nenhum programa na máquina do cliente Não tem acesso à maior parte das propriedades do sistema Janelas abertas têm aviso de segurança Várias restrições podem ser flexibilizadas se o applet for assinado 17
Vantagens / desvantagens dos applets Desvantagens Restrições de segurança Tempo de download Incompatibilidade com browsers Vantagens Facilidade de realizar comunicação em rede Possibilidade de abrir janelas externas Capacidade de estender o browser em recursos de segurança, protocolos de rede, capacidade gráfica Aplicação sempre atualizada Capacidade de interagir com a página via JavaScript 18
Componentes objectos 19
http://java.sun.com/docs/books/tutorial/uiswing/c omponents/components.html 20
Componentes Bottons ComboBox List Slidder TextField Label ProgressBar 21
Adicionar Componentes Container pane = this.getcontentpane(); pane.add( ( new Button("ola")); ")); 22
Contentores Panel ScrollPane SplitPane TabbedPane ToolBar InternalFrame 23
layouts Modos de visualização 24
Layouts Filosofia da linguagem JAVA programas portáveis interface adaptável. Localização dos Componentes não é indicada por um par ordenado (x,y) C++ builder Gestor de Apresentação LayoutManager. Adapatação automática dos componentes Pouco flexiveis para o programador Vários layoutmanager Possibilidade de escrever novos layoutmanager 25
FlowLayout Coloca os componentes em fila da esquerda superior do contentor para a direita. Respeita o tamanho preferido dos componentes JPanel c =new JPanel(); c.add(new JButton("1")); c.add(new JTextField(9)); c.add(new JButton("dois")); c.add(new JButton("três")); É o padrão do JPanel. JPanel c =new JPanel(); 26
GridLayout Divide o contentor em linhas e colunas. Permite definir uma matriz de células onde são colocados os componentes. Coloca os componentes da esquerda para a direita, de cima para baixo. Todos os componentes terão o mesmo tamanho. Não respeita o tamanho original dos componentes JPanel c =new =new JPanel(); c.setlayout(new. GridLayout(2,2)); c.add(new JButton( um")); um")); c.add(new JTextField(5)); c.add(new JButton("dois")); c.add(new JButton("três")); 27
BorderLayout Divide um contentor em cinco regiões: BorderLayout.CENTER BorderLayout.NORTH BorderLayout.EAST BorderLayout.SOUTH BorderLayout.WEST Quando se adiciona um componente, é necessário especificar em qual das áreas ele deve ser adicionado. Ex.: add(butok, BorderLayout.WEST); O Componente ocupa todo o espaço! Cada região contém apenas um componente JPanel c =new =new JPanel(new BorderLayout()); JButton b1=new JButton("1"); c.add(b1,borderlayout.north); JButton b2=new JButton("2"); c.add(b2,borderlayout.east); JButton b3=new JButton("3"); c.add(b3,borderlayout.south); JButton b4=new JButton("4"); c.add(b4,borderlayout.west); JButton b5=new JButton("5"); c.add(b5,borderlayout.center); 28
BoxLayout Respeita o tamanho preferido dos componentes Coloca os componentes numa linha ou coluna. BoxLayout.X_AXIS para componentes em linha BoxLayout.Y_AXIS para componentes em coluna JPanel c =new =new JPanel(); c.setlayout(new. BoxLayout(c,BoxLayout.Y_AXIS)); c.add(new JButton( um")); um")); c.add(new JButton( dois )); c.add(new JButton( três")); três")); c.add(new JButton( quatro")); 29
CardLayout Comporta-se como uma pilha, Só o objecto que estiver no topo é visível. Métodos: first(container) last(container) next(container) previous(container) show(container, String) 30
NULL Layout Layout null Utilizado para desligar o gestor de layout pane.setlayout (null); A partir desta instrução é necessário a definição da posição e o do tamanho de cada componente componente.setbounds (x, y, larg, alt); 31
Layouts Compostos Container caixa caixa = janela.getcontentpane(); JPanel painel1 =new =new JPanel(); JPanel painel2 =new =new JPanel(); caixa.setlayout(new GridLayout(2,1)); painel1.setlayout(new GridLayout(2,2)); painel2.setlayout(new FlowLayout(FlowLayout.CENTER)); 32
Eventos Janelas em acção 33
Eventos Realizam o trabalho útil numa aplicação Desencadeiam a execução de métodos Dependem do evento Dependem do componente São geridos por objectos de eventos java.util.eventobject Listeners 34
Eventos Fontes, Eventos, Ouvintes 35
java.util.eventobject Todo o evento tem um objeto que é sua fonte Object fonte = evento.getsource(); Métodos de ouvintes (listeners) que desejam tratar eventos, recebem eventos como argumento public void eventoocorreu(eventobject evento) { Object fonte = evento.getsource();... Ouvintes precisam ser registrados nas fontes Quando ocorre um evento, um método de todos os ouvintes registrados é chamado e evento é passado como argumento button.addactionlistener(ouvinte1); 36
Tipos de Eventos java.awt.event ActionEvent (fonte: componentes de ação) MouseEvent (fonte: componentes afectados pelo rato) ItemEvent (fonte: checkboxes e similares) AdjustmentEvent (fonte: scrollbars) TextEvent (fonte: componentes de texto) WindowEvent (fonte: janelas) FocusEvent (fonte: componentes em geral) KeyEvent (fonte: componentes afectados pelo teclado)... 37
Interface de Eventos 38
Adapters Alguns listeners possuem uma classe Adapter que implementa todos os métodos, sem instruções Implementação vazia: { Só existe para listeners que têm mais de um método São úteis quando um Ouvinte precisa implementar apenas um dos vários métodos de um Listener Pode sobrepor a implementação desejada do método do Adapter e não precisa se preocupar com os outros Não são úteis em ouvintes que já estendem outras classes ou quando implementam diferentes listeners Eliminação de métodos O nome do adapter é semelhante ao do Listener MouseListener: MouseAdapter WindowListener: WindowAdapter 39
Eventos Exemplo: JButton button = new JButton("Fonte"); ActionListener ouvinte1 = new OuvinteDoBotao(); MouseListener ouvinte2 = new OuvinteDeCliques(); button.addactionlistener(ouvinte1); button.addmouselistener(ouvinte2); O mesmo objeto que é fonte às vezes também é listener, se implementar as interfaces É necessário registrar a fonte ao listener o objeto não adivinha que ele mesmo tem que capturar seus eventos this.addwindowlistener(this); 40
Exemplo public class class NewJFrame extends javax.swing.jframe { public NewJFrame() ) { botao botao = new new javax.swing.jbutton(); botao.settext("click"); "); botao.addactionlistener( new new java.awt.event.actionlistener() ) { public void void actionperformed(java.awt.event.actionevent evt) evt) ) { botaoactionperformed(evt); ); ); private void void botaoactionperformed(actionevent evt) evt) ) { JOptionPane.showMessageDialog(this,"Respondi " + evt.getsource()); 41
Fim 42