# Ereignisse mit MouseListener



## nadine_ (22. Jun 2008)

Hallo zusammen... vllt mal zwei etwas dumme fragen, aber ich noch eher ein Java Grünschnabel und komm einfach nicht mehr weiter.

1. Frage:
Es ist ein kleines Applet bei dem ich ein Array mit Farbwerten gesetzt habe, wenn das Applet startet... Dafür eine eigene Methode die sich setCol() nennt.

Desweiteren wie ihr vllt sehen könnnt, zeichne ich ein Rechteck das die Hintergrundfarbe annehmen soll (also, eine unsichtbare Box). Also nehmen wir mal an Yellow. Klicke ich dann nachher auf das Applet, sollte sich die Farbe des Rechtecks so verändern, dass es die Farbe von nc annimmt...

So wie ich das aus der Fragestellung meines Profs rauslese, sollte scheinbar durch die Methode setCol() die Hintergrundfarbe des Applets die gesetzte Farbe der Methode setCol() annehmen... Nun hab ich absolut keine Ahnung wie, ich das in der init() Methode schreiben muss, dass ich nicht setBackground(...) angeben muss, sondern mit der Farbe meiner eigenen Methode.

Rufe ich das Applet auf, habe ich zwar einen gelben Hintergrund, aber auch nur weil ich das mit setBackground so eingestellt habe und das ja eigentlich nicht so sein sollte...

Außerdem ist gleich zum Anfang mein Rechteck schwarz... Sollte aber doch gelb sein und erst beim klicken schwarz werden.  :bahnhof: 


2. Frage.:

Desweiteren implementiere ich nicht direkt den Mouselistener sondern schreibe dafür eine eigene Ereignisklasse.
Ich müsste nun das ganze so umschreiben, dass ich beim Reinfahren der Maus einen blauen Hintergrund bekomme (was ich ja schon hingekriegt habe) aber ich sollte nun auch wieder meine alte Hintergrundfarbe bekommen, wenn ich mit der Maus wieder aus dem Applet fahre. Ich schätze mal, dass ich irgendetwas in der Methode mouseReleased() machen müsste... frage ist nur, was?


Hier mein Code:


```
import java.applet.*;
import java.awt.*;

public class AWTEMaus02 extends Applet{
	
	int rx = 20;
	int ry = 30;
	
	
	MausKlick mk = new MausKlick(this);
	
	public void setCol(){
		Color col[] = new Color[1];
		
		col[0] = Color.YELLOW;
	}
	
	public void chaCol(){
		Color nc[] = new Color[1];
		
		nc [0] = Color.BLACK;
		repaint();
	}
	
	public void init(){
		
		setCol();
		setBackground(Color.ORANGE);
		
		
		addMouseListener(mk);
	}
	
	public void paint(Graphics g){
		
		
		g.fill3DRect(rx, ry, 80, 30, true);
	}
}
```

Und die eigene Ereignisklasse: 


```
import java.awt.*;
import java.awt.event.*;

public class MausKlick  implements MouseListener{
	
	AWTEMaus02 mlk;
	public MausKlick(AWTEMaus02 mlk){
		this.mlk = mlk;
	}
	
	public void mouseClicked(MouseEvent e){
	}
	
	public void mouseEntered(MouseEvent e){
		mlk.setBackground(Color.BLUE);
	}
	
	public void mouseExited(MouseEvent e){
	}
	
	public void mousePressed(MouseEvent e){
		
		mlk.rx = e.getX() - 20;
		mlk.ry = e.getY() - 10;
		mlk.chaCol();
		mlk.repaint();
	}
	
	public void mouseReleased(MouseEvent e){
		
	}
}
```


Ich wär euch sehr verbunden, wenn irgendjemand mir nen kleinen Hinweis geben könnte...


Vlg, 

nadine_


----------



## Kim Stebel (22. Jun 2008)

```
public void setCol(){ 
      Color col[] = new Color[1]; 
       
      col[0] = Color.YELLOW; 
   }
```

erklär mir mal was diese methode machen soll. dann erklär ich dir, was sie wirklich macht.


----------



## nadine_ (22. Jun 2008)

Diese Methode soll laut meines Professors beim Start des Applets ein Array von Color mit Farbwerten setzen.


mehr steht da leider nicht. da jedoch, wenn ich in meinem skript weiter lesen da steht, dass ich mit der methode einen neuen farbindes mit nc (Methode: chaCol()) setzen soll und da steht, dass das Applet mit repaint() neu gezeichnet wird, dachte ich mir, es hat was mit der Hintergrundfarbe zu tun...  bzw. der farbe des rechtecks...


LG,  

nadine_


PS: danke dass du mir helfen willst... in diesem tollen skript steht ja leider überhaupt nichts, was mir helfen könnte.  ???:L


----------



## Kim Stebel (22. Jun 2008)

Also mal ganz langsam: col wird als lokale(!) Variable deklariert. Das heißt außerhalb dieser Methode kann auf die nicht zugegriffen werden. Kann also auch außerhalb nichts bewirken... Das Array wird also erzeugt, der lokalen Variable zugewiesen, dann wird das einzige Feld des Array gesetzt und dann ist die Methode zu Ende und es existiert keine Referenz mehr auf das Array womit es einfach gelöscht wird.
Oder kürzer: Das ist eine ziemlich umständliche Art _rein gar nichts_ zu machen.

Wenn du Java lernen willst/musst, fang bitte mit 'nem schön einfachen Kommandozeilen-Programm an, bitte nicht mehr als 10 Zeilen.


----------



## nadine_ (22. Jun 2008)

ja darauf bin ich auch schon gekommen...

aber so stehts nunmal im skript... Ich bin ganz ehrlich, ich weiß selber nicht, was mein professor damit bewirken will.

dieses Variable chaCol() Methode füllt ja dieses rechteck mit schwarz aus. 

aber nun gut... 


hast du vllt noch ne antwort auf meine zweite Frage?


PS: kommandozeilen programme hab ich schon hinter mir


----------



## Kim Stebel (22. Jun 2008)

zu 2: Du müsstest in der mouseExited-Methode setBackground mit der ursprünglichen Farbe aufrufen.

chaCol macht übrigens auch nichts. Die Methoden stammen _genau_ so von eurem Prof?? Was ist das für ein Prof?? Germanistik?


----------



## nadine_ (22. Jun 2008)

ja alles von unserem prof...

ich weiß nicht... das ist halt das problem... weil immer nur bruchteile von programmen angegeben sind... aber immer nur das, was wir eh schon können... und das wichtige, wird immer weg gelassen. vllt steht in dieser methode noch irgend etwas anderes ich habe keine ahnung... 

trotzdem fraglich, wieso dann das rechteck schwarz wird... naja auch egal jetzt... 

zu 2 nochmal, du meinst also im endeffekt:

publich void mouseExited(MouseEvent e){
setBackground(Color. ...);
}


Danke für deine Hilfe 

LG,

Nadine


----------



## Kim Stebel (22. Jun 2008)

ja, nur statt Color. .... solltest du die ursprüngliche farbe nehmen...evtl musst du die am anfang mit getBackgroundColor speichern.

Bekommt ihr von dem keine vollständigen Programme???


----------



## nadine_ (23. Jun 2008)

Nein bekommen wir leider nicht... 

sonst hätt ich ja das problem mit dem einen programm gar nicht gehabt... ich mein, es ist schon klar, dass er uns nicht jedes einzelne programm ins skript schreibt, weil halt null lerneffekt dabei ist...

aber zumindest ein einführendes beispiel, dass man mal genau sieht, wie das jeweilige zeug funktioniert... bestes beispiel mit ereignissen. 
Aber naja, so ist das halt... irgendwie muss ich das noch bis zur klausur selber hinbekommen 

Also, ich danke dir nochmal herzlich, dass du mir da weiter geholfen hast... werd dann heute abend mal gleich ausprobieren, ob das dann auch so funktioniert 


Vlg, 

nadine_


----------



## Kim Stebel (23. Jun 2008)

keine ursache...ich gebe übrigens auch nachhilfe wenn es ganz schlimm kommen sollte


----------



## nadine_ (23. Jun 2008)

naja, danke für das angebot, ich weiß es wirklich zu schätzen... aber wie willst du das machen? virtuelle nachhilfe? ich glaub du bist ja etwas weiter von mir entfernt....


----------

