Aplicacoes gráficas em Java
-
Upload
marco-reis -
Category
Technology
-
view
291 -
download
3
description
Transcript of Aplicacoes gráficas em Java
Aplicações GráficasMarco AntonioArquiteto de SoftwareFevereiro/2009
Bingo
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); }
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(); }; }); }
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"); }}
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.
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();
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
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.
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.");
}
}
}
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).
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"); }}
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.
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);
}
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) {
}
}
}
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();
}
}