# Draw Package - mehere Fenster will aber nur eins



## Sparkay (14. Feb 2015)

Hallo!

Mein Plan:
Eine zentrale Klasse, in meinem Fall "object", "gameobject" wäre wahrscheinlich besser, doch mir zulange.

Von dieser Klasse habe ich mir nun eine Klasse Paddle und eine Klasse Box abgeleitet, außerdem soll eine Klasse Ball von der zentralen Klasse abgeleitet werden.
Der Grund weshalb ich "so viele" Klassen erstelle ist, dass ich der Theorie nach bin, dass ich erstens die Kollision einfacher behandeln kann und auch einfacher Sachen hinzufügen kann.

Zu meinem Code, ich habe das Draw Package benutzt, recht nettes und vergleichsweise einfach zu benutzendes Package. Eine Instanz erstellen und los geht es. Listener-Schnittstellen kann ich da auch benutzen.

Hier ist de Code, hoffentlich auch die Java Tags richtig benutzt 

```
public class object 
{
	Draw a=new Draw();
	double x,y;
	public object(double x, double y)
	{
		this.x=x;
		this.y=y;
	}
}

class paddle extends object implements DrawListener
{
	private double h_width,h_height;

	public paddle(double x, double y, double h_width, double h_height)
	{
		super(x,y);
		a.addListener(this);
		this.h_height	=h_height;
		this.h_width	=h_width;

		a.clear(Draw.GRAY);
		a.filledRectangle(x,y,h_width,h_height);
	}


	public void keyTyped(char c)
    {
    	
    	if 		(c=='a' && x>0) x=x-0.02;
    	else if (c=='d' && x<1) x=x+0.02;

    	this.a.clear(Draw.GRAY);
		this.a.filledRectangle(x,y,h_width,h_height);
	}


	public void mousePressed (double x, double y)	{ }
	public void mouseDragged (double x, double y)	{ }
	public void mouseReleased(double x, double y)	{ }

}

class box extends object
{

	double radi;

	public box(double x, double y, double radi)
	{
		super(x,y);
		this.radi=radi;	
		this.a.filledSquare(x,y,radi);	
	}
}
```

Dann benutze ich noch eine andere class über die ich den ganzen  Krims Krams teste und ausführe.
Hier einmal der Inhalt dieser Datei.


```
public class objectTest
{
	public static void main(String[]args)
	{
		Draw a=new Draw();
		double x		=0.5;
		double y		=0.05;
		double h_width	=0.05;
		double h_height =0.01;
		paddle c=new paddle(x,y,h_width, h_height,a);

		double x_start	=0.15;
		double y_start	=0.45;
		box s=new box(x_start,y_start,0.1,a);
	}
}
```

Entschuldigung für die nichtallzugut formatierten Stellen in Sublime Text 2 sieht es besser aus :/

*Was erwarte ich jetzt?*
Das alles in einem Fenster erstellt wird.

*Was geschieht?*
Alles bekommt sein eigenes Fenster.

*Zu den Fachwörtern:*
Kann ich hier sagen, dass jedes Fenster eine Instanz meiner Klasse Draw ist/sind?

Danke sehr für hilfreiche Beiträge


----------



## Harry Kane (15. Feb 2015)

Sparkay hat gesagt.:


> Eine zentrale Klasse, in meinem Fall "object", "gameobject" wäre wahrscheinlich besser, doch mir zulange.


Das ist am ganze falschen Ende Zeit und Tipparbeit gespart. Benenne NIE eigene Klassen so wie Java Standardklassen. Und beachte bitte die Java Namenskonventionen: Klassen werden groß geschrieben.




Sparkay hat gesagt.:


> *Zu den Fachwörtern:*
> Kann ich hier sagen, dass jedes Fenster eine Instanz meiner Klasse Draw ist/sind?


Die richtige Antwort ist: hat.
Jedes deiner Objekte *hat *eine eigene Instanz von Draw(). Da jede Instanz von Draw auch eine eigene Instanz eines JFrame verwaltet (wie eine Suche nach "java draw package", checken der Treffer, danm Blick in den source code von Draw.java auf dieser Seite: Standard Libraries. Wenn du beim nächsten Mal Bezug auf eine nicht-Standard-Java-Klasse nimmst, sage uns bitte genau, worum es sich handelt), hat jedes Objekt ein eigenes Fenster.
Lösung? KA. So wie es aussieht, zeichnet die Draw-Klasse das ganze Zeug in eine BufferedImage. Wenn du eine Draw-Instanz für alle Objekte verwendest, und möchtest eine Objekt verschwinden lassen, um es neu zu zeichnen, sollten alle Objekte verschwinden, und du müsstest sie alle neu zeichnen. Ich glaube nicht, daß das Draw-Package für deine Zwecke gut geeignet ist.


----------

