Definição de Coordenadas a partir do Clique do Mouse Java

1 resposta
java
Z

Estou desenvolvendo um projeto no qual utilizo a cadeia de Freeman para desenhar formas.

Meu problema está relacionado a coordenadas, atualmente eu consigo digitar as coordenadas para definir onde iniciará o desenho, porém precisava fazer isso a partir do Clique do Mouse, ou seja, Meu X e Y inicial, seriam definidos a partir do clique do mouse.

Para entender melhor o funcionamento do projeto segue o link Link

Segue o código com ERRO para melhor entendimento:

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Graphics;
import javax.swing.JOptionPane;


public class Desenho1 extends JFrame{
   private int numero;
   private int xi,yi,xf,yf,tam;
   private int mousePositionX;
   private int mousePositiony;
   private boolean pressionado = false;
   
   
   public Desenho1(){
      super("Desenho");
      
      addMouseListener(
         new MouseListener() {
         
            public void mouseClicked(MouseEvent e) {
            			
            }
         
            public void mouseEntered(MouseEvent e) {	
            
            }
         
            public void mouseExited(MouseEvent e) {
            			
            }
         
            public void mousePressed(MouseEvent e) {
               
               pressionado = true;		
            
            }
         
            public void mouseReleased(MouseEvent e) {
               pressionado = false;
            }
         
         });
         
         
      setSize(1000,1000);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setLocationRelativeTo(null);
      setResizable(true);
      setVisible(true);
   }
   
   
   public void paint(Graphics g) {
      if(pressionado == true){
         tam = Integer.parseInt(JOptionPane.showInputDialog("Digite o tamanho: "));
             
         do{
            numero = Integer.parseInt(JOptionPane.showInputDialog("Digite o numero da cadeia de freeman: "));
            if(numero == 0){
               xf = xi;
               yf=yi+tam;
               g.drawLine(yi, xi, yf, xf);
               xi = xf;
               yi = yf;
            }
            else if(numero == 1){
               xf = xi-tam;
               yf=yi+tam;
               g.drawLine(yi, xi, yf, xf);
               xi = xf;
               yi = yf;
            }
            else if(numero == 2){
               xf = xi-tam;
               yf=yi;
               g.drawLine(yi, xi, yf, xf);
               xi = xf;
               yi = yf;
            }
            
            else if(numero == 3){
               xf = xi-tam;
               yf = yi-tam;
               g.drawLine(yi, xi, yf, xf);
               xi = xf;
               yi = yf;
            }
            else if(numero == 4){
               xf = xi;
               yf = yi-tam;
               g.drawLine(yi, xi, yf, xf);
               xi = xf;
               yi = yf;
            }
            else if(numero == 5){
               xf = xi+tam;
               yf = yi-tam;
               g.drawLine(yi, xi, yf, xf);
               xi = xf;
               yi = yf;
            }
            else if(numero == 6){
               xf = xi+tam;
               yf = yi;
               g.drawLine(yi, xi, yf, xf);
               xi = xf;
               yi = yf;
            }
            else if(numero == 7){
               xf = xi+tam;
               yf = yi+tam;
               g.drawLine(yi, xi, yf, xf);
               xi = xf;
               yi = yf;
            }
         
         }while(numero !=9);}
   }
      
	
   
   public static void main(String[] args){
      new Desenho1();
   }

}

Agora vou colocar o código funcionando porém sem o rastreio do mouse:

import java.awt.*;
import javax.swing.*;

public class Desenho extends JFrame{
   private int numero;
   private int xi,yi,xf,yf,tam;
   public Desenho(){
      super("Desenho");
      
      
      setSize(1000,1000);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setLocationRelativeTo(null);
      setResizable(true);
      setVisible(true);
   }
   public void paint(Graphics g) {
      xi = Integer.parseInt(JOptionPane.showInputDialog("Digite a coordenada x inicial: "));
      yi = Integer.parseInt(JOptionPane.showInputDialog("Digite a coordenada y inicial: "));
      tam = Integer.parseInt(JOptionPane.showInputDialog("Digite o tamanho: "));
  
      do{
         numero = Integer.parseInt(JOptionPane.showInputDialog("Digite o numero da cadeia de freeman: "));
         if(numero == 0){
            xf = xi;
            yf=yi+tam;
            g.drawLine(yi, xi, yf, xf);
            xi = xf;
            yi = yf;
         }
         else if(numero == 1){
            xf = xi-tam;
            yf=yi+tam;
            g.drawLine(yi, xi, yf, xf);
            xi = xf;
            yi = yf;
         }
         else if(numero == 2){
            xf = xi-tam;
            yf=yi;
            g.drawLine(yi, xi, yf, xf);
            xi = xf;
            yi = yf;
         }
         
        else if(numero == 3){
            xf = xi-tam;
            yf = yi-tam;
            g.drawLine(yi, xi, yf, xf);
            xi = xf;
            yi = yf;
         }
        else if(numero == 4){
            xf = xi;
            yf = yi-tam;
            g.drawLine(yi, xi, yf, xf);
            xi = xf;
            yi = yf;
         }
        else if(numero == 5){
            xf = xi+tam;
            yf = yi-tam;
            g.drawLine(yi, xi, yf, xf);
            xi = xf;
            yi = yf;
         }
        else if(numero == 6){
            xf = xi+tam;
            yf = yi;
            g.drawLine(yi, xi, yf, xf);
            xi = xf;
            yi = yf;
         }
        else if(numero == 7){
            xf = xi+tam;
            yf = yi+tam;
            g.drawLine(yi, xi, yf, xf);
            xi = xf;
            yi = yf;
         }

      }while(numero !=9);
   }
      
	
   
   public static void main(String[] args){
      new Desenho();
   }

}

Ao invés de digitar as coordenadas xi e yi, eu tenho que capturar elas através do mouse.

1 Resposta

darlan_machado

Qual erro?

Já tentou o google?

Criado 20 de outubro de 2019
Ultima resposta 21 de out. de 2019
Respostas 1
Participantes 2