16
Aplicações Gráficas Marco Antonio Arquiteto de Software Fevereiro/2009

Aplicacoes gráficas em Java

Embed Size (px)

DESCRIPTION

Apostila que tem exemplos de aplicações simples utilizando a API Swing para criação de telas.

Citation preview

Page 1: Aplicacoes gráficas em Java

Aplicações GráficasMarco AntonioArquiteto de SoftwareFevereiro/2009

Page 2: Aplicacoes gráficas em Java

Bingo

Page 3: Aplicacoes gráficas em Java

Bingopackage com.javagames.aplicacoesgraficas;import java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;

public class Bingo extends JFrame { private JButton botao; private JLabel lblNumero; private JLabel lblTamanho; private JTextField txtTamanho; private JPanel painelSuperior; private JPanel painelInferior;

public Bingo(String nome) { super(nome); inicializaComponentes(); adicionaComponentes(); adicionaActionListener(); pack(); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }

Page 4: Aplicacoes gráficas em Java

Bingo private void adicionaComponentes() { getContentPane().setLayout(new BorderLayout()); painelSuperior.add(lblTamanho); painelSuperior.add(txtTamanho); painelInferior.add(botao); getContentPane().add(painelSuperior, BorderLayout.NORTH); getContentPane().add(painelInferior, BorderLayout.SOUTH); getContentPane().add(lblNumero, BorderLayout.CENTER); }

private void inicializaComponentes() { painelSuperior = new JPanel(); painelInferior = new JPanel(); botao = new JButton("Sortear novo nœmero"); lblNumero = new JLabel(" "); lblNumero.setFont(new Font("Arial", Font.BOLD, 60)); lblTamanho = new JLabel("Quantidade de nœmeros"); txtTamanho = new JTextField("100", 20); }

private void adicionaActionListener() { botao.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { imprimeNumeroAleatorio(); }; }); }

Page 5: Aplicacoes gráficas em Java

Bingo private void imprimeNumeroAleatorio() { lblNumero.setText("" + proximoNumeroAleatorio()); // Bloco de código do Sintetizador de voz }

private int proximoNumeroAleatorio() { int tamanho = Integer.parseInt(txtTamanho.getText()); return new Random().nextInt(tamanho); }

public static void main(String[] args) { new Bingo("Bingo"); }}

Page 6: Aplicacoes gráficas em Java

Sintetizador de Voz• FreeTTS é um sintetizador de voz escrito em

Java.• Pode ser baixado em

http://freetts.sourceforge.net ou http://marcoreis.net/freetts.zip.

• Acrescente as bibliotecas freetts.jar e cmutimelex.jar nas referências do projeto.

Page 7: Aplicacoes gráficas em Java

Sintetizador de Voz• Acrescente o seguinte código na classe

Bingo. • Todas as classes estão no pacote com.sun.speech.freetts.*.

Voice[] voices = VoiceManager.getInstance().getVoices(); Voice v = voices[2]; v.allocate(); v.speak(lblNumero.getText()); v.deallocate();

Page 8: Aplicacoes gráficas em Java

Diretório de imagens• Crie um diretório para guardar as imagens.• Esse diretório deve ficar na raíz do projeto.• Algumas imagens de teste podem ser

encontradas em http://marcoreis.net/imagens.zip

Page 9: Aplicacoes gráficas em Java

Utilitários• Tarefas repetitivas devem estar separadas em uma classe utilitária.

• Qualquer tipo de conversão deve estar fora de suas classes de negócio, porque geralmente essas operações se repetem em outros lugares.

• No exemplo a seguir temos a UtilImagem, com apenas um método que retorna uma imagem no respectivo diretório da aplicação.

• Este método certamente não poderia estar em uma classe de negócio da aplicação, pois será usado em várias situações diferentes.

Page 10: Aplicacoes gráficas em Java

UtilImagempackage com.javagames.util;

import java.awt.*;

import java.io.*;

public class UtilImagem {

private static String diretorioDeImagens = new File("").getAbsolutePath();

public static Image getImagem(String imagem) {

String caminho = diretorioDeImagens + "/imagens/" + imagem;

File f = new File(caminho);

if (f.exists()) {

return Toolkit.getDefaultToolkit().getImage(caminho);

} else {

throw new RuntimeException("Erro ao carregar a imagem.");

}

}

}

Page 11: Aplicacoes gráficas em Java

Moldura• Na sequência temos uma classe que

exemplifica o uso da UtilImagem.• A imagem é desenhada duas vezes. Uma em

tamanho natural, outra com um tamanho fixo (50, 50).

Page 12: Aplicacoes gráficas em Java

Moldurapackage com.javagames.aplicacoesgraficas;

import java.awt.*;import javax.swing.*;import com.javagames.util.*;public class Moldura extends JFrame { private String nomeDaImagem; public Moldura(String nomeDaImagem) { setTitle("Moldura"); this.nomeDaImagem = nomeDaImagem; setSize(Toolkit.getDefaultToolkit().getScreenSize()); setVisible(true); } public void paint(Graphics g) { Image imagem = UtilImagem.getImagem(nomeDaImagem); int posicaoX = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight() / 2; int posicaoY = (int) Toolkit.getDefaultToolkit().getScreenSize().getWidth() / 2; g.drawImage(imagem, posicaoY, posicaoX, 50, 50, this); g.drawImage(imagem, posicaoY, posicaoX, this); } public static void main(String[] args) { new Moldura("yoda-tux-256.png"); }}

Page 13: Aplicacoes gráficas em Java

Forma geométrica• A primeira classe do framework de

desenvolvimento de jogos.• Framework é um conjunto de classes com

funcionalidades e escopo bem definido.• Além disso, deve ter um padrão a ser seguido

para facilitar o desenvolvimento de novas classes.

Page 14: Aplicacoes gráficas em Java

FormaGeometricapackage com.javagames.circulos;

import java.awt.*;

import javax.swing.*;

public class FormaGeometrica extends JFrame implements Runnable {

//Definicao dos tamanhos e dimensoes

private int dimensaoX = 4;

private int dimensaoY = 4;

private int posicaoX = 10;

private int posicaoY = 100;

private int tamanhoX = 30;

private int tamanhoY = 30;

private double angulo = 10;

private JPanel painel;

//Criacao do frame principal

public FormaGeometrica(Color cor) {

setBackground(cor);

painel = new JPanel();

getContentPane().add(painel);

setVisible(true);

setSize(600, 600);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

Page 15: Aplicacoes gráficas em Java

FormaGeometrica //Inicio da thread principal da aplicacao.

public static void main(String[] args) {

FormaGeometrica bola = new FormaGeometrica(Color.WHITE);

Thread t = new Thread(bola);

t.start();

}

//Enquanto (true) move a forma geometrica, espera 500ms e faz tudo novamente

public void run() {

while (true) {

move();

try {

Thread.sleep(500);

} catch (InterruptedException ex) {

}

}

}

Page 16: Aplicacoes gráficas em Java

FormaGeometrica //Desenha a primeira forma geometrica.

public void desenha() {

Graphics g = painel.getGraphics();

g.fillOval(posicaoX, posicaoY, tamanhoX, tamanhoY);

}

//Move a forma geometrica na diagonal – tente outras valores

public void move() {

Graphics g = painel.getGraphics();

g.drawOval(posicaoX, posicaoY, tamanhoX,tamanhoY);

posicaoX += dimensaoX;

posicaoY += dimensaoY;

}

//Chamado na primeira vez que o painel é carregado

@Override

public void paint(Graphics g) {

desenha();

}

}