JAVA – APLICAÇÕES GRÁFICAS Propriedades Utilizadas

Propaganda
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
Download