AWT MouseListener Extra Knopf auf der Maus

IAmAWard

Mitglied
Hey Leute bin neu hier und habe mich extra für diese Frage registriert.

Hier mein Problem. Einen MouseListener zu machen ist ja jetzt nicht so schwer, allerdings schaffe ich es nicht den MouseListener auf ein Panel zu adden sondern nur auf Buttons so, dass er dann auch reagiert (sprich man muss auf den Button drücken). Und mein zweites wichtigeres Problem ist, dass meine Maus z.B. 4 extra Daumen-tasten hat, aber diese in Java nicht erkannt werden. Wenn ich die Modifiers haben will, kommt immer 0 raus und ich weiß jetzt nicht wie man machen könnte, dass eben auch die extra Tasten in Java erkannt werden.

Bedanke mich für jede Hilfe
Mfg. Ward
 
Es hängt davon ab, auf welche (üblicherweise Keyboard)-Ereignisse die Extra-Maustasten gebunden sind.
Das lässt sich meist über eine im Maustreiber enthaltene Software einstellen.
Z.B. sind solche Daumentasten häufig auf "Navigiere zurück" und "Navigiere vorwärts" Ereignisse gelegt.
Das sind wiederum tatsächlich Keyboard Ereignisse. Du brauchst also einen KeyListener.
Siehe z.B. auch: https://stackoverflow.com/questions...in-java-forward-backward-keys#answer-38545960
 
Ok nur ist es bei Spielen doch auch so, dass da dann Maustaste 4 / 5 / 6 / 7 ..... steht zB in Minecraft. Und ja ich kann das natürlich igwie schauen über den Treiber aber man kann diese Buttons also was sie machen bei Roccat Mäusen verändern und es soll ja bei jeder Maus funktionieren nicht nur bei der.
 
Okay, nur also Hintergrundinfo: Minecraft benutzt nicht AWT, sondern LWJGL 2/3. Und LWJGL wiederum benutzt in Version 2 eine eigene WndProc (zum Auslesen der nativen Window Message Events) und in Version 3 benutzt es GLFW (was dasselbe tut).
AWT wird es unter der Haube natürlich auch so tun, nur ist nicht klar, wie AWT die nativen Window Messages tatsächlich in entweder Maus- oder KeyListener Ereignisse übersetzt.
 
Probier mal dieses Beispiel. Das JPanel hat einen MouseListener, der auf Klicks reagiert und ja nach Button einen entsprechenden Integer ausgibt.

Code:
import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Gui
{
	private JFrame frame;
	
	public Gui()
	{
		frame = new JFrame("Test Frame");
		frame.setSize(400, 300);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JPanel panel = new JPanel();
		panel.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e)
			{
				System.out.println("ausgelöst: " + e.getButton());
			}
		});
		
		frame.add(panel, BorderLayout.CENTER);
		
		frame.pack();
	}
	
	
	public static void main(String[] args)
	{
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run()
			{
				Gui gui = new Gui();
				gui.frame.setVisible(true);
			}
		});
	}
}

Für meine drei Tasten Maus bekomme ich folgende Ausgabe:
Code:
ausgelöst: 1
ausgelöst: 2
ausgelöst: 3

Das sind linke Taste (1), MouseWheel Klick (2) und rechte Taste (3).
 
Ok er erkennt auch die Daumen-tasten allerdings erkennt er alle als Nummer 5 aber ich denke dass könnte an meine Maus liegen
Weiters erkennt er nicht jedes mal wenn ich drücke?

Danke schön
 
Wenn die Maustaste erkannt wurde sollte eigentlich jeder Klick auslösen. Weitere interessante Methoden sind z.B:
Code:
boolean extraEnabled = java.awt.Toolkit.getDefaultToolkit().areExtraMouseButtonsEnabled();
Wird bei dir vermutlich schon "true" sein, da er wohl sonst nicht mehr als drei Maustasten erkennen würde.

Schwieriges Thema, da es wohl an der JVM liegt (meine Annahme) wie eingehende Eingaben verarbeitet und in Java Events "verpackt" werden.
 
Ok, danke nochmal an alle für die Hilfe habe es zum Funktionieren gebracht. Es lag einerseits an meiner Maus, da beide das gleiche (Browser Vorwärts) gemacht haben und Java es somit als gleiche Taste erkannt hat. Java erkennt die Maus auch irgendwie nur, wenn sie was im Browser machen würde oder sie halt zB. ein STRG + ALT + 0 ausführen würden oder so. Großes danke an X5-599 🙂
 

Zurück
Oben