# Bilderpositionierung mit Maus



## DarkShadow (6. Jan 2007)

Hallo !

Wir müssen für ein Schulprojekt ein Schachspiel mit java programmieren.
Bis jetzt haben wir das Schachfeld mit Menü etc. gezeichnet. Nun wollen wir Bilder einfügen, welche die Figuren sein sollen. Unser Problem ist nun, das wir die jeweiligen Bilder bzw. Figuren mit der Maus bewegen / positionieren wollen. Allerdings bewegt sich bei uns nicht nur ein Bild sondern alle Bilder die auf der jewiligen Höhe sind. Das heißt das wir die einzelnen Figuren nicht setzen können. 


PS: Wir haben es bis jetzt so geplant gehabt das für jede Figur eine extra Klasse programmiert werden soll, in der die erlaubten Spielzüge etc. gespeichert sind.

Wir hoffen auf eure Hilfe

[/code]


----------



## LoN_Nemesis (6. Jan 2007)

Wir hoffen auf etwas Code!

Spontan würde ich jetzt raten, dass ihr die Koordinaten der Figuren als Point speichert und alle Figuren in einer Reihe auf das gleiche Point Objekt zeigen, aber das ist einfach nur geraten und höchstwahrscheinlich total vorbei


----------



## DarkShadow (6. Jan 2007)

Quellcode vom Schachbrett:



```
import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

class Schachbrett extends JPanel
{
 private boolean schwarz = false;
 private BauerWeiss1 bw1;
 private int yPos = 300;
 
   public void paintComponent(Graphics g)
  {
    super.paintComponent(g);
    int anzahlhorizontal = 0;
    int anzahlvertikal = 0;
    int x = 0;
    int y = 0;

    bw1 = new BauerWeiss1();
    //Schachbrettfelder abwechselnd erzeugen
    while(anzahlvertikal <= 8)
    {

      while(anzahlhorizontal <= 4)
      {
        if(schwarz == false)
        {
          g.setColor(Color.WHITE);
        }
        else
        {
          g.setColor(Color.GRAY);
        }
        g.fillRect(x, y, 50, 50);
        g.setColor(Color.GRAY);
        g.drawRect(x, y, 50, 50);
        if(schwarz == false)
        {
          g.setColor(Color.GRAY);
        }
        else
        {
          g.setColor(Color.white);
        }

        g.fillRect(x+50, y, 50, 50);
        g.setColor(Color.GRAY);
        g.drawRect(x+50, y, 50, 50);

        anzahlhorizontal++;
        x = x+100;
      }
      anzahlhorizontal = 0;
      x = 0;
      y = y+50;
      anzahlvertikal++;
      if(schwarz == false)
      {
        schwarz = true;
      }
      else
      {
        schwarz = false;
      }
    }
          schwarz = true;
          
       addMouseMotionListener(new MouseMotionAdapter()
        {
           public void mouseDragged(MouseEvent e)
          {
             yPos = e.getY();
             repaint();

          }
        });


        g.drawImage(bw1.bauerweiß, bw1.xPos, yPos, 50, 50, this);

          

  }

}
```



Quellcode der Figur BauerWeiß:



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

class BauerWeiss1 extends JPanel
{

  public int xPos = 0;
  public int yPos = 300;
  private Schachbrett sb;
  Image bauerweiß = Toolkit.getDefaultToolkit().getImage( "BauerWeiß.gif");
   public void paintComponent(Graphics g)
   {
     super.paintComponent(g);

   }

   public int getxPos()
   {
     return xPos;
   }

   public int getyPos()
   {
     return yPos;
   }
   
   
}
```


----------



## LoN_Nemesis (6. Jan 2007)

An dem Code sind mehrere Sachen sehr schlecht.

1. Die paintComponent Methode ist (wie der Name schon sagt) nur dazu da um Dinge darzustellen. Du solltest dort keinesfalls so Sachen machen wie deine Figuren erstellen oder einen MouseListener adden. Das ergibt auch überhaupt keinen Sinn, denn es reicht völlig EINEN MouseListener zu pro Fenster zu haben.

2. Für jede Farb-/Figurenkombination eine eigene Klasse zu erstellen halte ich für umständlich. Besser: Erstelle eine abstrakte Klasse "Figur" von der alle konkreten Figuren dann erben. Außerdem würde ich Weiss oder Schwarz einfach als Attribut einer Figur definieren. Dann kommst du mit 8(+1 abstrakte) kleinen Klassen für die Figuren aus. BauerWeiss1 <-- Das sieht ja fast so aus, als wolltest du wirklich für jede einzelne Figur eine Klasse erstellen. BauerWeiss1-8?

3. Warum erbt BauerWeiss1 von JPanel? Eine Figur ist doch kein Panel.


----------



## DarkDragoon (18. Jan 2007)

tach, ich bin der Projekt Partner von DarkShadow. 
schon ma danke für die Hinweise aber kannst du uns sagen wie wir wie figuren am besten bewegen können?

Schon ma danke im vorraus


----------



## Marco13 (18. Jan 2007)

Eine Klasse für jede Figuren-Art (6 Stück), die alle von "Figur" (und NICHT von JPanel) erben ist OK. Dann habt ihr mehrere Objekte vom Typ "Figur" auf dem Spielfeld. Für jede Figur kennt ihr die X/Y Position, und vermutlich auch die Größe des Bildes, das diese Figur darstellt. Dann könnt ihr eurem Spielbrett einen MouseListener geben. Wenn die Maus gedrückt wird (mousePressed) schaut ihr, ob dabei eine Figur getroffen wurde (mit sowas wie figur[x].contains(mouseEvent.getPoint())). Falls ja, merkt ihr euch diese Figur. In der MouseDraged-Methode veschiebt ihr die Figur dann an die aktuelle Mausposition.


----------



## Guest (21. Jan 2007)

okay, danke für die antwort.

wir haben jetzt aber ein anderes problem und zwar das der die Klasse bauer nicht aufgerufen wird, wenn das er gezeichnet werden soll.


in dieser Klase wird das Schachbrett gezeichnet

```
import java.awt.*;
import javax.swing.*;


public class Schachbrett extends JPanel
{
	 private boolean schwarz;
	 private Bauer  bw1;
	 
	   public void paint(Graphics g)
	  {
	    super.paintComponent(g);
	    int anzahlhorizontal = 0;
	    int anzahlvertikal = 0;
	    int x = 0;
	    int y = 0;
	    schwarz = false;

	    //Schachbrettfelder abwechselnd erzeugen
	    while(anzahlvertikal <= 8)
	    {

	      while(anzahlhorizontal <= 4)
	      {
	        if(schwarz == false)
	        {
	          g.setColor(Color.WHITE);
	        }
	        else
	        {
	          g.setColor(Color.GRAY);
	        }
	        g.fillRect(x, y, 50, 50);
	        g.setColor(Color.GRAY);
	        g.drawRect(x, y, 50, 50);
	        if(schwarz == false)
	        {
	          g.setColor(Color.GRAY);
	        }
	        else
	        {
	          g.setColor(Color.white);
	        }

	        g.fillRect(x+50, y, 50, 50);
	        g.setColor(Color.GRAY);
	        g.drawRect(x+50, y, 50, 50);

	        anzahlhorizontal++;
	        x = x+100;
	      }
	      anzahlhorizontal = 0;
	      x = 0;
	      y = y+50;
	      anzahlvertikal++;
	      if(schwarz == false)
	      {
	        schwarz = true;
	      }
	      else
	      {
	        schwarz = false;
	      }
	    }
	    
	    //Figuren
	    System.out.print("bauer wird erstellt");
	    bw1 = new Bauer(0, 100, true, false);
	    
	  }
}
```


und dies ist die Klasse für den Bauern

```
import java.awt.*;

public class Bauer extends Figuren
{
	private int xPos;		
	private int yPos;
	private boolean weiß;	// farbe weiß oder nicht?
	private boolean weg;	// noch auf dem feld?
	private Image bw;
	
	
	public Bauer(int x, int y, boolean w, boolean we)
	{
		x = xPos;
		y = yPos;
		w = weiß;
		we = weg;
		
	}
		
		
	public void paint(Graphics g)
	{
		if(weiß == true)
		{
			System.out.print("weiß");
			bw = Toolkit.getDefaultToolkit().getImage( "BauerWeiß.gif");
			
		}
		else
		{
			System.out.println("schwarz");
			bw = Toolkit.getDefaultToolkit().getImage( "BauerSchwarz.gif");
		}
		g.drawImage(bw, xPos, yPos, null);
	}
}
```

ich hoffe ihr könnt uns helfen

MfG Darkdragoon


----------



## Marco13 (21. Jan 2007)

Im Moment wird der Bauer innerhalb der paint-Methode _erstellt_. Das sollte aber NICHT so sein. Gezeichnet wird er erstmal nirgendwo. 

Die Figuren sollten in einer "initialisierungs-Methode" erstellt werden. Je nachdem, welches Konzept ihr euch erarbeitet habe (FALLS ihr euch ein Konzept erarbeitet habt :wink: ) liegen die Figuren dann in einem eigenen Array, oder auf den einzelnen Feldern, oder beides. (Im Moment liegt der Bauer ja noch als eigene Variable im Spielbrett - davon solltet ihr Abstand nehmen). 

Die Paint-Methode des Spielbrettes ist ... hm ... also, die könnte man schöner schreiben.

Jedenfalls würde man in der Paint-Methode des Spielbrettes dann alle Figuren nacheinander zeichnen:

```
public class Schachbrett extends JPanel
{
    private Figuren figuren[]; // NUR EIN BEISPIEL!
   
    public void init()
    {
        ...
        figuren[x] = new Bauer(....); // Einmal während der Initialisierung erstellen....
    }


      public void paint(Graphics g)
      {
          ...
          for (int i=0; i<figuren.length; i++)  // Alle figuren malen
         { 
              figuren[i].paint(g);
          }
      }
...
```

Außerdem sollte das Bild für die Figuren auch NICHT in der paint-Methode der Figuren geladen werden, sondern am besten im Konstruktor. Wenn man bei jedem Neuzeichnen das Bild neu lädt, wird's grottenlangsam...


----------



## Micha_S (22. Jan 2007)

Anonymous hat gesagt.:
			
		

> ```
> public Bauer(int x, int y, boolean w, boolean we)
> {
> x = xPos;
> ...



Ich könnte wetten, dass das so rum soll:

```
public Bauer(int x, int y, boolean w)
	{
		xPos = x;
		yPos = y;
		weiß = w;
		weg = false;
	}
```
Und das weg könnt ihr direkt, ohne Parameter mit false belgen,
weil es keinen Sinn macht einen Bauern zu erstellen der schon "weg" sein könnte. :wink:


----------



## DarkDragoon (22. Jan 2007)

Danke für die Hinweise^^


wenn ich das mit dem array versuche mekert er bei dem figuren_.paint(g); rum, also nicht im compiler sondern beim ausführen und die paint methode in der abstrakten klasse Figuren enthält ja auch nichts. woher soll er denn dann wisen was er zeichnen soll? sorry wenns ne dumme frage ist aber wir haben noch nie vorher mit abstrakten klassen gearbeitet.

MfG DarkDragoon_


----------



## Marco13 (22. Jan 2007)

Naja, das ist ja der Trick (Suchmaschinen-Stichwort: "Polymorphie" / "Polymorphism" - klingt komplizierter, als es ist)

In der abstrakten Klasse "Figur" wird die abstrakte Methode "paint" definiert. 
Dann leitete man davon konkrete Klassen ab.
In der Klasse "Bauer" malt "paint" einen Bauer.
In der Klasse "Ritter" malt "paint" einen Ritter.
In der Klasse "Turm" malt "paint" einen Turm.

In dem Array liegen nur "Figur"en. Egal, WAS für eine Figur das ist: Auf JEDER Figur kann man "paint" aufrufen, und sie weiß, wie sie sich selbst zu zeichnen hat.

Kurz: Es sollte funktionieren. Poste evtl. mal die relevanten Code-Stellen.


----------



## DarkDragoon (22. Jan 2007)

okay 

hier ist die klasse bauer


```
import java.awt.*;

public class Bauer extends Figuren
{
	private int xPos;		
	private int yPos;
	private boolean weiß;	// farbe weiß oder nicht?
	private boolean weg;	// noch auf dem feld?
	private Image bw = Toolkit.getDefaultToolkit().getImage( "BauerWeiß.gif");	

	
	public Bauer(int x, int y, boolean w)
	{
		xPos = x;
		yPos = y;
		weiß = w;
		weg = false;
		
	}
		
		
	public void paint(Graphics g)
	{

		g.drawImage(bw, xPos, yPos, null);
	}
}
```

und hier die Schachbrett Klasse


```
import java.awt.*;
import javax.swing.*;


public class Schachbrett extends JPanel
{
	 private boolean schwarz;
	 private Figuren figuren[] = new Figuren[0];
	 
	 public void init()
	 {
		 figuren[0] = new Bauer(200, 200, false);
	 }
	 
	   public void paint(Graphics g)
	  {
        ...
	    for(int i = 0; i < figuren.length; i++)
	    {
	    	figuren[i].paint(g);
	    }
	  }
}
```


----------



## Micha_S (22. Jan 2007)

DarkDragoon hat gesagt.:
			
		

> ```
> private Figuren figuren[] = new Figuren[0];
> 
> public void init()
> ...



Solltest du hier nicht eine ArrayOutOfBounds Exception bekommen?
Du erstellst ein Array mit 0 Elementen und versuchts dann auf das erste zuzugreifen...


```
private Figuren figuren[] = new Figuren[1];
	 
	 public void init()
	 {
		 figuren[0] = new Bauer(200, 200, false);
	 }
```
So müsste das eigentlich gehen


----------



## DarkDragoon (23. Jan 2007)

geht trotzdem net. jedesmal wenn ich das schachfeld zeichnen lassen will, bekomme ich diese fehlermeldung 


Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at Schachbrett.paint(Schachbrett.java:74)
	at javax.swing.JComponent.paintChildren(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JComponent.paintChildren(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JComponent.paintChildren(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JLayeredPane.paint(Unknown Source)
	at javax.swing.JComponent.paintChildren(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JComponent.paintWithOffscreenBuffer(Unknown Source)
	at javax.swing.JComponent.paintDoubleBuffered(Unknown Source)
	at javax.swing.JComponent._paintImmediately(Unknown Source)
	at javax.swing.JComponent.paintImmediately(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
	at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

PS: in zeile 74 wird die figur gemalt


----------



## Leroy42 (23. Jan 2007)

DarkDragoon hat gesagt.:
			
		

> geht trotzdem net. jedesmal wenn ich das schachfeld zeichnen lassen will, bekomme ich diese fehlermeldung
> 
> 
> Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
> ...





Und was steht in Zeile 74 (und drum herum?)


----------



## DarkDragoon (23. Jan 2007)

das


```
public void paint(Graphics g)
     {
        ...
       for(int i = 0; i < figuren.length; i++)
       {
          figuren[i].paint(g);
       }
     }
```

der rest des quelltextes steht oben, es ist die Schachbrett Klasse


----------



## Leroy42 (23. Jan 2007)

Na dann kann ja eine NullPointerException nur dann
auftreten, wenn entweder figuren selbst null ist
oder einer Arraykomponenten figuren


----------



## Marco13 (23. Jan 2007)

Code?

```
import java.awt.*;
import javax.swing.*;




public class Schachbrett extends JPanel
{
    public static void main(String args[])
    {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Schachbrett s = new Schachbrett();
        s.init();
        f.getContentPane().add(s);
        f.setSize(300,300);
        f.setVisible(true);
    }


    private Figuren figuren[] = new Figuren[1];

    public void init()
    {
       figuren[0] = new Bauer(200, 200, false);
    }

    private boolean schwarz;

      public void paint(Graphics g)
     {
       super.paintComponent(g);
       int anzahlhorizontal = 0;
       int anzahlvertikal = 0;
       int x = 0;
       int y = 0;
       schwarz = false;

       //Schachbrettfelder abwechselnd erzeugen
       while(anzahlvertikal <= 8)
       {

         while(anzahlhorizontal <= 4)
         {
           if(schwarz == false)
           {
             g.setColor(Color.WHITE);
           }
           else
           {
             g.setColor(Color.GRAY);
           }
           g.fillRect(x, y, 50, 50);
           g.setColor(Color.GRAY);
           g.drawRect(x, y, 50, 50);
           if(schwarz == false)
           {
             g.setColor(Color.GRAY);
           }
           else
           {
             g.setColor(Color.white);
           }

           g.fillRect(x+50, y, 50, 50);
           g.setColor(Color.GRAY);
           g.drawRect(x+50, y, 50, 50);

           anzahlhorizontal++;
           x = x+100;
         }
         anzahlhorizontal = 0;
         x = 0;
         y = y+50;
         anzahlvertikal++;
         if(schwarz == false)
         {
           schwarz = true;
         }
         else
         {
           schwarz = false;
         }
       }


       for(int i = 0; i < figuren.length; i++)
       {
          figuren[i].paint(g);
       }

     }
}

abstract class Figuren
{
    abstract public void paint(Graphics g);
}

class Bauer extends Figuren
{
   private int xPos;
   private int yPos;
   private boolean weiß;   // farbe weiß oder nicht?
   private boolean weg;   // noch auf dem feld?
   private Image bw;


   public Bauer(int x, int y, boolean w)
   {
      xPos = x;
      yPos = y;
      weiß = w;
   }


   public void paint(Graphics g)
   {
       g.setColor(Color.red);
       g.drawString("Bauer",xPos,yPos);

      //g.drawImage(bw, xPos, yPos, null);
   }
}
```


----------



## Guest (23. Jan 2007)

ich hab den fehler nun, hab vergessen die init() methode aufzurufen    

allerdings wird zwar jetzt das programm gestartet aber der Bauer wird nicht gezeichnet

hier nochma der code für die Bauer Klasse


```
import java.awt.*;

public class Bauer extends Figuren
{
	private int xPos;
	private int yPos;
	private boolean weiß;
	private boolean weg;
	private Image bw = Toolkit.getDefaultToolkit().getImage( "BauerWeiß.gif");	

	
	public Bauer(int x, int y, boolean w)
	{
		xPos = x;
		yPos = y;
		weiß = w;
		weg = false;
	}
		
		
	public void paint(Graphics g)
	{
		g.setColor(Color.red);
		g.drawString("Bauer", xPos, yPos);
		
		g.drawImage(bw, xPos, yPos, null);
	}
}
```

der String wird aber gezeichnet, aber bei mir wird das Image gar nicht geladen denk ich ma. 

die schachbrettklasse is gleich geblieben
und da alles wir von der SchachGUI Klasse aus gestartet, wo auch das menü etc ist.


----------



## Micha_S (23. Jan 2007)

Wenn mich nicht alles täuscht müsst ihr der drawImage() Methode noch einen ImageObserver 
anstatt des null mitgeben. Das wäre in eurem Fall das JPanel.


----------



## Marco13 (24. Jan 2007)

Bin grad nicht 100% sicher, aber ich glaube, einen ImageObserver braucht man glaubich nicht unbedingt - allerdings muß dann irgendwie sichergestellt sein, dass das Bild vollständig geladen ist. Du solltest das Bild vmtl. im Konstruktor laden, und einen (Websuch-Stichwort: ) _MediaTracker_ drumwickeln.


----------



## Leroy42 (24. Jan 2007)

Marco13 hat gesagt.:
			
		

> _MediaTracker_ drumwickeln.



Kam mir auch in den Sinn. Aber da ich _noch_ unsicherer als Marco13 war,
habe ich mich lieber zurückgehalten.


----------



## DarkDragoon (25. Jan 2007)

super das mt den figuren klappt jetzt wunderbar  .
es lag am fehlenden MediaTracker. 

Aber jetzt haben wir ein neues problem(jaja ich weiß wir nerven^^) nämlich das weshalb dieser Thread aufgemacht wurde, das bewegen der Figuren. wir haben es so verucht wie ihr es uns gesagt habt aber er findet contains nicht. 

also noch mal der code^^


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


public class Schachbrett extends JPanel
{
   private boolean schwarz;
   private Figuren figuren[] = new Figuren[32];
   
   public Schachbrett()
   {
     addMouseListener(new MouseAdapter()
     {
      public void mousePressed(MouseEvent e)
      {
         for(int i = 0; i < figuren.length; i++)
         {
           figuren[i].contains(e.getPoint()) ;
         }
      }
     });
     addMouseMotionListener(new MouseMotionAdapter()
     {

      public void mouseDragged(MouseEvent e)
      {

      }
     });
   }
   
   public void init()
   {
     figuren[0] = new Bauer(5, 305, true);
     figuren[1] = new Bauer(55, 305, true);
     figuren[2] = new Bauer(105, 305, true);
     figuren[3] = new Bauer(155, 305, true);
     figuren[4] = new Bauer(205, 305, true);
     figuren[5] = new Bauer(255, 305, true);
     figuren[6] = new Bauer(305, 305, true);
     figuren[7] = new Bauer(355, 305, true);
     figuren[8] = new Turm(5, 355, true);
     figuren[9] = new Pferd(55, 355, true);
     figuren[10] = new Laeufer(105, 355, true);
     figuren[11] = new Dame(155, 355, true);
     figuren[12] = new Koenig(205, 355, true);
     figuren[13] = new Laeufer(255, 355, true);
     figuren[14] = new Pferd(305, 355, true);
     figuren[15] = new Turm(355, 355, true);
     figuren[16] = new Bauer(5, 55, false);
     figuren[17] = new Bauer(55, 55, false);
     figuren[18] = new Bauer(105, 55, false);
     figuren[19] = new Bauer(155, 55, false);
     figuren[20] = new Bauer(205, 55, false);
     figuren[21] = new Bauer(255, 55, false);
     figuren[22] = new Bauer(305, 55, false);
     figuren[23] = new Bauer(355, 55, false);
     figuren[24] = new Turm(5, 5, false);
     figuren[25] = new Pferd(55, 5, false);
     figuren[26] = new Laeufer(105, 5, false);
     figuren[27] = new Dame(155, 5, false);
     figuren[28] = new Koenig(205, 5, false);
     figuren[29] = new Laeufer(255, 5, false);
     figuren[30] = new Pferd(305, 5, false);
     figuren[31] = new Turm(355, 5, false);
   }
   
     public void paint(Graphics g)
    {
      super.paintComponent(g);
      int anzahlhorizontal = 0;
      int anzahlvertikal = 0;
      int x = 0;
      int y = 0;
      schwarz = false;

      //Schachbrettfelder abwechselnd erzeugen
      while(anzahlvertikal <= 8)
      {

        while(anzahlhorizontal <= 4)
        {
          if(schwarz == false)
          {
            g.setColor(Color.WHITE);
          }
          else
          {
            g.setColor(Color.GRAY);
          }
          g.fillRect(x, y, 50, 50);
          g.setColor(Color.GRAY);
          g.drawRect(x, y, 50, 50);
          if(schwarz == false)
          {
            g.setColor(Color.GRAY);
          }
          else
          {
            g.setColor(Color.white);
          }

          g.fillRect(x+50, y, 50, 50);
          g.setColor(Color.GRAY);
          g.drawRect(x+50, y, 50, 50);

          anzahlhorizontal++;
          x = x+100;
        }
        anzahlhorizontal = 0;
        x = 0;
        y = y+50;
        anzahlvertikal++;
        if(schwarz == false)
        {
          schwarz = true;
        }
        else
        {
          schwarz = false;
        }
      }
      for(int i = 0; i < figuren.length; i++)
      {
        figuren[i].paint(g);
      }
    }
    


}
```


un hier die fehlermeldung: 
No accessible method with signature "contains(java.awt.Point)" was found in type "Figuren".


könnt ihr uns ein weiteres mal helfen ? ^^'


----------



## Marco13 (25. Jan 2007)

Die Methode "contains" kann direkt in die "Figuren"-Klasse. Sinngemäß (!) sowas wie

```
public boolean contains(Point p)
{
    Rectangle r = new Rectangle(posX, posY, sizeX, sizeY);
    return r.contains(p);
}
```
(geht halt auch schöner und effizienter)


----------

