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 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS 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 import import import import import java.awt.Graphics; java.awt.Graphics2D; java.awt.Point; java.awt.event.MouseAdapter; java.awt.event.MouseEvent; 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 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS Rectangle2D private int public void Point p = r = new Rectangle2D.Double(0,0,SIZE,SIZE); pos = -1; mousePressed(MouseEvent event) { 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 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS 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 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS //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 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 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS 1.4 Visualização da Ferramenta em Funcionamento Criando o retângulo: Mudando o ponto x para outro ângulo: Faculdade Senac Pelotas Página 6 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS 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 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS A dificuldade de compreender a parte de criação e implementação do frame. Faculdade Senac Pelotas Página 8 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS 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 JAVA – DESENVOLVENDO APLICAÇÕES GRÁFICAS //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