JAVA – APLICAÇÕES GRÁFICAS Propriedades Utilizadas: imageComposite FACULDADE DE TECNOLOGIA SENAC PELOTAS Nome do aluno: Diego Silva de Oliveira Identificação da Turma: 070801805 Data: 16/05/2010 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS imageComposite Introdução e Funcionamento A funcionalidade escolhida foi a imageComposite que é nada mais do que um simples slide de duas imagens tendo como efeito o fade ou esmaecimento. Por este motivo foi escolhido imitar os antigos comerciais da Nike. O import tem a funcionalidade de carregar módulos que não são carregados por default, possibilitando assim o uso de funcionalidades contida nos mesmos. import java.awt AWT (Abstract Window Toolkit) um pacote que contém todas as classes para a implementação de interfaces e manipular gráficos e imagens. import java.awt.AlphaComposite; Classe que implementa regras básicas criação de efeitos de transparência em gráficos e imagens. import java.awt.Graphics; Classe abstrata base para todos os contextos gráficos, permitindo assim que se desenhe em componentes. import java.awt.Graphics2D; Classe que estende a classe abstrata Graphics, proporcionando um controle refinado sobre geometria, coordenadas, cores, layout e texto. import java.awt.Image; Classe abstrata sendo uma super classe para todas as outras que concebem gráficos e imagens. import java.awt.event.ActionEvent; Interface para implementação de eventos. import java.awt.event.ActionListener; Interface implementada para auxiliar no recebimento de eventos, quando um evento ocorre o método actionPerformed é invocado. import java.awt.image.BufferedImage; Subclasse de Image com buffer de acesso aos dados da imagem. Swing um pacote que contém todas as classes para renderizar ou desenhar por conta própria todos os componentes, ao invés de delegar essa tarefa ao sistema operacional, como a maioria das outras API’s de interface gráfica fazem. Swing é compatível com AWT. import javax.swing.ImageIcon; Faculdade Senac Pelotas Página 2 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS Classe que implementa a interface Icon, criando ícones vindo de imagens, sendo essas criadas a partir de um URL ou nome de arquivo. import javax.swing.JFrame; Sublasse que estende a classe Frame, sendo esta a principal classe para criação de frames ( “janela”) do Swing. import javax.swing.JPanel; Classe que proporciona um “container” de uso geral para de componentes. import javax.swing.Timer; Classe responsável por realizar tarefas futuras, podendo ser essas tarefas executadas somente uma ou várias vezes. Essas tarefas podem ser executadas concorrentemente em paralelo. Em hardwares equipados com uma única CPU, cada linha de execução (Thread) é processada de forma aparentemente simultânea, pois a mudança entre as execuções é feita de forma tão rápida que para o usuário isso está acontecendo paralelamente. Em hardwares com múltiplos CPUs ou multi‐cores as linhas de execução (Threads) podem ser realizadas realmente de forma simultânea. public class ImageComposite extends JPanel implements ActionListener { Subclasse pública que estende a classe jPanel e implementa a interface ActionListener. Image frase = new ImageIcon(this.getClass().getResource("frase.jpg")).getImage(); Image logo = new ImageIcon(this.getClass().getResource("logo.jpg")).getImage(); Os objetos do tipo image são instanciados através do construtor ImageIcon, primeiramente é feito referência a classe runtime com a utilização do this. Logo após é utilizado o método getResource que retorna a URL do arquivo passado por parâmetro, por fim através do método getImage são passados os objetos do tipo image (a imagem propriamente dita) para as váriáveis. Timer timer = new Timer(150, this); É instanciado um objeto do tipo Timer que terá como primeiro parametro um intervalo de 0,8 segundos e segundo parâmetro passado é um objeto to tipo ouvinte. float alpha = 1f; É definida uma váriavel alpha do tipo float, que será usada para setar a transparência nas imagens que serão apresentadas. public ImageComposite() { timer.start(); } Construtor da classe ImageComposite, inicia o objeto timer através do método start. public void paint(Graphics g) { super.paint(g); Faculdade Senac Pelotas Página 3 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS O método paint é chamado para desenha ou redesenhar alguma parte do componente, neste caso é desenhado no objeto g do tipo Graphics passado como parametro. Super neste caso refere‐se a classe ImageComposite. Graphics2D g2d = (Graphics2D) g; É feito um casting transformando o objeto g do tipo Graphics para o tipo Graphics2D. BufferedImage buffImg = new BufferedImage(600, 400, BufferedImage.TYPE_INT_ARGB); É instanciado um objeto do tipo BufferedImage que armazenará a imagem. O construtor recebe 3 parâmetros, o primeiro a largura, o segundo a altura e o último o tipo de BufferedImage que será criada, neste caso foi escolhido o TYPE_INT_ARGB por permitir transparência. Graphics2D gbi = buffImg.createGraphics(); Instancia um objeto do tipo Graphics2D, que permite desenhar dentro da instancia buffImg. AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha); Instancia um objeto do tipo AlphaComposite, onde o primeiro parâmetro é a regra da composição e a segunda é a variável alpha setada. Neste caso como 1,0 sendo o mais opaco possível. gbi.drawImage(frase, 0, 0, null); Desenha uma imagem no objeto gbi. Onde o primeiro parâmetro é a imagem em si, o segundo e o terceiro parâmetro são as coordenadas em gbi e o último parâmetro é o imageObserver neste caso sendo passado como nulo. gbi.setComposite(ac); Define a composição para o gbi, que na hora de desenhar a primeira imagem irá considerar a composição de AC desenhando assim uma imagem sem opacidade. gbi.drawImage(logo, 0, 0, null); Desenha novamente outra imagem. g2d.drawImage(buffImg, 0, 0, null); Renderiza no contexto 2d o objeto buffImg que contém neste momento as imagens que serão utilizadas no fade. public void actionPerformed(ActionEvent e) { alpha ‐= 0.1; if (alpha <= 0) { alpha = 0; timer.stop(); Método chamado quando uma ação ocorre na classe, neste exemplo não é utilizado o parâmetro passado. Sempre que o método é chamado ele decrementa em 10 por cento a variável alpha até chegar a zero quando a imagem ficar totalmente transparente. Esse método é invocado pelo objeto timer então quando o valor de alpha chegar à zero é chamado o método stop para parar o timer evitando assim desperdício de recursos. Faculdade Senac Pelotas Página 4 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS repaint(); Irá atualizar nosso aplicativo, caso ele não seja chamado o programa ficará estático, pois não irá atualizar o objeto JFrame a cada chamada do método actionPerformed. public static void main(String[] args) { Necessário para a execução do código. JFrame frame = new JFrame(); Instancia um objeto JFrame onde será adicionado nossos elementos. frame.add(new ImageComposite()); Adiciona um componente passado por parâmetro no final do objeto frame. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Define o comportamento do botão de fechar da janela, pois por default a ação do botão é somente a de fechar a janela mas não parar o processo por ser independente da janela. frame.setSize(610, 410); Seta o tamanho do frame, onde o primeiro parâmetro é a largura em pixels e o segundo é a altura em pixels. frame.setVisible(true); Torna o frame visível, pois por default ele é invisível. Caso não seja passado um parâmetro true o aplicativo não será visível, mas executará o processo. Código da aplicação import java.awt.AlphaComposite; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; public class ImageComposite extends JPanel implements ActionListener { Image frase = new ImageIcon(this.getClass().getResource("frase.jpg")).getImage(); Image logo = new ImageIcon(this.getClass().getResource("logo.jpg")).getImage(); Timer timer = new Timer(150, this); Faculdade Senac Pelotas Página 5 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS float alpha = 1f; public ImageComposite() { timer.start(); } public void paint(Graphics g) { super.paint(g); System.out.println(super.getClass().getName()); Graphics2D g2d = (Graphics2D) g; BufferedImage buffImg = new BufferedImage(600, 400, BufferedImage.TYPE_INT_ARGB); Graphics2D gbi = buffImg.createGraphics(); AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha); gbi.drawImage(frase, 0, 0, null); gbi.setComposite(ac); gbi.drawImage(logo, 0, 0, null); g2d.drawImage(buffImg, 0, 0, null); } public void actionPerformed(ActionEvent e) { alpha ‐= 0.1; if (alpha <= 0) { alpha = 0; timer.stop(); } repaint(); } public static void main(String[] args) { JFrame frame = new JFrame(); frame.add(new ImageComposite()); frame.setTitle("Nike"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(610, 410); frame.setVisible(true); } } Propriedades utilizadas AWT (Abstract Window Toolkit) um pacote que contém todas as classes para a implementação de Faculdade Senac Pelotas Página 6 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS interfaces e manipular gráficos e imagens. import java.awt.AlphaComposite; Classe que implementa regras básicas criação de efeitos de transparência em gráficos e imagens. import java.awt.Graphics; Classe abstrata base para todos os contextos gráficos, permitindo assim que se desenhe em componentes. import java.awt.Graphics2D; Classe que estende a classe abstrata Graphics, proporcionando um controle refinado sobre geometria, coordenadas, cores, layout e texto. import java.awt.Image; Classe abstrata sendo uma super classe para todas as outras que concebem gráficos e imagens. import java.awt.event.ActionEvent; Interface para implementação de eventos. import java.awt.event.ActionListener; Interface implementada para auxiliar no recebimento de eventos, quando um evento ocorre o método actionPerformed é invocado. import java.awt.image.BufferedImage; Subclasse de Image com buffer de acesso aos dados da imagem. Swing um pacote que contém todas as classes para renderizar ou desenhar por conta própria todos os componentes, ao invés de delegar essa tarefa ao sistema operacional, como a maioria das outras API’s de interface gráfica fazem. Swing é compatível com AWT. import javax.swing.ImageIcon; Classe que implementa a interface Icon, criando ícones vindo de imagens, sendo essas criadas a partir de um URL ou nome de arquivo. import javax.swing.JFrame; Sublasse que estende a classe Frame, sendo esta a principal classe para criação de frames ( “janela”) do Swing. import javax.swing.JPanel; Classe que proporciona um “container” de uso geral para de componentes. import javax.swing.Timer; Classe responsável por realizar tarefas futuras, podendo ser essas tarefas executadas somente uma ou várias vezes. Essas tarefas podem ser executadas concorrentemente em paralelo. Faculdade Senac Pelotas Página 7 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS Em hardwares equipados com uma única CPU, cada linha de execução (Thread) é processada de forma aparentemente simultânea, pois a mudança entre as execuções é feita de forma tão rápida que para o usuário isso está acontecendo paralelamente. Em hardwares com múltiplos CPUs ou multi‐cores as linhas de execução (Threads) podem ser realizadas realmente de forma simultânea. Também foram utilizada duas imagens para o fade “frase.jpg” e “logo.jpg”. Figura 1 - frase.jpg Figura 2 - logo.jpg classes que foram utilizadas, as importações e o resultado obtido, de forma que sejam explicadas como você entendeu. Visualização da Ferramenta em Funcionamento Faculdade Senac Pelotas Página 8 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS Faculdade Senac Pelotas Página 9 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS Faculdade Senac Pelotas Página 10 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS Conclusão Com os testes e estudo para o desenvolvimento do trabalho, percebi como o Java é uma linguagem chata de trabalhar. Por outro lado foi válido para perceber quais recursos o Java dispõe, o grande número de módulos prontos e uma documentação bem organizada. Faculdade Senac Pelotas Página 11 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS Faculdade Senac Pelotas Página 12