420 likes | 548 Vues
Programação Visual em Java. Sumário. Introdução Contentores Componentes Layouts Eventos Exemplos. 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
E N D
Sumário • Introdução • Contentores • Componentes • Layouts • Eventos • Exemplos
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
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
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
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
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
contentores Aplicações
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
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
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 OlaWindows(" Ola Windows"); } } Ola windows
Programa OlaApplet Página HTML public class OlaApplet extends JApplet{ public void paint(Graphics g){ g.drawString("Ola Applet",10,100); } } <html> <body> <APPLET code="OlaApplet.class" width=350 height=200> </APPLET> </body> </html> Ola Applet
Applets: ciclo de vida • Não têm função main
Ola Applet Programa OlaApplet public class OlaApplet extends JApplet{ StringBuffer msg ; public void init(){ msg = new StringBuffer(); msg.append("Iniciando o Applet . . ."); } public void start(){ msg.append("Começando o Applet . . ."); } public void stop(){ msg.append("Parando o Applet . . ."); } public void destroy(){ msg.append("Destruindo o Applet . . ."); } public void paint(Graphics g){ g.drawString(msg.toString(),10,100); } }
Programa OlaApplet Página HTML public class OlaApplet extends JApplet{ public void init(){ msg = new StringBuffer(); msg.append("Iniciando o Applet . . ."); String parametro1 = getParameter("texto"); msg.append(" " + parametro1); } } <html> <body> <APPLET code="OlaApplet.class" width=350 height=200> <param name = "texto" value="isto é um parametro"> </APPLET> </body> </html> Passagem de parâmetros
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
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
Componentes objectos
http://java.sun.com/docs/books/tutorial/uiswing/components/components.htmlhttp://java.sun.com/docs/books/tutorial/uiswing/components/components.html
Componentes • Bottons • ComboBox • List • Slidder • TextField • Label • ProgressBar
Adicionar Componentes Container pane = this.getContentPane(); pane.add( new Button("ola"));
Contentores • Panel • ScrollPane • SplitPane • TabbedPane • ToolBar • InternalFrame
layouts Modos de visualização
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
FlowLayout • Coloca os componentes em fila da esquerda superior do contentor para a direita. • Respeita o tamanho preferido dos componentes • É o padrão do JPanel. 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"));
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 JPanel(); c .setLayout(new GridLayout(2,2)); c.add(new JButton(”um")); c.add(new JTextField(5)); c.add(new JButton("dois")); c.add(new JButton("três"));
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 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);
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 JPanel(); c .setLayout(new BoxLayout(c,BoxLayout.Y_AXIS)); c.add(new JButton(”um")); c.add(new JButton(“dois”)); c.add(new JButton(”três")); c.add(new JButton(”quatro"));
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)
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);
Layouts Compostos Container caixa = janela.getContentPane(); JPanel painel1 =new JPanel(); JPanel painel2 =new JPanel(); caixa.setLayout(new GridLayout(2,1)); painel1.setLayout(new GridLayout(2,2)); painel2.setLayout(new FlowLayout(FlowLayout.CENTER));
Eventos Janelas em acção
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
Eventos • Fontes, Eventos, Ouvintes
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);
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) • ...
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
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);
Exemplo public class NewJFrame extends javax.swing.JFrame { public NewJFrame() { botao = new javax.swing.JButton(); botao.setText("click"); botao.addActionListener( new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { botaoActionPerformed(evt); } }); private void botaoActionPerformed(ActionEvent evt) { JOptionPane.showMessageDialog(this,"Respondi " + evt.getSource()); } }