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
 

httpdigest

Top Contributor
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
 

IAmAWard

Mitglied
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.
 

httpdigest

Top Contributor
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.
 

X5-599

Top Contributor
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).
 

IAmAWard

Mitglied
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
 

X5-599

Top Contributor
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.
 

IAmAWard

Mitglied
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 :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L MouseListener für viele Objekte erstellen Allgemeine Java-Themen 16
L Koordinaten des Mouselistener nicht überall gleich Allgemeine Java-Themen 13
B LEERE JTable MouseListener + popupmenu Allgemeine Java-Themen 2
C MouseListener und Repaint() Allgemeine Java-Themen 6
P MouseListener reagiert 2 Mal Allgemeine Java-Themen 11
T Edit: JLabel+MouseListener oeffnet mehrere Instanzen Allgemeine Java-Themen 5
B MouseListener und KeyListener Allgemeine Java-Themen 15
T MouseListener und MouseMotionListener Allgemeine Java-Themen 3
V MouseListener Allgemeine Java-Themen 2
F Wo MouseListener Positionieren Allgemeine Java-Themen 4
E MouseListener Priorität Allgemeine Java-Themen 4
ElViZ MouseListener auf Linie die per drawLine() gezeichnet wurde? Allgemeine Java-Themen 2
S Anonymen MouseListener entfernen? Allgemeine Java-Themen 2
P Bug mouseListener Allgemeine Java-Themen 2
B Programm soll auf die Eingabe vom Mouselistener warten. Allgemeine Java-Themen 19
M 1. Probleme mit MouseListener, 2. Anwendung in Infobar Allgemeine Java-Themen 8
V MouseListener Allgemeine Java-Themen 9
S MouseListener Allgemeine Java-Themen 18
S Problem Mouselistener Allgemeine Java-Themen 6
G Mouselistener geht aber danach Fehler bei JOptionPane Allgemeine Java-Themen 4
R Global KeyListener/MouseListener Allgemeine Java-Themen 4
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
P Threads Thread innerhalb einer Klasse - ohne Extra Klasse Allgemeine Java-Themen 9
H Extra-Thread sinnvoll für XML-Datei laden? Allgemeine Java-Themen 4
T Feststellen ob kein extra Thread läuft Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben