Aplicacoes gráficas em Java

Post on 27-May-2015

292 views 3 download

description

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

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();

}

}