Mouse Wheel Listener reagiert mehrmals

  • Themenstarter Themenstarter MisterK
  • Beginndatum Beginndatum
M

MisterK

Gast
Hallo,

bei meiner Java-Anwendung kommt ein Mouse Wheel Listener zum Einsatz. Dieser soll allerdings auf dem ganzen Frame reagieren, also habe ich den Listener dem JFrame geaddet.

Befindet sich der Mauszeiger nun in einer beliebigen Komponente im Frame, bspw. einem Button, wird die Mouse Wheel Moved Methode sofort zwei Mal hintereinander durchlaufen. Wie bekomme ich es hin, dass sie auch hier nur ein einziges Mal durchlaufen wird? Oder liegt hierbei etwa ein Bug vor?
 
ich würde das erstmal aussprobieren

Java:
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
     System.out.println("AUSGELÖST VON: "+e.getSource());
     //dein kode...
}
 
So hab mich nun angemeldet; antworten ist ja anscheinend als Gast nicht möglich...deswegen auch ein anderer Username.

Nun zum Thema:

Source ist immer das JFrame.

Hier der Beispielcode:

Java:
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class Test {

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					new TestFrame().setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

}

class TestFrame extends JFrame {

	private int counter = 0;

	public TestFrame() {
		
		super("Test Frame");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setSize(200, 100);
		setLocationRelativeTo(null);
		setLayout(new FlowLayout(FlowLayout.LEFT));
		
		addMouseWheelListener(new MouseWheelListener() {
			@Override
			public void mouseWheelMoved(MouseWheelEvent e) {
				System.out.println("MouseWheelListener: " + ++counter);
			}
		});
		
		add(new JTextField("Touch me and scroll!", 15));
		
	}

}
 
bei mir gibts gar eine Endlosschleife mit Exception,
dafür funktioniert [c]getContentPane().addMouseWheelListener[/c] usw., hilft dir das?

generell als Alternative denkbar:
bei allen relevanten Komponenten einzeln den Listener adden,
oder per Rekursion den Baum der Komponenten durchgehen und bei allen Childs hinzufügen
 
Das mit der Endlosschleife ist ja merkwürdig... 🙂

Ich benötige den Listener auf dem GANZEN JFrame, nicht nur auf jeder Child-Komponente. Ich werde jetzt mal versuchen, ein JPanel auf das ContentPane zu legen und darauf den Listener zu adden.

EDIT: Durch das simple Hinzufügen von getContentPane() funktioniert es jetzt...THX
 
Zuletzt bearbeitet:

Zurück
Oben