Desface coordenadas eventos ratón (deseperado)

Iniciado por dusttin, 4 Marzo 2010, 20:26 PM

0 Miembros y 1 Visitante están viendo este tema.

dusttin

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.



Leyer

#1
Podrias intentar cambiando los valores

Código (java) [Seleccionar]
 this.add(new puerta(e.getX()-30, e.getY()-30));

un Saludo.

dusttin

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.

Leyer

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,