# Farbe ändern bei der paint-Methode



## Scratchy (23. Jun 2014)

Hallo,

ich wollte ein JFrame zeichnen, was ein bewegenden Punkt zeigt. Dieser Punkt soll nach einer bestimmten Koordinate die Farbe ändern. Leider weiß ich nicht, wie man von einer anderen Methode auf die paint-Methode zugreift bzw. ob die überhaupt möglich ist.

Danke für eure Hilfe



Hier der Code

```
package gui;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Punkte_Test extends JPanel{

	private JFrame f;
	static int x = 10;
	static int y = 10;
	
	public Punkte_Test() {
		f = new JFrame("Bewegung");
		f.setSize(500,500);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.add(this);
		f.setBackground(Color.white);
		f.setVisible(true);
		Funtion();
	}
	

	private void Funtion() {
				try {
					while(x < 300){
						x = x + 5;
						if(x > 20){
							g.setColor(Color.red); // <-- Hier liegt das Problem
							f.repaint();
						}else{
							f.repaint();
						}
						Thread.sleep(500);
					}
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				
	}


	public void paint(Graphics g){
		g.setColor(Color.blue);
		g.drawLine(x+5,y,x,y);
		
	}
	
	
	
	public static void main(String[] args)  {
		new Punkte_Test();
	}


}
```


----------



## Gucky (23. Jun 2014)

Irgendwie machst du es, dass die ändernde Methode an die Graphics Variable ran kommt und von da setzt du die Farbe mit g.setColor(Color) auf irgendwas.


----------



## kaoZ (24. Jun 2014)

du schreibst z.B eine Methode die als Parameter ein Graphics Object und ggf. die Koordinaten erwartet und als Rückgabewert eine neue Farbe hat, und übergibst dies dann in der paint Methode an deine neu erstellte Methode, in welcher dann z.B geprüft wird ob eine Bedingung eintritt und eine dementsprechende Farbe zurückliefert mit welcher dann weiter gezeichnet werden soll

da du in Java nur passiv zeichnest würde ich es vermeiden aktiv eine neue Methode zu nutzen die über getGraphics() an das Graphics Object kommt.. das ist nämlich äußert unschön.

Dazu gibt es hier in einem der Blogs ( von Turtle wenn mich nicht alles täuscht ) einen eintrag.


----------



## turtle (24. Jun 2014)

Ich verstehe es nicht.

Was spricht gegen?

```
public void paint(Graphics g) {
	g.setColor(Color.blue);
	if (x > 200) {
	    g.setColor(Color.red);
	}
	g.drawRect(x, y, 15, 15);
    }
```


----------



## kaoZ (24. Jun 2014)

Das ist eine gute Frage 

Die allerdings nur der To beantworten kann ^^

Ich habe mich lediglich am Vorpost orientiert , muss ich zugeben .....


----------



## Decline (24. Jun 2014)

Wenn du mit Swing arbeitest solltest du (fast) immer die Methode paintComponent() überschreiben und nicht paint() wenn du nur Dinge auf die Komponente zeichnen willst undn icht mehr machen willst.
paint() macht mehr als nur die Komponente zu zeichnen (Achtung: wenn du mit AWT Elementen arbeitest gilt das nicht, den genauen Unterschied weiß ich gerade nicht ohne nachzulesen.)

Auserdem solltest du generell super.paintComponent(g) aufrufen, es sei den du möchtest dies aus irgend einem grund nicht tun.

mehr informationen falls es dich interssiert:
Painting in AWT and Swing


----------

