Ok ho risolto la parte della generazione dei bersagli, ora devo fare in modo che quando un bersaglio viene cliccato scompare.
Consigli su come fare? Mi conviene usare il metodo contains?
codice:
class GiocoPanel extends JPanel implements MouseListener, MouseMotionListener{
			Dimension myGioco = new Dimension(0, 0);
			Color myColor = new Color(22, 43, 86);	 //COLORE PANNELLO MYGIOCO;
			Timer t,t1;
			ArrayList bersagli;
			double x,y;
			
			public GiocoPanel(){
				setPreferredSize(myGioco);
				setBackground(myColor);
				setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
				Genera();
				
				t = new Timer(20, new ActionListener(){
						public void actionPerformed(ActionEvent event){
							if(bersagli != null){
								for(int i=0; i<bersagli.size(); i++){
									((Bersaglio)(bersagli.get(i))).move();
								}
							}
						repaint();
					}
				});
				t.start();
			}
			public void Genera(){
				bersagli = new ArrayList();
				t1 = new Timer(2000, new ActionListener(){
						public void actionPerformed(ActionEvent event){
							bersagli.add(new Bersaglio(0,0));
							((Bersaglio)bersagli.get(bersagli.size()-1)).setSpeed(2);
							((Bersaglio)(bersagli.get(bersagli.size()-1))).setCentro(CentroRandom());
						}
				});
				t1.start();
			}
			
			public Point2D CentroRandom(){
			 	Point2D punto = new Point2D.Double(0,0);
				switch((int)Math.round(Math.random()*7+1)){
					
				case 1: punto = new Point2D.Double(-30,-30);
					((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(1,1);
					break;
				case 2: punto = new Point2D.Double(0,30+NRandom());
					((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(1,0);
					break;
				case 3: punto = new Point2D.Double(30+NRandom(),0);
					((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(0,1);
					break;
				case 4: punto = new Point2D.Double(530,530);
					((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(-1,-1);
					break;
				case 5: punto = new Point2D.Double(520,0);
					((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(-1,1);
					break;
				case 6: punto = new Point2D.Double(-15,520);
					((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(1,-1);
					break;
				case 7: punto = new Point2D.Double(30+NRandom(),485);
					((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(0,-1);
					break;
				case 8: punto = new Point2D.Double(530,30+NRandom());
					((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(-1,0);
					break;
				}
				return punto;				
			}
			public int NRandom(){
				int nrand = (int)(Math.round((Math.random())*300+1));
				return nrand;
			}
			
			public void paintComponent(Graphics g){
				super.paintComponent(g);
				Graphics2D g2 = (Graphics2D)g;
				g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
				if(bersagli==null)
					bersagli = new ArrayList();
				else
					disegna(g2);
					g2.setColor(new Color(22,43,86));
			}
			
			public void disegna(Graphics2D g2){
				for(int i=0; i<bersagli.size(); i++){
					((Bersaglio)bersagli.get(i)).disegna(g2);
				}
			}
						
			//METODI MOUSE LISTENER
			public void mouseMoved(MouseEvent e){
				x = e.getX();
				y = e.getY();
			}
			public void mouseReleased(MouseEvent e){
			}
			public void mousePressed(MouseEvent e){	}
			public void mouseClicked(MouseEvent e){ }
			public void mouseEntered(MouseEvent e){ }
			public void mouseDragged(MouseEvent e) { }
			public void mouseExited(MouseEvent e){ }
		}
		
		class DatiPanel extends JPanel{
			private JLabel StageLabel, ObiettiviLabel, PuntiLabel;
			private int myStage, myObiettivi, myPunti;
		
			public int getStage() 		{ return myStage; }
			public int getObiettivi()	{ return myObiettivi; }
			public int getPunti()		{ return myPunti; }
			public void setStage(int value)		{ myStage = value; }
			public void setObiettivi(int value)	{ myObiettivi = value; }
			public void setPunti(int value)		{ myPunti = value; }
			
			public DatiPanel(){
			int Stage=1; int Obiettivi=0; int Punti=0;
			StageLabel = new JLabel("Stage:\t"+myStage);
			ObiettiviLabel = new JLabel("Obiettivi:\t"+myObiettivi);
			PuntiLabel = new JLabel("Punti:\t"+myPunti);
			
			add(StageLabel);
			add(ObiettiviLabel);
			add(PuntiLabel);
			}
		}
}

class Bersaglio{
	Ellipse2D.Double cerchio1, cerchio2, cerchio3, cerchio4, cerchio5;
	double raggio;
	double G = 30;
	Point2D centro;
	Color cBersaglioRosso, cBersaglioBianco;
	Vector2 direzione;
	double speed;
	
	public Bersaglio(double x, double y){		
		centro = new Point2D.Double(x, y);
		cBersaglioRosso = new Color(210, 0 ,5);   //Colore circonferenza rossa
		cBersaglioBianco = new Color(255,255,255); //Colore circonferenza bianca
		
		direzione = new Vector2(0,0);
		speed = 0;
	
		raggio = G;
		cerchio1 = new Ellipse2D.Double(centro.getX()-raggio, centro.getY()-raggio, raggio*2, raggio*2);
		
		raggio = (4*G)/5;
		cerchio2 = new Ellipse2D.Double(centro.getX()-raggio, centro.getY()-raggio, raggio*2, raggio*2);
		
		raggio = (3*G)/5;
		cerchio3 = new Ellipse2D.Double(centro.getX()-raggio, centro.getY()-raggio, raggio*2, raggio*2);
		
		raggio = (2*G)/5;
		cerchio4 = new Ellipse2D.Double(centro.getX()-raggio, centro.getY()-raggio, raggio*2, raggio*2);
		
		raggio = G/5;
		cerchio5 = new Ellipse2D.Double(centro.getX()-raggio, centro.getY()-raggio, raggio*2, raggio*2);
	}
	
	public void disegna(Graphics2D figura){
				figura.setColor(cBersaglioRosso);	// 1° circonferenza
				figura.fill(cerchio1);
				figura.setColor(cBersaglioBianco);	// 2° circonferenza
				figura.fill(cerchio2);
				figura.setColor(cBersaglioRosso);	// 3° circonferenza
				figura.fill(cerchio3);
				figura.setColor(cBersaglioBianco);	// 4° circonferenza
				figura.fill(cerchio4);
				figura.setColor(cBersaglioRosso);	// 5° circonferenza
				figura.fill(cerchio5);
			}
		public void setSpeed(double s) {speed = s;	}
		public double getSpeed()       { return speed;  }
		public void setCentro(Point2D centroNew)     { centro = centroNew;  }
		public Point2D getCentro()	{ return centro; }
		public void setDirection(Vector2 v) {direzione = v; }
		public void setDirection(double dx, double dy) { direzione = new Vector2(dx,dy); direzione.normalize(); }
		public Vector2 getDirection()	{ return direzione; }
		
		public void move(){
			double raggio = G;
			centro = new Point2D.Double(centro.getX()+(direzione.getX()*speed), centro.getY()+(direzione.getY()*speed) );
			cerchio1.setFrame( centro.getX()-raggio, centro.getY()-raggio, raggio*2, raggio*2);
			raggio = (4*G)/5;
			cerchio2.setFrame(centro.getX()-raggio, centro.getY()-raggio, raggio*2, raggio*2);
			raggio = (3*G)/5;
			cerchio3.setFrame(centro.getX()-raggio, centro.getY()-raggio, raggio*2, raggio*2);
			raggio = (2*G)/5;
			cerchio4.setFrame(centro.getX()-raggio, centro.getY()-raggio, raggio*2, raggio*2);
			raggio = G/5;
			cerchio5.setFrame(centro.getX()-raggio, centro.getY()-raggio, raggio*2, raggio*2);
			}
		public void directTo(Point2D p){
			direzione = new Vector2( p.getX() - centro.getX(), p.getY() - centro.getY() );
			direzione.normalize();
		}	
}

class Vector2{
	
	private double x,y;
	
	public Vector2(double a, double b){
		x = a;
		y = b;
	}
	
	public double getX() {return x; }
	public void setX(double a) { x = a; }
	public double getY() {return y; }
	public void setY(double b) { y = b; }
	
	
	public double length(){
		return (Math.sqrt(Math.pow(x,2)+Math.pow(y,2)));
	}
	
	public void normalize(){
		double l = length();
		x = x/l;
		y = y/l;
	}
}