Foro de elhacker.net

Programación => Java => Mensaje iniciado por: dusttin en 4 Marzo 2010, 20:26 pm



Título: Desface coordenadas eventos ratón (deseperado)
Publicado por: dusttin en 4 Marzo 2010, 20:26 pm
Hola,

estoy con el PFC y lo hago en java y tengo un error tontisimo con la captura de las coordenadas del ratón mediante los métodos MouseListener  y MouseMotionListener.

El problema es que  actionEvent  no me devuelve las coordenadas de la punta del ratón, sino que hay un desface hacia abajo y hacia la derecha.

Os pongo el código de ejemplo para ver si es que yo no defino bien las clases:


Código clase jframe:


import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
public class Escritorio extends JFrame implements MouseListener{
   private static final long serialVersionUID = 1L;
   public Escritorio(){
      this.setSize(800,600);
      this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
      this.addMouseListener(this);
      //this.pack();   
   }
   
   
   public static void main(String[] args) {
      // TODO Auto-generated method stub
      java.awt.EventQueue.invokeLater(new Runnable(){
         public void run(){
            new Escritorio().setVisible(true);
         }
      });
   }
   

   public void mouseClicked(MouseEvent e) {
      // TODO Auto-generated method stub
      this.getContentPane().add(new puerta(e.getX(), e.getY()));
      this.repaint();
      
   }

Código clase JLabel ;

import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;

public class puerta extends JLabel{
   private static final long serialVersionUID = 1L;
      
      public puerta(int x, int y){
         
         this.setLocation(x,y);
         this.setSize(50,50);
         
      }
      
      public void paint(Graphics g){
         g.setColor(Color.BLACK);
         g.fillRect(0,0,getWidth()-1,getHeight()-1);
         super.paint(g);
      }
      
      
}

esto es un ejemplo, si lo solucionamos aquí luego aplico la solución al otro código.
En este código también me pasa lo mismo.




Título: Re: Desface coordenadas eventos ratón (deseperado)
Publicado por: Leyer en 5 Marzo 2010, 00:04 am
Podrias intentar cambiando los valores

Código
  1.  this.add(new puerta(e.getX()-30, e.getY()-30));

un Saludo.


Título: Re: Desface coordenadas eventos ratón (deseperado)
Publicado por: dusttin en 6 Marzo 2010, 12:06 pm
Si, eso ya lo he probado, pero si le meto el desface manualmente, cuando lo pongo en otro ordenador, no sé sí será por la resolución, cambia.

De todas maneras las coordenadas del ratón deberían ser la de la punta, no entiendo que estoy haciendo mal. 

A ver si alguién se le ocurre que puede estar mal.


Título: Re: Desface coordenadas eventos ratón (deseperado)
Publicado por: Leyer en 6 Marzo 2010, 20:35 pm
Tienes que agregar el listerner del mouse al component puerta y no al frame creo que hay radica el error luego agregas puerta al frame,despues en el componente ṕuerta colocas addMouseListener(this);  obtienes los valores optenidos en "x" y "y" y en  g.fillRect(0,0,50,50); en los 0 agregas "x" y "y" y despues remover e super, Asi si se optendran los valores correctamente ya lo he probado :P

Un Saludo,