Witam. Mam mały problem, z którym nie mogę sobie poradzić. Mam program, który dodaje figury, które można zaznaczać i przesuwać. Chce napisać funkcję, która będzie sprawdzać czy dana figura leży na powierzchni innej. To wykomentowane zdarzenie Mouseevent działa bez zarzutu, ale nie sprawdza czy dana figura leży na powierzchni innej. Dlatego zmieniam to zdarzenie na drugie, które wywołuje funkcję leży_na. Niestety nie wiem za bardzo jak zrobić, aby nadal działało zaznaczanie figur i przykładowo jak kliknę na jakąś figurę, która leży na innej to żeby wypisywało w konsoli jakiś komunikat. Mój kod:

import java.lang.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class Punkt
{ protected int x, y;
   
  public Punkt(int wspX, int wspY) 
     {x = wspX; y = wspY;}
  
  
  public boolean lezy_na(int x_, int y_)
  {
       if (x==x_ && y==y_)
          return true;
      else
          return false;
  }
  
  
  public int podajX()  
   { return x;}
  
  public int podajY()  
   { return y;}  
  
  public int podajDl()       
   {return 5;}
  
  public double odleglosc(Punkt p)
   { return Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y)); }
 
  public void rysuj(Graphics g)
    {  Graphics2D g2D= (Graphics2D)g;
       Color pedzel =new Color(255,0,0);
       g2D.setColor(pedzel);
       g2D.fillOval(x,y,5,5);
     } 
  
  public void przesun(int dx, int dy, int a, int b)
   {x+=dx; y+=dy; 
    if (x>a || x<1) x=5;
    if (y>b || y<1) y=2;
   } 
  }

class Kwadrat extends Punkt
{ protected int dlugosc;

  public Kwadrat(int wspX, int wspY,int dl)
   { super(wspX,wspY);
     dlugosc=dl;}
  
   public int podajDl()       
   {return dlugosc;}

  public void przesun(int dx, int dy, int a, int b)
    { super.przesun(dx,dy, a, b); //przesuwanie
      dlugosc+=dx+dy;             //i skalowanie
      if (dlugosc > 30 || dlugosc <10) dlugosc=20;
   	}

  public void rysuj(Graphics g)
    {Graphics2D g2D=(Graphics2D)g;
     Color pedzel=new Color(0,255,0);
     g2D.setColor(pedzel);
     g2D.fillRect(x,y,dlugosc,dlugosc);
    } 
 }

class Prostokat extends Kwadrat
{
  protected int szerokosc;
  public Prostokat(int wspX, int wspY,int dl, int szer)
   { 
     super(wspX,wspY,dl);
     dlugosc=dl;
     szerokosc = szer;
   }
  
    public int podajSzer()       
    {
        return szerokosc;
    }

  public void przesun(int dx, int dy, int a, int b)
    { 
      super.przesun(dx,dy, a, b); //przesuwanie
      dlugosc+=dx+dy;             //i skalowanie
      szerokosc+=dx+dy;
      if (dlugosc > 30 || dlugosc <10) dlugosc=30;
      if (szerokosc > 30 || szerokosc <10) szerokosc=50;
    }

  public void rysuj(Graphics g)
    {Graphics2D g2D=(Graphics2D)g;
     Color pedzel=new Color(0,0,255);
     g2D.setColor(pedzel);
     g2D.fillRect(x,y,dlugosc,szerokosc);
    } 
  
}

class Figury extends JPanel implements KeyListener, MouseListener
{ protected int N=6;
  protected int biezacy=0; //bieżący numer figury
  protected Punkt figury[];
 
  
 public void wypelnij()
   {figury =new Punkt[N];
    for (int i=0; i<figury.length; i++)
	 { figury[i]=new Punkt(i*22,i*22);
	   if (i<figury.length)
	   figury[++i]= new Kwadrat (i*44,i*44,30);
           if (i<figury.length)
	   figury[++i]= new Prostokat (i*44,i*44,30,50);
	 }  
   }
  
 public void polozenie()
  {	
   for (int i=0; i<figury.length-1;i++)
    {boolean p=figury[i] instanceof Kwadrat;
     System.out.println("\n"+
     p+", ze jestem kwadratem, bo jestem "+figury[i].toString()+ 	
      " ,X="+figury[i].podajX()+
      " , Y="+figury[i].podajY()+
      " , odleglosc="+figury[i].odleglosc(figury[i+1]));
    }
  }

 /***obsługa zdarzeń przez słuchacza zdarzeń MouseListener***/

 
 /*public void mouseClicked(MouseEvent e) 
 // Invoked when the mouse button has been clicked (pressed and released) on a component. 
 {int x_=e.getX();
  int y_=e.getY();
  for (int i=0; i<figury.length;i++)
   if (figury[i].podajX()+figury[i].podajDl()>=x_ && 
       figury[i].podajX()<=x_&&
       figury[i].podajY()+figury[i].podajDl()>=y_&&
       figury[i].podajY()<=y_)
        { biezacy=i;
          System.out.println(biezacy); 
          break;}
   requestFocus(); //przywrocenie zdolnosci do obsługi zdarzeń od klawiatury
   repaint();
  }*/
  


public void mouseClicked(MouseEvent e) // metoda po zmianie
// Invoked when the mouse button has been clicked (pressed and released) on a component.
{int x_=e.getX();
int y_=e.getY();
for (int i=0; i<figury.length;i++)
if (figury[i].lezy_na(x_,y_)) //po dodaniu metody lezy_na(int x_, int y_) w kazdej klasie z rodziny Punkt
{ biezacy=i;
System.out.println(biezacy);
break;}
requestFocus(); //przywrocenie zdolnosci do obsługi zdarzeń od klawiatury
repaint();
}
 
 public void mouseEntered(MouseEvent e) 
 //Invoked when the mouse enters a component. 
  {    }
 
 public void mouseExited(MouseEvent e) 
 //Invoked when the mouse exits a component. 
  {   }
 
 public void mousePressed(MouseEvent e) 
 //Invoked when a mouse button has been pressed on a component. 
  {   }
 
 public void mouseReleased(MouseEvent e) 
 //Invoked when a mouse button has been released on a component. 
  {   }
  
/***obsługa zdarzeń przez słuchacza zdarzeń  KeyListener ***/
 public void keyPressed (KeyEvent evt)
 //Virtual keys (arrow keys, function keys, etc) - handled with keyPressed() listener. 
  { int dx=0, dy=0, zmiana;
    Random r=new Random();
    if (evt.isShiftDown())  
     zmiana = r.nextInt(100);
    else 
     zmiana =r.nextInt(10);
    switch (evt.getKeyCode()) 
     {  case KeyEvent.VK_LEFT : dx -=  zmiana;   break;
        case KeyEvent.VK_RIGHT: dx +=  zmiana;   break;
        case KeyEvent.VK_UP   : dy -=  zmiana;   break;
        case KeyEvent.VK_DOWN : dy +=  zmiana;   break;       
     }
    figury[biezacy].przesun(dx,dy, getWidth(), getHeight()); 
    repaint(); //odświeżenie widoku okna
  }
 
 public void keyReleased (KeyEvent evt)
  {    } 

 public void keyTyped (KeyEvent evt)
 //Characters (a, A, #, ...) - handled in the keyTyped() listener. 
 { char znak=evt.getKeyChar(); //reakcja na przycisku na naciśnięcie klawisza
   int pom=(int)znak-48; //wybór figury
   if ( pom>=0&& pom<N)
    biezacy=pom;
   else
    biezacy=0; 
  System.out.println(biezacy);  
 }   
 
 public void paintComponent(Graphics g) //przedefiniowanie metody  klasy JPanel
 	 { super.paintComponent(g); //dodanie tej linii do programu umożliwia usunięcie śladów po przesuwanych figurach
 	   for (int i=0; i<figury.length; i++)   
         figury[i].rysuj(g); }  //automatyczne rysowanie albo punktu albo kwadratu 
 }

public class Obraz6_2  extends JFrame        
{ protected Figury rysunek;
  
  public Obraz6_2()
  { super ("Obraz6_2");
    setSize(500,500);   
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    rysunek=new Figury();
    rysunek.wypelnij();
    rysunek.polozenie();
    rysunek.addKeyListener(rysunek);
    rysunek.setFocusable(true);   
    rysunek.addMouseListener(rysunek);
    setContentPane(rysunek);
    setVisible(true); 
       
   }
   
public static void main(String args[])
  { Obraz6_2 obraz=new Obraz6_2();}
}

Ktoś ma jakiś pomysł ?