JAVA APLICAÇÕES GRÁFICAS Propriedades Utilizadas: Font size Animation FACULDADE DE TECNOLOGIA SENAC PELOTAS Nome do aluno: Guilherme Faria Quental Identificação da Turma: Análise e Desenvolvimento de Sistemas - 3º Semestre / Manhã Data: 11/05/2010
1 Font size Animation 1.1 Introdução e Funcionamento A propriedade escolhida foi uma animação onde o tamanho da fonte de escrita vai sendo aumentado de acordo com o passar do tempo. Nele podemos observar que temos um temporizador, no qual é definido um tempo de duração, que controla uma animação, onde uma fonte vai aumentando de tamanho de acordo com o número inteiro alocado na variável x. Para essa atualização foi usado um "receptor de ações", sendo que neste caso a "ação" é cada passada de tempo no timer, que aumenta a variável x em 1 e atualiza a tela. 1.2 Código da aplicação import java.awt.font; import java.awt.fontmetrics; import java.awt.graphics; import java.awt.graphics2d; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.timer; public class FontSizeAnimation extends JPanel implements ActionListener { Timer timer; int x = 1; float alpha = 1; public FontSizeAnimation() { timer = new Timer(8, this); timer.setinitialdelay(190); timer.start(); public void paint(graphics g) { super.paintcomponent(g); Graphics2D g2d = (Graphics2D) g; Font font = new Font("Dialog", Font.PLAIN, x); g2d.setfont(font); FontMetrics fm = g2d.getfontmetrics(); String s = "Java"; Faculdade Senac Pelotas Página 2
int w = (int) getsize().getwidth(); int h = (int) getsize().getheight(); int stringwidth = fm.stringwidth(s); g2d.drawstring(s, (w - stringwidth) / 2, h / 2); public static void main(string[] args) { JFrame frame = new JFrame("FontSizeAnimation"); frame.add(new FontSizeAnimation()); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setsize(400, 300); frame.setlocationrelativeto(null); frame.setvisible(true); public void actionperformed(actionevent e) { x += 1; alpha -= 0.0001; repaint(); 1.3 Propriedades utilizadas Nesse programa podemos observar que são importadas diversas classes, sendo elas: Font, FontMetrics, Graphics e Graphics2D, as quais fazem parte do pacote gráfico e tem as respectivas funcionalidades: definir e configurar a fonte que será utilizada; obter o tamanho específico da fonte que está sendo apresentada na tela; classe para manipulação e apresentação gráfica do java; atualização da classe Graphics para o padrão orientado à objetos. Depois temos, ainda no pacote awt, as classes ActionListener e ActionPerformed. Nelas, temos uma breve visualização de como a orientação à eventos funciona no Java, pois as duas são basicamente isso, onde o ActionListener é uma interface que adiciona ao programa que a implementa um tipo de espera, que aguarda pelo ActionPerformed, que geralmente contêm blocos de código. Podemos fazer uma alusão dessas duas classes ao par try/catch, onde a classe implementando o ActionListener seria um try e os ActionPerformed seriam os Exceptions. Por último temos os imports do Swing, que é uma outra classe gráfica do Java, os quais são: JFrame, JLabel e Timer. Essas são as classes principais de apresentação desse programa, onde o JFrame gera uma janela no Desktop, o JLabel cria no JFrame um espaço onde alocamos nossa parte gráfica e a classe Timer serve para manipulação de tempo, tal como definir uma duração para uma animação e outras ações, como também tempo de delay. Classe FontSizeAnimation: Nela temos a classe FontSizeAnimation que extende a classe JLabel do pacote gráfico swing, pois mais tarde, a apresentação gráfica desse programa será apresentando dentro de um JFrame, então, Faculdade Senac Pelotas Página 3
para que possamos fazer isso diretamente com a classe, basta estender a classe pai para ficar com todos as suas instâncias e métodos. Também podemos observar que ela implementa a interface ActionListener, conforme foi comentando mais acima. No quesito variáveis de instância, observamos a criação de 3: o início da alocação de uma classe Timer, uma variável inteira x, que servirá para o controle de tamanho da String e a variável alpha, a qual, embora não tenha sido utilizada, provavelmente serviria para trabalhar com a transparência da palavra. Construtor: Nessa classe temos um construtor padrão que não recebe nenhum argumento, nele, temos o fim da alocação da classe Timer, onde é definido o tempo dela e é apontado o this. Como o this faz referência à classe principal e não temos nenhuma subdivisão dentro do mesmo, pode ser interpretado que esse this está referenciando à classe inteira, ou seja, o método main dela. Há também o uso de mais dois métodos do Timer, um para definir um tempo de espera inicial (delay) e outro para começar a ação de fato. Métodos Paint: O método paint pode ser entendido como o main das aplicações gráficas, podemos observar que ele contêm toda a parte que irá desenhar algo na tela, sejam retângulos, elipses, quadrados, triângulos, textos, etc. Como argumento no início desse método, foi definido uma variável de inatância à objeto, g, a qual está ligada a Classe Graphics, sendo essa a principal classe de apresentação gráfica do Java até hoje. A classe Graphics contém todos os tipos básicos de formas geométricas, que, se usadas em conjunto, podem formar diversos tipos de desenhos, dependendo somente da criatividade e da habilidade do programador. Como mais tarde usaremos essa parte gráfica dentro de um JFrame, temos de usar alguns atributos utilizados no JLabel, por isso chamamos o super, onde usamos um método da classe pai, para que essa apresentação possa funcionar perfeitamente dentro de uma JFrame. Continuando, como estamos em uma nova era de programação, onde obviamente o padrão orientado à objetos é de fato o mais utilizado, teve de ser criada a classe Graphics2D, que atualiza a antiga classe Graphics para esse novo tipo de paradigma, conforme já foi comentado mais acima. Em vista disso, criamos uma variável do tipo Graphics2D e para ela atribuimos a variável do tipo Graphics, a tranformando para Graphics2D. Feito isso, torna-se possível usar todos os benefícios da orientação à objetos. Temos a criação de uma variável font do tipo Font, onde temos 3 argumentos: 1º: Define o tipo da fonte, por exemplo, Dialog, Sans-Serif, etc. 2º: Define a orientação da fonte: PLAIN, BOLD, ITALIC. 3º: Define o tamanho da fonte. Após escolhida a fonte, usamos um método do Graphics2D, para utilizar a fonte configurada previamente, o setfont. Também é observado o uso da classe FontMetrics, a qual torna possível a obtenção do valor avançado de tamanho do texto na tela, o qual está sendo armazenado na variável fm. Tendo sido feitas todas as configurações necessárias, é definida a String que será utilizada e é feito um cálculo de sua altura e tamanho, com o auxílio do FontMetrics, para definir uma posição posterior para ela na tela. Enfim, é desenhado na tela o texto desejado, com o método drawstring. Faculdade Senac Pelotas Página 4
Main: No método main temos o que será executado primeiramente no programa, onde são usadas as classes do swing para gerar uma janela que se adaptará ao padrão temático do desktop que o sistema operacional está utlizando no momento. Nele podemos observar que definimos um título e tamanho para a janela. Após isso há a inserção de toda a parte gráfica feita previamente e também as temos configurações finais, tal como método de fechar a janela, visibilidade e posicionamento. ActionPerformed: Por fim, temos esse método que fica aguardando alguma ação ser realizada, em vista de seu argumento, que usa a classe ActionPerformed (comentada mais acima). Podemos observar que o que ativa esse evento é cada passada de tempo da classe Timer. A cada ação realizada, pode ser entendido que a variável x é aumentada em 1 e a tela é repintada. 1.4 Visualização da Ferramenta em Funcionamento Faculdade Senac Pelotas Página 5
1.5 Conclusão Pude aprender muito com esse trabalho, pois tive um breve entendimento de como funciona a orientação à eventos no Java, como também como o mesmo trabalho com a parte Gráfica. Aprendi a controlar totalmente o desenho de elementos, tendo também uma ideia do procedimento para realizar uma animação, usando o método repaint. Faculdade Senac Pelotas Página 6