wie durch klicken regeln dass nächster "case" auge

Status
Nicht offen für weitere Antworten.

Aurora

Mitglied
es sollten eigentlich pro klicken mit der maus die striche gezeichnet werde, aber es wird immer gleich alles gezeichnet und dann nichts mehr, wenn man das Fenster eine weile verdeckt hat.
Hier der Code:


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

public class Nikolaus1 extends Applet
 { 
	int i = 1;
   public void paint(Graphics g)
    { 
	   i++;
	   Color rot = new Color(255, 0, 0);
	   	g.setColor(rot);
	   switch(i) {
	   	case 1:
	   		g.drawLine(0,100,0,200);
	   	case 2:
		    g.drawLine(0,100,0,200);
		    g.drawLine(0,100,100,100);
	   	case 3:
	   		g.drawLine(0,100,0,200);
	 	    g.drawLine(0,100,100,100);
	 	    g.drawLine(0,100,100,200);
	   	case 4:
	   		g.drawLine(0,100,0,200);
	   		g.drawLine(0,100,100,100);
	   		g.drawLine(0,100,100,200);
	   		g.drawLine(0,200,100,200);
	   	case 5:
	   		g.drawLine(0,100,0,200);
	   		g.drawLine(0,100,100,100);
	 	   	g.drawLine(0,100,100,200);
	 	   	g.drawLine(0,200,100,200);
	 	   	g.drawLine(100,100,100,200);
	   	case 6:
	   		g.drawLine(0,100,0,200);
	   		g.drawLine(0,100,100,100);
	 	   	g.drawLine(0,100,100,200);
	 	   	g.drawLine(0,200,100,200);
	 	   	g.drawLine(100,100,100,200);
	   		g.drawLine(0,200,100,100);
	   	case 7:
	   		g.drawLine(0,100,0,200);
	   		g.drawLine(0,100,100,100);
	 	   	g.drawLine(0,100,100,200);
	 	   	g.drawLine(0,200,100,200);
	 	   	g.drawLine(100,100,100,200);
	   		g.drawLine(0,200,100,100);
	   		g.drawLine(0,100,50,0);
	   	case 8:
	   		g.drawLine(0,100,0,200);
	   		g.drawLine(0,100,100,100);
	 	   	g.drawLine(0,100,100,200);
	 	   	g.drawLine(0,200,100,200);
	 	   	g.drawLine(100,100,100,200);
	   		g.drawLine(0,200,100,100);
	   		g.drawLine(0,100,50,0);
		 	g.drawLine(50,0,100,100);		 	
	   }
	   
    }
   

  
   
 }

wie geht das, dass es durch das klicken weiter gezeichnet wird? (Bin blutiger Anfänger)
 
wie oft soll man es noch sagen?:
das Klicken hat mit dem paint nichts zu tun, es kann 10x gepaintet werden ohne dass irgendjemand klickt,

in den anderen Topic ist wunderbar erklärt, wie man auf einen Mausklick reagiert
und außerdem noch, wie man das Zeichnen einfach und sauber gestaltet

> Color rot = new Color(255, 0, 0);

Rot gibts schon:
Color rot = Color.RED;
 
oh stimmt,
und wenn i 9 ist, dann i auf 1 zurücksetzen
i++;
if (i >= 9) {
i= 1;
}
 
wenn dir break; zu case nichts sagt, dann lieber nicht so erstaunt fragen 😉

oder ohne break und Wiederholung:
Code:
switch(i) {
         case 8:
          g.drawLine(50,0,100,100);
         case 7:
            g.drawLine(0,100,50,0);
         case 6:
            g.drawLine(0,200,100,100);
         case 5:
             g.drawLine(100,100,100,200);
         case 4:
            g.drawLine(0,200,100,200);
         case 3:
           g.drawLine(0,100,100,200);
         case 2:
          g.drawLine(0,100,100,100);
         case 1:
            g.drawLine(0,100,0,200);
      }
 
Leroy42 hat gesagt.:
maki hat gesagt.:
Code:
break;

Was soll das denn jetzt? :shock:
Ehrlich?

Hab mir nix unter
Titel: wie durch klicken regeln dass nächster "case" auge
vorstellen können, aber irgendwie sind da keine breaks drinnen im switch case.

Was der Fragesteller wissen will oder was der Code da machen soll bleibt mir unveständlich...
 
Ach so, maki meinte, daß die einzelnen case-Anweisungen jeweils mit break; enden sollten.

Stimmt! Aber dadurch wird Gast sein Problem auch nicht lösen können.

Da war SlaterB's Beitrag schon hilfreicher!
 
Das Problem wird vielleicht nicht durch break; gelöst (vielleicht aber doch wenn alles andere richtig ist), aber wenn nicht am Ende jeder case-Anweisung ein break; steht, wird immer alles gezeichnet, auch wenn der restliche Code richtig ist.
 
wie schaffe ich es aber, dass die variable dadurch hochgezählt wird, dass man aus dem fenster herausklickt und dann wieder hineinklickt. Es hat weniger mit dem klicken zu tun, es geht darum, dass das bild neu gezeichnet wird (automatisch) und dies soll ich mir auf irgendeine Weise zu Nutze machen, um zu erreichen, dass sich eben diese variable hochzählt - von selbst, wenn ich es recht verstanden habe aber nur nachdem der Browser das bild aktualisiert hat
 
hast du slaters Beitrag gelesen?

"das Klicken hat mit dem paint nichts zu tun, es kann 10x gepaintet werden ohne dass irgendjemand klickt,"

du fügst zu einem Aplett einen MouseListener hinzu, das kann ruhig das Applet selbst sein, dazu muss das Interface MouseListener implementiert werden.

es gibt eine init Funktion von Applet, die kannst du verwenden mun den Listener einzufügen.

aja, ohne break gehts natürlich nicht.

so zum beispiel:
Code:
import java.awt.*; 
import java.applet.*; 
import java.awt.Color; 
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class Nikolaus extends Applet implements MouseListener{
	
	public int i;
	
   @Override
	public void init() {
		super.init();
		i = 1; 
		this.addMouseListener(this);
	}

   public void paint(Graphics g) 
    { 
      
      Color rot = new Color(255, 0, 0); 
         g.setColor(rot); 
      switch(i) { 
         case 1: 
            g.drawLine(0,100,0,200); 
            break;
         case 2: 
          g.drawLine(0,100,0,200); 
          g.drawLine(0,100,100,100);
          break;
         case 3: 
            g.drawLine(0,100,0,200); 
           g.drawLine(0,100,100,100); 
           g.drawLine(0,100,100,200);
           break;
         case 4: 
            g.drawLine(0,100,0,200); 
            g.drawLine(0,100,100,100); 
            g.drawLine(0,100,100,200); 
            g.drawLine(0,200,100,200); 
            break;
         case 5: 
            g.drawLine(0,100,0,200); 
            g.drawLine(0,100,100,100); 
             g.drawLine(0,100,100,200); 
             g.drawLine(0,200,100,200); 
             g.drawLine(100,100,100,200); 
             break;
         case 6: 
            g.drawLine(0,100,0,200); 
            g.drawLine(0,100,100,100); 
             g.drawLine(0,100,100,200); 
             g.drawLine(0,200,100,200); 
             g.drawLine(100,100,100,200); 
            g.drawLine(0,200,100,100); 
            break;
         case 7: 
            g.drawLine(0,100,0,200); 
            g.drawLine(0,100,100,100); 
             g.drawLine(0,100,100,200); 
             g.drawLine(0,200,100,200); 
             g.drawLine(100,100,100,200); 
            g.drawLine(0,200,100,100); 
            g.drawLine(0,100,50,0); 
            break;
         case 8: 
            g.drawLine(0,100,0,200); 
            g.drawLine(0,100,100,100); 
             g.drawLine(0,100,100,200); 
             g.drawLine(0,200,100,200); 
             g.drawLine(100,100,100,200); 
            g.drawLine(0,200,100,100); 
            g.drawLine(0,100,50,0); 
          g.drawLine(50,0,100,100);  
          break;
      } 
       
    }
@Override
public void mouseClicked(MouseEvent e) {
	i++;
	this.repaint();
	
}
@Override
public void mouseEntered(MouseEvent e) {
	// TODO Auto-generated method stub
	
}
@Override
public void mouseExited(MouseEvent e) {
	// TODO Auto-generated method stub
	
}
@Override
public void mousePressed(MouseEvent e) {
	// TODO Auto-generated method stub
	
}
@Override
public void mouseReleased(MouseEvent e) {
	// TODO Auto-generated method stub
	
} 
    

  
    
}


lustig! es funktioniert!!!
 
ohne break gehts nicht nicht, sondern viel einfacher^^

Code:
      switch(i) {
         case 8:
            g.drawLine(0,100,0,200);
         case 7:
          g.drawLine(0,100,100,100);
         case 6:
           g.drawLine(0,100,100,200);
         case 5:
            g.drawLine(0,200,100,200);
         case 4:
             g.drawLine(100,100,100,200);
         case 3:
            g.drawLine(0,200,100,100);
         case 2:
            g.drawLine(0,100,50,0);
         case 1:
          g.drawLine(50,0,100,100);
      }
 
hmm du Schlauberger, das habe ich doch schon gepostet und vor allem richtig,
bei dir wird alles falschrum gemalt dein case 1 entspricht nicht dem ursprünglichen mit break

--------

@Aurora

> Es hat weniger mit dem klicken zu tun, es geht darum, dass das bild neu gezeichnet wird (automatisch) und dies soll ich mir auf irgendeine Weise zu Nutze machen

in diesem Fall liegst du mit dem paint schon recht gut im Spiel,

du musst aber verstehen, dass niemand so genau kennt, was du da unter 'automatisch aktualisieren/ Browser mal/ kein Mausklick/ irgendwie aktualisiert' alles meinst oder nicht meinst,
so funktioniert programmieren nicht, versuche nochmal in deinem Lehrbuch nachzulesen/ den Aufgabensteller zu fragen,
was es so an einzelnen Ereignissen gibt, wann wer wie warum auf die Umgebung reagiert,
erst wenn solche Grundlagen geklärt sind, kann man dann Aufgaben damit bestreiten
 
@ARadauer

danke für die Hilfe! Die Sachen die du da am Schluss gemacht hast hatten wir nicht mal ansatzweise im Kurs. Ich bin auf seinen Lösungsweg gespannt und werde ihn dann auf jeden Fall auch reinstellen, vielleicht versteht ihr dann den Arbeitsauftrag 🙂

Es war einfach unverschämt von dem Lehrer die Aufgabe so unklar zu stellen, wir haben ja noch überhaupt keine Grundkenntnisse, wir fangen ja gerade erst an. Mein Problem lag Tagelang einfach daran, dass ich keine Ahnung hatte wie da überhaupt ein möglicher Lösungsweg gewesen wäre, daher war ich voll und ganz auf Hilfe aus dem Forum angewiesen.

Wie gesagt - die Lösung wie er sie sich vorgestellt hat kommt noch 🙂

Gruß Aurora
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben