# Farbe ändern bei Klick auf einen Kreis



## Guest (11. Okt 2007)

Hallo,

ich habe folgendes Testszenario kreiert, bei dem ich auf einen Kreis klicken möchte der dann die Farbe wechseln soll. Gibt es eine Möglichkeit dieses zu handhaben, in meinem Szenario mit dem Shape Rectangle2D?

Hier die entsprechende Klasse mit meine Auserarbeitung:

```
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;

import javax.swing.*;

public class TestFenster extends JComponent implements MouseListener {

	Rectangle2D rect, rect1;

	Shape[] rects = { rect = new Rectangle2D.Double(10, 10, 100, 100),
			rect1 = new Rectangle2D.Double(200, 10, 100, 100), };

	public TestFenster() {
	}

	public void paint(Graphics g) {

		Graphics2D g2D = (Graphics2D) g;

		for (int i = 0; i < rects.length; i++) {
			g2D.setColor(Color.YELLOW);
			g2D.fill(rects[i]);
		}
		addMouseListener((MouseListener) this);
	}

	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		paint(g);
	}

	public void mousePressed(MouseEvent e) {
		int x = e.getX();
		int y = e.getY();
		if (rects[0].contains(x, y)) {
			System.out.println("test1" + x);
			System.out.println("test1" + y);
		}

	}

	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub

	}

}
```


Danke fuer eventuelle Unterstützung.

Grüsse


----------



## SlaterB (11. Okt 2007)

klappt denn das 
 System.out.println("test1" + x); 
         System.out.println("test1" + y); 
schon?

setze an dieser Stelle eine Exemplarvariable auf die gewünschte Farbe,
rufe repaint() auf,
und in paint verwendest du keine feste Farbe, sondern die aus der Exemplarvariable


----------



## granini (11. Okt 2007)

Hi,

Danke fuer die schnelle Antwort. Die Koordinaten des Kreisen werden mir bei Mouseklick ausgegeben. Nur habe ich bei den Shapes keine Methode um die Farbe in der if-Abfrage direkt zu wechseln.

Und bei dem Vorschlag habe ich irgendwie noch ein Verständnisproblem, wie ich dann die exemplar-Variable in der Methode mousePressed übergebe..?

So, habe ich das erstmal verstanden:



```
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;

import javax.swing.*;

public class TestFenster extends JComponent implements MouseListener {

	Rectangle2D rect, rect1;

	Shape[] rects = { rect = new Rectangle2D.Double(10, 10, 100, 100),
			rect1 = new Rectangle2D.Double(200, 10, 100, 100), };
	
	Color exemplar = Color.yellow;
	
	public TestFenster() {
	}

	public void paint(Graphics g) {

		Graphics2D g2D = (Graphics2D) g;

		for (int i = 0; i < rects.length; i++) {
			g2D.setColor(exemplar);
			g2D.fill(rects[i]);
		}
		addMouseListener((MouseListener) this);
	}

	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		paint(g);
	}

	public void mousePressed(MouseEvent e) {
		int x = e.getX();
		int y = e.getY();
		if (rects[0].contains(x, y)) {
			Color exemplar = Color.green;
			repaint();
			System.out.println("test1" + x);
			System.out.println("test1" + y);
		}

	}

	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub

	}

}
```


----------



## SlaterB (11. Okt 2007)

> Color exemplar = Color.green; 

damit erzeugst du nur eine lokale Variable, schreibe
exemplar = Color.green; 
dann wird die Exemplarvariable exemplar (nenne sie 'color') geändert und beim nächsten paint wird diese grüne Farbe verwendet


----------



## granini (11. Okt 2007)

Ja, klar.. Danke dir..

Hmm, aber der übermalt natürlich dann beide Rechtecke.. Sprich müsste ich für jedes Rechteck in meinem Array eine eigene Exemplarvariable generieren, und entsprechend überschreiben, richtig?


----------



## SlaterB (11. Okt 2007)

zwei Variablen wären schlecht zu handeln, 
du hast ein Array der Sapes, also brauchst du ein passendes Color-Array,

die Krönung wäre eine eigene Klasse MyShape
mit Exemplarvariable Shape, Color und was immer noch dazukommt,

dann brauchst du nur ein Array, hast zusammen was zusammengehört


----------

