InputEvent MetaDown

G

Gast2

Gast
Hallo zusammen,

wenn ich einen MouseListener habe und die rechte Maustaste drücke ist MouseEvent#isMetaDown() immer true ... Des ist doch ein Bug oder????

Java:
import java.awt.BorderLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.WindowConstants;
 
public class Test111 extends JFrame  {
    public Test111() {
        super("");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        JLabel jLabel = new JLabel("test");
        jLabel.addMouseListener(new MouseListener() {
			
			@Override
			public void mouseReleased(MouseEvent e) {
				System.out.println("mouseReleased: "+ e.isMetaDown());
				
			}
			
			@Override
			public void mousePressed(MouseEvent e) {
				System.out.println("mousePressed: "+ e.isMetaDown());
				
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mouseClicked(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
		});
        
        add(jLabel , BorderLayout.CENTER);
        pack();
        setLocationRelativeTo(null);
    }
    
    
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {
		UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		new Test111().setVisible(true);
    }
}
 

KrokoDiehl

Top Contributor
Was ist denn mit Meta gemeint? Diese Windows-Kontextmenü-Taste bei Win-Tastaturen (links nebem dem rechten Strg?).
Falls ja, könnte es ansatzweise Sinn machen, weil Rechtsklick in vielen Fällen dem Kontextmenü entspricht. Was aber dennoch einer eher grauslige Umsetzung wäre ;)
 
T

Tomate_Salat

Gast
Ich hab zwar keine Ahnung, was der Meta-Modifier ist, aber er gibt nur bei Rechte-maustaste true zurück, bei allen anderen (hier 3-Tastenmaus: Linke + rad) gibt er false zurück. Glaube nicht,dass es ein Bug ist.

Diese Windows-Kontextmenü-Taste bei Win-Tastaturen (links nebem dem rechten Strg?).
nennt sich [Alt] ;-)

Falls ja, könnte es ansatzweise Sinn machen, weil Rechtsklick in vielen Fällen dem Kontextmenü entspricht. Was aber dennoch einer eher grauslige Umsetzung wäre ;)

KontextMenü wird über [c]isPopupTrigger()[/c] geprüft
 
G

Gast2

Gast
Danke =), dass weiß ich alles was ihr mir gesagt habt ;)...
Ich glaub bei Windows ist die Meta Taste die Taste mit der Windows Flagge drauf...
Die wo immer rechts unten das Startmenü aufmacht, wüsste nicht dass diese ein Kontexmenü öffnet!

Die Frage ist immer noch warum das MouseEvent mir ein true bei einem rechten Mausklick zurück liefert, obwohl die Meta Taste nicht gedrückt wird...

Das Problem ist ich will nicht Windows und Mac unterscheiden ich klick mit der rechten Maustaste auf eine Komponente und möchte diese dann selektieren und die anderen Elemente aus einer Selektion mit rausnnehmen, außer wenn meta oder ctrl gedrückt wurde.

Aber da meta immer true ist wird die selektion nie gelöscht...
 

Ebenius

Top Contributor
Genau. Alt ist auf einer Standard-Windows-104-Tastatur zwischen linkem CTRL und ALT...

Zum Thema: Auszug aus der API-Doc der MouseEvent-Klasse:
API-Doc hat gesagt.:
When a mouse button is clicked, events are generated and sent to the registered MouseListeners. The state of modal keys can be retrieved using InputEvent.getModifiers() and InputEvent.getModifiersEx(). The button mask returned by InputEvent.getModifiers() reflects only the button that changed state, not the current state of all buttons. (Note: Due to overlap in the values of ALT_MASK/BUTTON2_MASK and META_MASK/BUTTON3_MASK, this is not always true for mouse events involving modifier keys). To get the state of all buttons and modifier keys, use InputEvent.getModifiersEx(). The button which has changed state is returned by getButton()
Ebenius
 
G

Gast2

Gast
Sorry ich blicks jetzt grad nicht :D...

Ich versteh immer noch nicht warum bei rechts klick isMetaDown true zurück liefet??????:L
 

Murray

Top Contributor
Der Grund findet sich in dem von Ebenius zitierten Absatz der Doku.


java.awt.event.InputEvent:
Java:
public static final int 	BUTTON3_MASK 	4
public static final int 	META_MASK 	4

Für Button3 (das ist der rechte) und die Meta-Taste wird also der gleiche Wert verwendet. Und da isMetaDown() vermutlich nicht mehr macht, als die Konstante META_MASK in den Modifiers zu suchen, liefert sie eben auch für den rechten Button true
 
G

Gast2

Gast
Der Grund findet sich in dem von Ebenius zitierten Absatz der Doku.


java.awt.event.InputEvent:
Java:
public static final int 	BUTTON3_MASK 	4
public static final int 	META_MASK 	4

Für Button3 (das ist der rechte) und die Meta-Taste wird also der gleiche Wert verwendet. Und da isMetaDown() vermutlich nicht mehr macht, als die Konstante META_MASK in den Modifiers zu suchen, liefert sie eben auch für den rechten Button true

Joa Danke, dass weiß ich schon ^^... aber den Grund warum das so ist hab ich noch nicht durschaut ^^...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Momolin InputEvent#getWhen() AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben