JAVA APLICAÇÕES GRÁFICAS Propriedades Utilizadas: Resize Shape Basic Shape FACULDADE DE TECNOLOGIA SENAC PELOTAS Nome do aluno: Marri Souza da Luz Identificação da Turma: 3º ADS - Noite Data: 13/05/2010
1 Nome da Propriedade Resize a shape 1.1 Introdução e Funcionamento Esta propriedade trata das dimenssões de uma forma(shape), proporcionando redimensionar o seu tamanho sempre que disparados eventos executados pelo mouse. A aplicação desenha uma forma retangular na tela com pontos em suas diagonais, ao clicar nos pontos é possível redimensionar a forma movendo o ponto em alguma direção. 1.2 Código da aplicação import java.awt.graphics; import java.awt.graphics2d; import java.awt.point; import java.awt.event.mouseadapter; import java.awt.event.mouseevent; import java.awt.geom.rectangle2d; import javax.swing.jframe; import javax.swing.jpanel; public class ResizeRectangle extends JPanel { private int SIZE = 8; private Rectangle2D[] points = { new Rectangle2D.Double(50, 50,SIZE, SIZE ), new Rectangle2D.Double(150, 100,SIZE, SIZE) ; Rectangle2D s = new Rectangle2D.Double(); ShapeResizeHandler ada = new ShapeResizeHandler(); public ResizeRectangle() { addmouselistener(ada); addmousemotionlistener(ada); public void paintcomponent(graphics g) { super.paintcomponent(g); Graphics2D g2 = (Graphics2D) g; for (int i = 0; i < points.length; i++) { g2.fill(points[i]); s.setrect(points[0].getcenterx(), points[0].getcentery(), Math.abs(points[1].getCenterX()-points[0].getCenterX()), Math.abs(points[1].getCenterY()- points[0].getcentery())); g2.draw(s); class ShapeResizeHandler extends MouseAdapter { Faculdade Senac Pelotas Página 2
Rectangle2D r = new Rectangle2D.Double(0,0,SIZE,SIZE); private int pos = -1; public void mousepressed(mouseevent event) { Point p = event.getpoint(); for (int i = 0; i < points.length; i++) { if (points[i].contains(p)) { pos = i; return; public void mousereleased(mouseevent event) { pos = -1; public void mousedragged(mouseevent event) { if (pos == -1) return; points[pos].setrect(event.getpoint().x,event.getpoint().y,points[pos].getwidth(), points[pos].getheight()); repaint(); public static void main(string[] args) { JFrame frame = new JFrame("Resize Rectangle"); frame.add(new ResizeRectangle()); frame.setsize(300, 300); frame.setlocationrelativeto(null); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setvisible(true); 1.3 Propriedades utilizadas package trabalhopoo; //importação das bibliotecas utilizadas nesta aplicação import java.awt.graphics; import java.awt.graphics2d; import java.awt.point; import java.awt.event.mouseadapter; import java.awt.event.mouseevent; import java.awt.geom.rectangle2d; Faculdade Senac Pelotas Página 3
import javax.swing.jframe; import javax.swing.jpanel; //Criando uma classe estendendo a JPanel public class ResizeRectangle extends JPanel { //criou uma variável para dimensionar posições no vetor private int SIZE = 8; //criando um vetor Do tipo rectangle2d points private Rectangle2D[] points = { new Rectangle2D.Double(50, 50,SIZE, SIZE), new Rectangle2D.Double(150, 100,SIZE, SIZE) ; //criando outro objeto s do tipo Rectangle2D Rectangle2D s = new Rectangle2D.Double(); //objeto do tiposhaperesizehandler ShapeResizeHandler ada = new ShapeResizeHandler(); //método construtor public ResizeRectangle() { addmouselistener(ada); addmousemotionlistener(ada); public void paintcomponent(graphics g) { //chamando uma função da super-classe super.paintcomponent(g); Graphics2D g2 = (Graphics2D) g; //percorrer tamanho do vetor incrementando i //reinderizando (preenchendo) os pontos e criando a forma for (int i = 0; i < points.length; i++) { g2.fill(points[i]); //obtendo as coordenados do retatangulo através dos getcenter x e y s.setrect(points[0].getcenterx(), points[0].getcentery(), Math.abs(points[1].getCenterX()-points[0].getCenterX()), Math.abs(points[1].getCenterY()- points[0].getcentery())); //métodos Math.abs retorna o valor absoluto para calcular as dimencoes g2.draw(s); //classe estendida redimensionado com o mouse class ShapeResizeHandler extends MouseAdapter { Rectangle2D r = new Rectangle2D.Double(0,0,SIZE,SIZE); private int pos = -1; Faculdade Senac Pelotas Página 4
//método q dispara valor da variável quando pressionado o Mouse public void mousepressed(mouseevent event) { Point p = event. getpoint(); //Percorrer vetor em todo seu tamanho //incrementando i - para cada posisao //contem o objeto p - retornando as posições x e y for (int i = 0; i < points.length; i++) { if (points[i].contains(p)) { pos = i; return; //quando o mouse e liberado aciona este método public void mousereleased(mouseevent event) { //pos assume valor -1 pos = -1; //quando o mouse se meche e algum botão dele e pressionado JAVA DESENVOLVENDO APLICAÇÕES GRÁFICAS public void mousedragged(mouseevent event) { //if de verificação verifica se pos==1 //retorna if (pos == -1) return; // points[pos].setrect(event.getpoint().x,event.getpoint().y,points[pos].getwidth(), points[pos].getheight()); repaint(); //método principal q dispara todos os métodos mencionados nele public static void main(string[] args) { //instanciando uma classe //criando um objeto frame do tipo JFrame JFrame frame = new JFrame("Resize Rectangle"); //chamando os métodos frame.add(new ResizeRectangle()); //gerando o retangulo frame.setsize(300, 300); //passando os valores iniciais frame.setlocationrelativeto(null); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setvisible(true);//tornando visivel Faculdade Senac Pelotas Página 5
1.4 Visualização da Ferramenta em Funcionamento JAVA DESENVOLVENDO APLICAÇÕES GRÁFICAS Criando o retângulo: Mudando o ponto x para outro ângulo: Faculdade Senac Pelotas Página 6
1.5 Conclusão Esta classe desenha e redimensiona um retângulo de acordo com os pontos iniciais definidos na variável SIZE. Através destes pontos o usuário altera sua forma, diminuindo, aumentando, encolhendo, expandindo, para direita, para esquerda para cima e para baixo. Esta alterações se dão através de eventos do mouse: mousepressed - dispara valor da variável quando pressionado o Mouse; mousereleased dispara quando o mouse e liberado; mousedragged - quando o mouse se meche e algum botão dele e pressionado dispara comandos; Técnicas utilizadas para construção da classe: Herança; Criação do Objeto(Instância da Classe); Método Construtor; Operador ponto, dando acesso os métodos e variáveis de Instância; Super Classe; Faculdade Senac Pelotas Página 7
A dificuldade de compreender a parte de criação e implementação do frame. Faculdade Senac Pelotas Página 8
2 Nome da Propriedade Basic Shape 2.1 Introdução e Funcionamento Esta propriedade molda linhas, curvas e quadrados apartir de um ponto inicial do desenho atual. 2.2 Código da aplicação package trabalhopoo; import java.awt.geom.generalpath; public class BasicShapes { public static void main(string[] args) { GeneralPath shape = new GeneralPath(); shape.moveto(1, 1); shape.lineto(2, 2); shape.quadto(3, 3, 4, 4); shape.curveto(5, 5, 6, 6, 7, 7); shape.closepath(); 2.3 Propriedades principais utilizadas package trabalhopoo; import java.awt.geom.generalpath; public class BasicShapes { //método principal public static void main(string[] args) { //Criando objeto do tipo GeneralPath GeneralPath shape = new GeneralPath(); //move a posição do desenho atual ate as posiçoes definidas em (x,y) shape.moveto(1, 1); //desenha uma linha apartir da posicao inicial do desenho atual shape.lineto(2, 2); //desenha um quadrado shape.quadto(3, 3, 4, 4); //desenha uma curva usando o estilo de linha atual a partir //da posição de desenho atual até (âncorax, âncoray) e //usando o ponto de controle especificado por (controlex, controley) shape.curveto(5, 5, 6, 6, 7, 7); Faculdade Senac Pelotas Página 9
//fecha o caminho shape.closepath(); 2.4 Visualização da Ferramenta em Funcionamento Não possui imagens a classe não está compilando. 2.5 Conclusão A dificuldade que encontrei no código foi de não conhecer a fundo a classe generalpath, assim dificulta a compreensão deste. As variáveis de instância ficaram subintendidas. Embora esta classe seja menor que a anterior é complicado para entender. Faculdade Senac Pelotas Página 10