JAVA – APLICAÇÕES GRÁFICAS Propriedades Utilizadas: insira as propriedades escolhidas aqui FACULDADE DE TECNOLOGIA SENAC PELOTAS Nome do aluno: Fabiano Nobre Mendes Identificação da Turma: ADS(Noturno) Data: 16/05/2010 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS 1 Nome da Propriedade 1 Noise Image 1.1 Introdução e Funcionamento O funcionamento desta propriedade é bem simples ao compilar o código ele apresenta uma tela com uma imagem pontilhada em amarelo e preto simulando uma TV quando está fora do ar . 1.2 Código da aplicação // java.awt contem todas as classes para a criação de interfaces graficas do usuario e para a pintura e as imagens import java.awt.Graphics; //importa uma biblioteca grafica import java.awt.image.BufferedImage; // descreve uma imagem com um baffer de acesso de dados de imagem import java.awt.image.ColorModel; // esta classe abstrata define uma interface para extrair amostras de pixels em uma imagem import java.awt.image.DataBuffer; // esta classe existe para envolver uma ou mais matrizes de dados import java.awt.image.DataBufferByte; // essa classe estende DataBuffer e armazena os dados internamente como bytes import java.awt.image.IndexColorModel;// classe que trabalha com valores de pixels em um mapa de cores fixas //no sRGB(criado pela power horse e microsoft) para uso em monitores, impressoras, e internet. import java.awt.image.Raster; //A classe que representa uma matriz retangular de pixels. A Raster encapsula um DataBuffer que armazena os valores das amostras e um SampleModel que //descreve como localizar um valor em uma determinada amostra DataBuffer. import java.awt.image.WritableRaster; // Essa classe estende Raster para fornecer capacidades de pixel por escrito import java.util.Random; // Uma instância desta classe é usada para gerar um fluxo de números pseudo-aleatório import javax.swing.JComponent; // A classe base para o padrão e os componentes personalizados que usam a arquitetura do Swing. import javax.swing.JFrame; //Constrói um novo quadro que é inicialmente invisível. //Esse construtor define componente local da propriedade para o valor retornado pelo JComponent.getDefaultLocale. public class StaticGenerator extends JComponent implements Runnable { byte[] data; BufferedImage image; Random random; public void initialize() { int w = getSize().width, h = getSize().height; int length = ((w + 7) * h) / 8; data = new byte[length]; DataBuffer db = new DataBufferByte(data, length); WritableRaster wr = Raster.createPackedRaster(db, w, h, 1, null); ColorModel cm = new IndexColorModel(1, 2, Faculdade Senac Pelotas Página 2 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS new byte[] { (byte) 42, (byte) 248 }, new byte[] {(byte) 332, (byte) 221 }, new byte[] { (byte) 119, (byte) 7 }); image = new BufferedImage(cm, wr, false, null); random = new Random(); new Thread(this).start(); } public void run() { while (true) { random.nextBytes(data); repaint(); try { Thread.sleep(1000 / 24); } catch (InterruptedException e) { } } } @Override public void paint(Graphics g) { if (image == null) initialize(); g.drawImage(image, 0, 0, this); } public static void main(String[] args) { JFrame f = new JFrame("Fabiano Nobre Mendes"); f.add(new StaticGenerator()); f.setSize(1400, 770); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } } 1.3 Propriedades utilizadas Para criar o programa Noise Image foi importado o pacote “awt, útil, swing“ e instanciado os seguintes objetos: Grafhics: que importa a parte gráfica que será usada como exemploa cor atual, fonte atual e coodenadas. BufferedImage: que descreve um imagem com um baffer de acesso de dados de imagem ele é ainda composto de uma colorModel e uma varredura. ColorModel: esta classe abstrata define uma interface para extrair amostras de pixels em um imagem. DataBuffer: esta classe envolve uma ou mais matrizes de dados DataBufferByte: esta extende o Databuffer e armazena os dados como byte. ÍndexColorModel: esta classe usa valore de pixels em um mapa de cores fixas no sRGB(criado pela Power horse e microsoft) para uso em motores, impressoras e internet. Raster: representa uma matriz de pixels. WritablsRaster: esta fornece capacidade de pixels por escrito. Útil.Random: gera um fluxo de de numero pseudo-aleatório. Swing.Jcomponent: usa especificamente a arquitetura dó swing. Swing.JFrame: constrói um quadro invisível Faculdade Senac Pelotas Página 3 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS Classes A classe StaticGenerator utiliza o extends para trazer a herança contida na classe JComponents e implementada com a própria interface gráfica Runnable, apartir disto será inserido o array byte[] data as variaveis bufferedImage image e Random Ramdom. O método initialize(); nele foi inserido as variáveis inteiras” w” contendo um getSize(). Width, h = getSize().heigth , que ira receber a largura e altura, outra variável é a lenght que recebeu uma função que será calculada. A variável data esta instanciando o vetor bayte que recebe a variável length, cria – se a variável db que receberá data, lentgth após ser estendida pelo dataBufferbyte, a variável wr recebe o através do raster.createpackedRaster as variáveis dB,w,h o numero 1 e null, a variável cm esta intanciando a idexcColor Model que poderá ser utilizada para mudança de de cores no programa . A variável image está está instanciando a bufferedimage com as variáveis cm, wr junto com o false, null o random tambem está instanciando o random. O método rum() está estendo um conteúdo da runnable, neste método foi criado um laço de repetição que controla a atualização da imagem, ela joga um numero aletorio de números para dentro do array data que depois solicita o repaint() que apaga e atualiza, feito isso ele interrompe por um determinado espaço de tempo retornando novamente para o inicio do laço . O método paint, tem um funcionamento bem simples que indica se a imagem for igual a nulo ela deve começar na posição indicada pela extensão g.drawImage que no caso começa na posição(Y,X)= (0,0), O método main, chama a janela JFrame e já identifica com o nome, nesta janela também é adicionada a classe StaticGenerator o tamnaho que ela vai ter com setSize o padrão de fechamento da janela com o setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) e o setVisible(true) que mostra a imagem se for verdadeiro. 1.4 Visualização da Ferramenta em Funcionamento Funcionamento normal. Faculdade Senac Pelotas Página 4 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS Alteração do método paint (0 , 20). Alteração do método paint (20 , 0). Faculdade Senac Pelotas Página 5 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS 1.5 Conclusão - Descreva uma pequena conclusão sobre o que foi aprendido com a implementação deste aplicativo. Aprendi como a imagem é criada, com as classe initialize() que constrói o conteúdo e cria as cores que serão utilizadas na janela, o método run() que tem um temporizador que apaga e atualiza assim criando um efeito de movimento na imagem e por ultimo como a imagem é dimensionada dentro da janela com o método paint() e juntamente com o método main() que instancia a Jframe que é a janela em si. - Incluir as dificuldades de compreensão do código que foi escolhido; O grande desafio foi entender os pacotes e as suas funcionalidades, como foi utilizado e para que servia. -Incluir os conhecimentos que foram agregados com o desenvolvimento do trabalho; O funcionamento dos pacotes em si utilizados e suas extensões como por exemplo o g.drawImage, Thread.sleep, byte[] etc... Faculdade Senac Pelotas Página 6