MouseEvent.getX() liefert in Applet Screen-Koordinate

r.w.

Bekanntes Mitglied
Hallo zusammen,

bei einem in meinem Applet enthaltenen JPanel versuche ich per MouseMotionListener
und getX() bzw. getY() die Position innerhalb der Komponente zu ermitteln.

Mein Problem ist, dass die zurückgelieferte Position solange relativ zum Bilderschirm
zurückgeliefert wird, bis ich einmal auf das JPanel klicke. Erst dann kommt die Koordinate
relativ zur Komponente.

Hat jemand eine Idee, wie ich das umgehen kann?


VG ROlf
 
Hallo tagedieb,

ich denke ich habe das Problem lokalisiert.

Es tritt auf, wenn die Java-Konsole beim Start des Applets eingeblendet wird.
Dann werden auf meinem Mac Screen-Koordinaten zurückgeliefert, bis das
Browserfenster den Fokus erhält. Beim Mac wird das Konsolenfenster über dem
Browserfenster angezeigt und hat den Fokus. Das ist, glaub ich, unter Windows
anders. Zumindest trat das Problem auf einem Windows 7 Rechner soeben auch
mit aktivierter Java-Konsole nicht auf.

Vielen Dank aber dennoch für die schnelle Reaktion.

VG ROlf

----------------------------------------------------------------------------------------------

Wenn auch jetzt nicht mehr nötig - und nur damit niemand denkt, ich wäre zu faul
ein KSKB einzustellen, hier ein schnell zusammengestricktes Stückchen, mit dem
das Ganze (wie gesagt: wohl nur auf dem Mac) getestet werden kann. ;-)





Java:
import java.applet.Applet;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JPanel;


public class MouseDemo extends Applet implements MouseMotionListener {
	Point mousePos=new Point(0,0);
	
	@Override
	public void destroy() {
		super.destroy();
	}

	@Override
	public void init() {
		super.init();

		demoPanel = new JPanel(){

			private static final long serialVersionUID = 1L;

			@Override
			protected void paintComponent(Graphics g) {
				super.paintComponent(g);
				g.drawString("Pos: " + mousePos.x + " : " + mousePos.y, 20,20);
			}
		};
		demoPanel.setBackground(Color.GRAY);
		demoPanel.setPreferredSize(new Dimension(600,600));
		this.add(demoPanel);
				
	}

	@Override
	public void start() {
		super.start();
		this.setPreferredSize(new Dimension(600,600));
		this.validateTree();
		demoPanel.addMouseMotionListener(this);
		
	}

	@Override
	public void stop() {
		super.stop();
	}

	private static final long serialVersionUID = -8371379391036065620L;
	
	JPanel demoPanel = null;

	@Override
	public void mouseDragged(MouseEvent evt) {
	}

	@Override
	public void mouseMoved(MouseEvent evt) {
		this.mousePos = evt.getPoint();
		this.repaint();
	}
}
 

Zurück
Oben