viele Kreise zeichnen

Ist das dein ganzer Code?
Ich denke mal, das ohne einen Aufruf von "paint(java.awt.Graphics g)" nie etwas gezeichnet wird.

Gruss Ben
 
Eine Methode wird nicht aufgerufen, dadruch dass du sie geschrieben hast, sondern erst durch seinen Aufruf. Meintest du das so:
Code:
import java.awt.*;
import java.applet.*;
import java.awt.Graphics;

public class vieleKreise2 extends java.applet.Applet
{	
	public static void main(String[] args) 
	{
		int kr = 50;
                Graphics g;
    	        Kreis[] kreis = new Kreis[kr];
		for(int i=0; i<kr; i++)
                {
    	            kreis[i] = new Kreis(100,100,50);
                    kreis[i].zeichne(g);                    
                }

        }
  
	//System.out.println(Kreis.kreisZaehler+"Kreisobjekte erzeugt");	
}

Jetzt brauchst du nur noch eine zeichne Methode;)
 
Lest euch doch zumindest den ganzen Thread durch. Die Methode zeichne gibt es in der Klasse Kreis und die funktioniert auch soweit.

So zu deinem Problem gomagu50: kreis ist jetzt kein Objekt mehr von der Klasse Kreis sondern ist ein Array, enthält also viele Kreise. Damit du dieses Array auch noch in deiner paint-Methode benutzen kannst musst du es noch als Feld deklarieren:

Java:
public class vieleKreise2 extends java.applet.Applet
{	
        Kreis[] kreis;
	public static void main(String[] args) 
	{
		int kr = 50;
    	        kreis = new Kreis[kr];
		for(int i=0; i<kr; i++)
                {
    	            kreis[i] = new Kreis(100,100,50);
                }
	}
....
}

In deiner paint Methode nimmst du nun wieder eine Schleife um alle Objekte aus dem Array durchzugehen. Da du hier die Zahl nicht mehr hast die angibt wieviele Objekte in deinem Array sind kannst du stattdessen kreis.length benutzen:

Java:
public void paint (java.awt.Graphics g) 
	{
               for(int i=0; i<kreis.length; i++){
			kreis[i].zeichne(g);
               }
	}
 
Lest euch doch zumindest den ganzen Thread durch. Die Methode zeichne gibt es in der Klasse Kreis und die funktioniert auch soweit.

Ich Habe nie etwas gegenteiliges behauptet.

In deiner paint Methode nimmst du nun wieder eine Schleife um alle Objekte aus dem Array durchzugehen. Da du hier die Zahl nicht mehr hast die angibt wieviele Objekte in deinem Array sind kannst du stattdessen kreis.length benutzen:

Code:
public void paint (java.awt.Graphics g)
{
    for(int i=0; i<kreis.length; i++){
        kreis[i].zeichne(g);
    }
}

@zeja: Dennoch wird in seinem Code kein einziges mal die Methoder "paint" aufgerufen.
Ich bin zwar kein Profi in Java, aber so wird er immer noch keine Kreise sehen, außer die Methode wird implizit irgendwo aufgerufen!

Gruß Ben
 
Ich Habe nie etwas gegenteiliges behauptet.

Sorry, es hätte du mit Bezug auf Tobias heissen sollen :)

@zeja: Dennoch wird in seinem Code kein einziges mal die Methoder "paint" aufgerufen.
Ich bin zwar kein Profi in Java, aber so wird er immer noch keine Kreise sehen, außer die Methode wird implizit irgendwo aufgerufen!

Nun dann lass dir sagen dass Applet von Container ableitet und Container die Methode Paint besitzt die bei der Anzeige des Containers aufgerufen wird um dessen Inhalt darzustellen. Diese Methode ist nun überschrieben um die Kreise zu zeichnen.

Man muss nicht jede Methode in Java explizit selber aufrufen..

Sprich: Wenn du nicht so viel Ahnung von Java hast dann probiere den Sourcecode doch zumindest einmal aus bevor du einen Kommentar abgibst, denn dann hättest du gesehen dass dieser funktioniert. Das ist nicht böse gemeint, jedoch würde es halt Verwirrung in einem Thread vermeiden.

@gomagu50: Darauf angesprochen fällt mir ein dass du statt paint() besser paintComponents() nutzen solltest damit der eigentliche Container auch noch eine Chance hat sich zu zeichnen.
 
@zeja: tut mir ja leid, aber ich dachte, ich wäre am Anfang des Themas^^
Manchmal vergess ich eben, dass gleich zur neusten Antwort gesprungen wird... War eben ganz überrascht, dass das Thema schon mehr Einträge hat als ich dachte;)
 
Nun dann lass dir sagen dass Applet von Container ableitet und Container die Methode Paint besitzt die bei der Anzeige des Containers aufgerufen wird um dessen Inhalt darzustellen. Diese Methode ist nun überschrieben um die Kreise zu zeichnen.

Man muss nicht jede Methode in Java explizit selber aufrufen..

Sprich: Wenn du nicht so viel Ahnung von Java hast dann probiere den Sourcecode doch zumindest einmal aus bevor du einen Kommentar abgibst, denn dann hättest du gesehen dass dieser funktioniert. Das ist nicht böse gemeint, jedoch würde es halt Verwirrung in einem Thread vermeiden.

Dachte mir so etwas schon fast, hab hier neben mir sogar ein Buch liegen :)rtfm: sollte man meinen) in dem Java-Applets beschrieben sind war aber etwas zu faul das ganze auszuprobieren oder nachzuschlagen.:rolleyes: In diesem Sinne tut mir das ganze auch etwas Leid, war unqualifiziert von mir. Das nächste mal probiere ich das ganze erst aus, bevor ich Vermutungen anstelle.

Gruss Ben
 
Hallo zeja, erst einmal danke für Deine Nachrchten.Ich habe die Codes so geschreiben, wie Du.

Code:
import java.awt.*;
import java.applet.*;
import java.awt.Graphics;

public class vieleKreise2 extends java.applet.Applet
{	
		Kreis[] kreis;
	public static void main(String[] args) 
	{
		int kr = 50;
    	         kreis = new Kreis[kr];
		for(int i=0; i<kr; i++)
                {
    	          kreis[i] = new Kreis(100,100,50);
                }
    }	
	public void paintComponents (java.awt.Graphics g) 
	{
		for(int i=0; i<kreis.length; i++)
		{	
			kreis[i].zeichne(g);
		}
	}
}



Beim Compilieren meldet mein Compiler dann aber folgende Fehler:
Code:
C:\ Java Beispiele2\vieleKreise2.java:11: non-static variable kreis cannot be referenced from a static context 
    	         kreis = new Kreis[kr]; 
    	         ^
C:\ Java Beispiele2\vieleKreise2.java:14: non-static variable kreis cannot be referenced from a static context 
    	           kreis[i] = new Kreis(100,100,50); 
    	            ^ 
2  errors
Ich weiß eifach nicht mehr weiter. Was mache ich denn hier schon wieder falsch?

Viele Grüße
gomagu50 :confused:
 
Hallo,

ich habe den Code etwas verändert, so dass ich jetzt keine Fehlermeldung mehr vom
Compiler erhalte, aber die Kreise zeichnet er nach wie vor nicht, warum

Code:
import java.awt.*;
import java.applet.*;
import java.awt.Graphics;

public class vieleKreise2 extends java.applet.Applet
{	
		Kreis[] kreis;
	public static void main(String[] args) 
	{
		int kr = 50;
    	Kreis[] kreis = new Kreis[kr];
		for(int i=0; i<kr; i++)
                {
    	            kreis[i] = new Kreis(100,100,50);
                }
    }	
	public void paint (java.awt.Graphics g) 
	{
		for(int i=0; i<kreis.length; i++)
		{	
			kreis[i].zeichne(g);
			}
}
}

Vielleicht habt Ihr ja eine Idee, was ich falsch mache.

Viele Grüße und Danke schon mal für Eure Hilfe
gomagu50:confused:
 
Der code im vorletzten Post war schon okay.

Die main ist eine statische Methode (static) also keine die eine direkte Verbindung zum Objekt der Klasse hat (denn das existiert ja auch noch nicht wenn man in der main ist).

Aus diesem Grund können keine normalen Felder der Klasse benutzt werden, da diese erst existieren wenn ein Objekt existiert (und nur über das Objekt aufgerufen werden können). Somit ist es nötig Felder die von der main benutzt werden auch als statisch zu markieren.

Also
Java:
static Kreis[] kreis;

Dann sollte es klappen.

Ich denke du solltest noch sehr viel durchlesen z.B in "Java ist auch eine Insel". Leider erfordert das erlernen einer Sprache auch sehr viel Eigeninitiative und man muss einiges lesen ;)
 
Zurück