Schaffe MouseHandler-Teil nicht.

Kai
Dieser Script soll wenn ich auf das Applet klicke den Hintergrund färben. Kann mir wer bitte sagen warum das hier nicht funktioniert?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
import java.applet.*;
import java.awt.*;
import java.util.Random;
import java.awt.event.*; 

import java.lang.*;
import java.io.*;
import java.util.*;

public class Main extends Applet implements MouseListener
{
	boolean ButtonPressed;
	
	public void paint(Graphics g)
    {
		g.setColor(Color.black);
		g.fillRect(5,5,25,25);
		
		int hoehe = 20;
		int breite = 20;
		int hoehexbreite = hoehe * breite;
		int durchlauf = 0;
		int x = 0;
		int y = 0;
		
		/*while(durchlauf != hoehexbreite)
		{
			Image[] background = new Image[hoehexbreite];
			Image[] bild = new Image[hoehexbreite];
			
			background[durchlauf] = getImage(getDocumentBase(), "gras.png" );
			bild[durchlauf] = getImage(getDocumentBase(), "artillerie_0_0.gif" );
			
			g.drawImage(background[durchlauf], 32 * x, 32 * y, this );
	        g.drawImage(bild[durchlauf], 32 * x, 32 * y, this );
	        
	        durchlauf++;
	        x++;
	        
	        if(x == breite)
	        {
	        	y++;
	        	x = 0;
	        }
    	}*/
		
		if(ButtonPressed)
		{
			g.setColor(Color.BLUE);
			g.fillRect(5,5,25,25);
			ButtonPressed = false;
		}
		
    }
	
	public void mouseClicked(MouseEvent e)
	{
		ButtonPressed = true;
		repaint();		
	}
	public void mousePressed(MouseEvent e) {}
	public void mouseEntered(MouseEvent e) {}
	public void mouseExited(MouseEvent e) {}
	public void mouseReleased(MouseEvent e) {}
}
birthdefect
Hast Du die Funktion g.setcolor (Farbe) ausprobiert/geprüft?
Etwa, indem Du den Buttonpressedwert von Haus aus auf true setzt?

Oder hast Du bereits eine Ausgabe der Mausposition sichtbar gemacht, damit du Dir auch sicher bist, daß die Maus überhaupt arbeitet?

Ich kann nirgends erkennen, daß Koordinaten übergeben werden.
Oder willst Du etwas den gesamten Hintergrund grau färben?

Wenn ja, dann würde ich dafür sorgen, daß g.setcolor nur ausgeführt werden kann,
solange der Hintergrund ohnehin noch nicht grau ist, da der Druck auf
den Mousebutton je nach System mehrere bis viele Aufrufe zur Folge hat, da ich mal stark annehme, dein Applet nutzt für die Mausabfrage einen Thread mit entsprechendem Actionlistener. (Siehe Observer-pattern nach Gamma).

Das ist alles nicht so einfach, weil ich selbst kaum erfahrungen mit Applets habe.
Im speziellen mit Mausfunktionen im Applet.
Kai
Stimmt, setColor funktioniert nicht. Woran kann denn das liegen?
Ich habe oben mal den "neuen" Code ohne den Kommentar reineditiert.

€: g.drawString("lol", 5, 25); geht wunderbar, also sollte der paint-Konstruktor in Ordnung sein, oder?
birthdefect
mit g.SetColor tust Du nichts weiter, als die Farbe auszuwählen.
Aber was Du mit der Farbe dann tun willst, steht nicht im Programm.

Du könntest ein fillrectangle oder so machenund damit Dein ganzes Applet ausfüllen.

Musst halt schauen, bei den Grafikfunktionen, was du brauchst.

Schau mal hier:
http://www.pohlig.de/Unterricht/Inf2002/Tag13/GraphicsMethoden.htm
Kai
Oh, danke.
Ich dachte der Befehl färbt das komplette Applet ein.
Aber leider funktioniert es noch immer nicht richtig. Wohin man klickt ist mir derzeit egal, das mit den Koordinaten mache ich später.
Den momentanen Code habe ich wieder oben reineditiert, damit sich der Thread nicht unnötig verlängert.
Jetzt zeichnet er beim Start ein schwarzes Quadrat, und soll wenn ich aufs Applet klicke soll er ein blaues drüberzeichnen.
birthdefect
Aha, ich denke, sobald Du die maustaste wieder loslässt, zeichnet er
wieder ein Schwarzes Rechteck, da er "g" neu aufbaut.

Ich würde dir erstmal raten, ein blaues Rechteck daneben zu zeichnen.
oder versetzt gegenüber dem schwarzen, dann erkennst Du den effekt.
Wenn du die maustaste drückst erscheint dan ein blaues über dem schwarzen bis du sie wieder losläßt Oder zeichnet er das schwarze von Haus aus über das blaue ?

Das ist die frage, der Du nun nachgehen musst, und dazu ist es besser, die rechtecke überschneidend zu zeichnen.

Möglicherweise brauchst Du einen generellen umschalter zwischen den beiden Farben.
Kai
Könntest du mir vielleicht ein Beispiel für das Umschalten geben? Wie man unschwer merkt bin ich ein ziemlich ahnungloser Noob.
birthdefect
Vielleicht könnte es so funktionieren:

code:
1:
2:
3:
import java.applet.*;
...


Hier stand Nix hilfreiches - siehe weiter unten für gute Version. geschockt
Kai
Danke. Tut sich aber leider auch nichts.
Hier per Xampp auf meinen Rechner:
http://85.127.231.5:14/jav/
birthdefect
Also ich kann unter besagtem Link nichts laden.
Es wird Java gestartet, aber das Applet kann nicht angezeigt werden.
(Symbol mit rotem X erscheint)
Kai
Seltsam.
Man bindet das Applet doch so ein:

<html>
<body bgcolor="black">
<div align="center"><applet code="Main2.class" width="800" height="600"></div>
</applet>
</body>
</html>

Muss ich dem Router einen gewissen Port forwarden lassen?
birthdefect
Ach vergiss es!

ich hab das Applet mal bei mir selber gestartet und kann nix empfangen, was von der Maus kommt.

Es muß daran liegen.
Das ButtonPressed kommt mir irgendwie zu einfach vor.

ich schau mal nach.
birthdefect
So gehtz jetzt.
Viel Spaß beim Herumbasteln.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class maustest extends Applet implements MouseListener
{
	// globale Variablen
	// Koordinaten
	int xpos;
	int ypos;
	// Ist die Maus ueberhaupt ist im Applet?
	boolean mouseEntered;
	// Wurde geklickt?
	boolean ButtonPressed = false;

	public void init() 
	{
		// MouseListener an applet koppeln
		addMouseListener(this);
	}
	
	public void paint(Graphics g) 
	{
		if(ButtonPressed)
		{
			g.setColor(Color.BLUE);
			g.fillRect(50,5,70,25); // zusaetzliches Rechteck, wenn taste irgendwanneinmal gedrueckt wurde
			ButtonPressed = false;
		}
		else g.setColor(Color.black);
		g.fillRect(5,5,25,25);
		
		g.setColor(Color.red);
		g.drawString("("+xpos+","+ypos+")",xpos,ypos);
		
		if (mouseEntered) g.drawString("maus im Applet!",20,160);
		else g.drawString("Maus ist nicht da!",20,160);
	}

	// Dies wird aufgerufen, wenn geklickt wird
	public void mouseClicked (MouseEvent me)
	{
		// Koordinaten auslesen
		xpos = me.getX();
		ypos = me.getY();
		ButtonPressed = true;
		
		// Resultat anzeigen:
		repaint();
	}

 // Dies wird ausgefuerht, waehrend die Maustatse gedrueckt wird (laengere zeit)
	public void mousePressed (MouseEvent me)
	{
		// nix
	}
	// Wenn Maustaste wieder losgelassen wird
	public void mouseReleased (MouseEvent me) {}

	// Wenn maus ins Applet eintritt
	public void mouseEntered (MouseEvent me)
	{
		// Gibt hier nur Meldung aus
		mouseEntered = true;
		repaint();
	}
	// Wenn maus aus dem Applet rausgeht
	public void mouseExited (MouseEvent me)
	{
		// Zeigt meldung
		mouseEntered = false;
		repaint();
	} 
}  // Ende Class
Kai
Wohoo, vielen Dank.