Aplicacoes gráficas em Java

  • 223 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
223
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
16
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Aplicações Gráficas Marco Antonio Arquiteto de Software Fevereiro/2009
  • 2. Bingo
  • 3. Bingo package 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); }
  • 4. 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(); }; }); }
  • 5. 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"); } }
  • 6. 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.
  • 7. 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();
  • 8. 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
  • 9. 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.
  • 10. UtilImagem package 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."); } } }
  • 11. 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).
  • 12. Moldura package 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"); } }
  • 13. 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.
  • 14. FormaGeometrica package 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); }
  • 15. 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) { } } }
  • 16. 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(); } }