Introdução à Programação Gráfica em Java U N I V E R S I D A D E T E C N O L Ó G I C A F E D E R A L D O P A R A N Á D E P A R T A M E N T O A C A D Ê M I C O D E E L E T R Ô N I C A P R O F. V I T O R Y A N O
Pacotes Java Dois grandes pacotes Java trazem outros pacotes internos e classes prontas com funcionalidades diversas: pacote java classes padrões da linguagem para o funcionamento geral do algoritmo; pacote javax pacotes de extensão que fornecem classes e objetos que implementam maiores funcionalidades a um programa Java.
Pacotes AWT e Swing O AWT (Abstract Windowing Toolkit), pertencente ao pacote java, é o primeiro pacote a fornecer classes específicas para programação gráfica de interface com o usuário. O Swing é um pacote baseado no AWT, implementado a partir da versão 1.2 da linguagem Java que apresenta diversas vantagens que serão mostradas posteriormente. Pertence ao pacote javax.
AWT
AWT
AWT
Usando o pacote AWT Para utilizar as classes de um pacote, é preciso importá-las. Exemplo: import java.awt.frame; import java.awt.button; Para importar todas as classes de um pacote, pode-se usar um asterisco: import java.awt.*;
Criando uma janela com AWT Uma janela é criada através da classe Frame. Esta classe possui os diversos métodos necessários para sua personalização e adição de componentes.
Exemplo: criando uma janela com botão import java.awt.*; public class ProgramaAWT { public static void main(string[] args) { Frame janela = new Frame("Janela AWT"); Button btnok = new Button("OK"); janela.add(btnok); janela.setsize(300, 200); janela.setresizable(false); janela.setvisible(true); } }
Criando uma janela com AWT O problema desta forma de construção de janelas é que dificulta o controle de eventos. No exemplo mostrado, a janela não pode ser fechada e o botão não possui função nenhuma.
Criando uma janela com AWT O modo mais usado para a criação de uma janela gráfica é a criação de uma subclasse da classe Frame, o que permite implementar novos métodos.
Exemplo: criando uma janela com botão 2 import java.awt.*; public class ProgramaAWT extends Frame { private Button btnok = new Button("OK"); public static void main(string[] args) { } ProgramaAWT janelaprincipal = new ProgramaAWT(); } // construtor da classe ProgramaAWT ProgramaAWT() { super("janela AWT"); add(btnok); setsize(300,200); setresizable(false); setvisible(true); }
Controle de eventos Para fechar a janela, utiliza-se a interface WindowListener, pertencente ao pacote java.awt.event. Uma interface é uma classe que possui apenas declarações de métodos, ou seja, não possui métodos implementados e nenhum atributo; Uma interface não pode ser instanciada diretamente, ela serve para definir um padrão de métodos a serem implementados em uma classe.
Interface WindowListener package java.awt.event; import java.util.eventlistener; public interface WindowListener extends EventListener { public void windowopened(windowevent we); public void windowclosing(windowevent we); public void windowclosed(windowevent we); public void windowiconified(windowevent we); public void windowdeiconified(windowevent we); public void windowactivated(windowevent we); public void windowdeactivated(windowevent we); }
Controle de eventos Para fechar a janela, importar o pacote: import java.awt.event.*; Implementar a interface WindowListener: public class ProgramaAWT extends Frame implements WindowListener { Adicionar o controle de eventos à janela (no método construtor): addwindowlistener(this);
Controle de eventos Implementar os métodos: //executado após a janela ser aberta public void windowopened(windowevent we) { } //executado quando o usuário requisita o fechamento da janela public void windowclosing(windowevent we) { System.exit(0); } //executado após o fechamento da janela public void windowclosed(windowevent we) { } //executado quando a janela é minimizada public void windowiconified(windowevent we) { } //executado quando a janela retorna de minimizada para normal public void windowdeiconified(windowevent we) { } //executado quando a janela recebe o foco no sistema operacional public void windowactivated(windowevent we) { } //executado quando a janela perde o foco no sistema operacional public void windowdeactivated(windowevent we) { }
Controle de eventos Para atribuir uma ação ao clicar no botão, pode-se implementar a função handleevent da classe Frame ou implementar a interface ActionListener, semelhante à WindowListener.
Container Nas versões mais recentes do Java, o botão adicionado à janela no exemplo preenche todo o espaço disponível em versões anteriores não era possível adicionar componentes diretamente a um Frame; Para poder adicionar mais componentes, deve-se utilizar um Container; O Container mais simples é o painel (classe Panel).
Exemplo: adicionando dois botões import java.awt.*; public class ProgramaAWT extends Frame { private Panel pan1 = new Panel(); private Button btnok = new Button("OK"); private Button btncancel = new Button( Cancelar"); public static void main(string[] args) { ProgramaAWT janelaprincipal = new ProgramaAWT(); } } // construtor da classe ProgramaAWT ProgramaAWT() { super("janela AWT"); pan1.add(btnok); pan1.add(btncancel); add(pan1); setsize(300,200); setresizable(false); setvisible(true); }
AWT Existem diversas outras propriedades dos componentes AWT, eventos, caixas de diálogo, menus, layout, etc. Todas as classes e métodos do pacote estão documentados no site da Oracle: http://download.oracle.com/javase/7/docs/api/java /awt/package-summary.html
AWT x Swing A classe AWT faz chamadas diretamente para o sistema operacional para exibir os componentes da interface gráfica, isto é, usa funções nativas do mesmo. Isso torna seu código mais leve e mais rápido, além de manter a interface com a mesma aparência do sistema operacional onde está sendo executada; Porém, isso torna o aplicativo dependente da plataforma, e o conjunto de componentes oferecido se torna limitado ao existente em qualquer sistema operacional
AWT x Swing A partir da versão 1.2 da linguagem Java, o pacote de classes Swing passou a ser incorporado. Este pacote implementa todos os componentes de interface, tornando-o independente do sistema operacional ou ambiente de janelas. Além disso, permite a criação de um conjunto ilimitado de componentes de interface; A desvantagem do Swing em relação ao AWT é o desempenho, pois neste caso todo o controle da interface é de responsabilidade da JVM e não do sistema operacional
Swing As classe do pacote Swing são 100% compatíveis com as do AWT, ou seja, todos os métodos das classes AWT são implementadas, além de outras; Basicamente, a diferença na nomenclatura das classes está na inclusão de uma letra J no início do nome: JFrame, JPanel, JButton, JLabel, JTextField, JCheckBox, porém há exceções, como JRadioButton e JComboBox. Além dos componentes já existentes no AWT, o Swing implementa outros mais avançados, como JTabbedPane, JToolBar, JInternalFrame, JColorChooser, JFormattedTextField, JSpeener, JPasswordField, JMenuBar, entre outros.