# MouseEvents im Frame?



## asterix_76 (25. Sep 2004)

Hallo habe eine kleines Programm geschrieben in dem die Deutschlandkarte gezeichnet wird.
Auf diese Karte erzeuge ich kleine Punkte die die Haupstadt des jeweiligen Bundesland repräsentieren soll.

Jetzt möchte ich, wenn ich mit der Maus auf einen Punkt klicke, die Bildschirmhintergrundfarbe ändern.
Mein Problem ist, das ich keine Ahnung habe, wie ich feststelle, ob auf einen Punkt geklickt wurde.


Hier mein bisheriger Quellcode:


```
import java.awt.*;
import java.awt.event.*;

public class Karte extends Frame implements MouseListener
{
	private MediaTracker mt;
	private Image [] karte;
	private int mouseX;
	private int mouseY;
	
	Dot dot;
	
	public Karte()
	{
		super("Deutschland");
		setSize(250,295);
		setVisible(true);
		setResizable(false);
		
		
		mt = new MediaTracker(this);
		karte = new Image[2];
		karte[0]=Toolkit.getDefaultToolkit().getImage("images/deutschlandkarte.gif");
		karte[1]=Toolkit.getDefaultToolkit().getImage("images/nrw.gif");
		mt.addImage(karte[0],0);
		mt.addImage(karte[1],0);
		
		try
		{
			mt.waitForAll();
		}
		catch(InterruptedException e)
		{
		}
		addMouseListener(this);
		
	}
	public void mouseMoved(MouseEvent e) {
    }
    
    public void mouseReleased(MouseEvent e) {
    }
    
    public void mousePressed(MouseEvent e) {
    	mouseX = e.getX(); 
  		mouseY = e.getY(); 
    }  
    
    public void mouseExited(MouseEvent e) {
    }
    public void mouseEntered(MouseEvent e) {
    }
    public void mouseClicked(MouseEvent e) {
    }
	
	public void paint(Graphics g)
	{
		dot = new Dot();
		g.drawImage(karte[0],0,5,this);
		dot.paint(g);
	}
	
	
	
	public static void main(String [] args)
	{
		new Karte();
	}
	
	
}
```

Und hier die Punkt Klasse zum erzeugen der einzelnen Punkte::


```
import java.awt.*;

public class Dot
{
	int x;
	int y;
	String name;
	boolean active;
	

public void setDot(int x,int y)
	{
		this.x=x;
		this.y=y;
	}
	
	public int getX()
	{
		return x;
	}
	public int getY()
	{
		return y;
	}
	public void paint(Graphics g)
	{
		g.setColor(Color.red);
		
		g.drawOval(100,200,6,6);
		g.drawOval(50,130,6,6);
		
		g.fillOval(100,200,6,6);
		g.fillOval(50,130,6,6);
	}
	
	public void setActive(int x,int y)
	{
		this.x=50;
		this.y=130;
		DotActive(true);
	}
	
	public boolean DotActive(boolean value)
	{
		active=value;
		return active;
	}
	
	

}
```

Danke im voraus für Eure Hilfe
Asterix_76

_Bitte code tags benutzen! - Roar_


----------



## L-ectron-X (26. Sep 2004)

Du solltest die Hauptstädte in einem Objekt verwalten, also z.B. eine Klasse _Hauptstadt_ einführen, in der alle Hauptstädte mit den X/Y-Koordinaten gespeichert werden. Dazu kannst Du z.B. ein Collection-Objekt benutzen. Z.B. einen Vector oder ein HashSet.
Wenn Du nun mit der Maus irgendwo auf Deiner Karte klickst, durchläufst Du das Collection-Objekt und vergleichst die darin gespeicherten X/Y-Koordinaten, mit denen der eben geklickten Stelle auf der Karte. Wenn die Koordinaten sich in etwa decken, reagierst Du darauf entsprechend.


----------



## asterix_76 (26. Sep 2004)

Danke für den Hinweis, mal gucken ob ich das hinbekomme
Gruß Asterix_76


----------

