mehrere Bilder im JApplet

jal1976

Mitglied
Hallo zusammen,
versuche mich grad an einem JApplet wo ich ein Hintergrundbild (als ContentPane) habe und mehrere Bilder drauf laden möchte.
Das mit dem Hintergrundbild ist kein Problem. Jetzt habe ich ein "Fadenkreuz" Bild (.gif), das funktioniert auch. Dieses Fadenkreuz hat einen MouseAdapter. Sobald der Cursor der Maus im Applet auftaucht, verschwindet der Mauszeiger und ich bewege nur das Fadenkreuz. Die Position des Fadenkreuz Bildes setze ich mit der setLocation() Methode und übergebe dazu MouseEvent.getX() und MouseEvent.getY().

Wenn ich aber nun (derselbe Code) ein zusätzliches Bild drauf legen will, wird es zwar angezeigt, aber die Methode setLocation sowie auch setBounds bleiben ohne Wirkung.

Was macht denn der MouseAdapter was bei der Verwendung von setLocation nicht passiert? Also im MouseAdapter wird die Location des Bildes neu gesetzt. Ohne MouseAdapter, also bei der Erzeugung des Applets, funktioniert es nicht...

Habt ihr da einen Tip für mich?

hier noch "etwas" Quellcode (ich hoffe das es nicht zuviel Code ist!!):
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;

public class ShooterApplet extends JApplet
{
private SMouseAdapter mouse;
private SCrossHair crossHair;
private SMagazine magazine;
private SBackgroundPanel backGroundPanel;

	public void init()
	{
		this.setCursor(Toolkit.getDefaultToolkit().createCustomCursor(
						new BufferedImage(1, 1, 2), new Point(1, 1), "Custom CrossHair"));
		this.crossHair = new SCrossHair();
		this.mouse = new SMouseAdapter(this.crossHair, this, this.weapon);
		this.backGroundPanel = new SBackgroundPanel();
		this.setContentPane(this.backGroundPanel);

		this.setSize(800, 600);
		
		this.magazine = new SMagazine();
		
		this.getContentPane().add(this.magazine);
		this.getContentPane().add(this.crossHair);
		
		int headX = (int)this.getLocation().getX();
		int headY = (int)this.getLocation().getY();
		int x = headX + (int)this.getSize().getWidth();
		int y = headY + (int)this.getSize().getHeight();
		
		this.magazine.setLocation(new Point(x-150, y-150));
		
		this.addMouseListener(this.mouse);
		this.addMouseMotionListener(this.mouse);
		this.setVisible(true);
	}

Hier noch die beiden JLabel Klassen mit den jeweiligen Bildern:

Java:
import javax.swing.*;
import java.awt.*;

public class SCrossHair extends JLabel
{
	private static final long serialVersionUID = 1L;
	private ImageIcon crossHair_pic = new ImageIcon(this.getClass().getResource(
																SDefault.CROSSHAIR_PIC));
	
	public SCrossHair()
	{
		this.setIcon(this.crossHair_pic);
	}
	
	public void updateCrossHairPosition(int x_mousePos, int y_mousePos)
	{
		int x = x_mousePos - (this.crossHair_pic.getIconHeight() / 2);
		int y = y_mousePos - (this.crossHair_pic.getIconWidth()) / 2;
		this.setLocation(new Point(x, y));
	}
}

Java:
import javax.swing.*;
import java.awt.*;

public class SMagazine extends JLabel
{
	private static final long serialVersionUID = 1L;
	private ImageIcon magazine = new ImageIcon(this.getClass().getResource(
																SDefault.MAGAZINE_PIC));
	public SMagazine()
	{
		this.setIcon(this.crossHair_pic);
	}
}
 
Zuletzt bearbeitet von einem Moderator:
Ok, hab mich erstmal anders entschieden, ist, denke ich auch sauberer. natürlich nehme ich ein JLayeredPane um mehrere Bilder anzeigen zu können.
Mich würde trotzdem die Sache mit dem MouseAdapter (mouseMoved) interessieren. Warum dort die Position des Bildes mit setLocation verändert werden kann und warum dasselbe nur ohne den MouseAdapter (also bei der Erzeugung des Applets) die setLocation Methode unwirksam bleibt. habe auch das Layout schon versucht auf null zu setzen, aber dasselbe Ergebnis.

Mit dem JLayeredPane schon eine schöne Sache, nur interessieren würde es mich trotzdem doch schon, und im Moment habe ich keine Idee woran es liegen könnte... :(

mfg
jal1976
 
Zurück