# InputEvent MetaDown



## Gast2 (29. Apr 2010)

Hallo zusammen,

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


```
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 (29. Apr 2010)

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


----------



## Tomate_Salat (29. Apr 2010)

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.



KrokoDiehl hat gesagt.:


> 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


----------



## Gast2 (29. Apr 2010)

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


----------



## Gast2 (29. Apr 2010)

Tomate_Salat hat gesagt.:


> I
> nennt sich [Alt] ;-)



nee neben der ctrl taste ist die meta taste und nach der meta teste kommt ALT


----------



## Tomate_Salat (29. Apr 2010)

SirWayne hat gesagt.:


> nee neben der ctrl taste ist die meta taste und nach der meta teste kommt ALT





			
				Wikipedia hat gesagt.:
			
		

> Alt(ernate): Dritte Hilfstaste für Tastenkombinationen auf PC-Tastaturen, auch als Meta-Taste, Hyper-Taste, Super-Taste bezeichnet



Ich denke Alt ist die Meta-Taste ;-)


----------



## Murray (29. Apr 2010)

Tomate_Salat hat gesagt.:


> Ich denke Alt ist die Meta-Taste ;-)


Zumindest in der Java-Welt nicht - wozu gäbe es sonst neben isMetaDown auch noch isAltDown?


----------



## Tomate_Salat (29. Apr 2010)

:bahnhof:Synonym???:L

nö ka :noe:


----------



## Gast2 (29. Apr 2010)

Nö die Meta Taste ist zumindest in Java  z.B. die Windows Taste , Apfel Taste etc.


----------



## Tomate_Salat (29. Apr 2010)

Quelle?


----------



## Ebenius (29. Apr 2010)

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


----------



## Tomate_Salat (29. Apr 2010)

Ebenius hat gesagt.:


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



Ob du dich da mal nicht vertippt hast: ALT liegt zwischen CTRL und ALT. Nehme ich eine 2te Tastatur dazu stimmts :lol:


----------



## Ebenius (29. Apr 2010)

Tomate_Salat hat gesagt.:


> Ob du dich da mal nicht vertippt hast: ALT liegt zwischen CTRL und ALT. Nehme ich eine 2te Tastatur dazu stimmts :lol:


Ohje... :-( Der Tag fing aber auch schon schlecht an...

Ebenius


----------



## Gast2 (29. Apr 2010)

Sorry ich blicks jetzt grad nicht ...

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


----------



## Murray (29. Apr 2010)

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


java.awt.event.InputEvent:

```
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


----------



## Gast2 (29. Apr 2010)

Murray hat gesagt.:


> Der Grund findet sich in dem von Ebenius zitierten Absatz der Doku.
> 
> 
> java.awt.event.InputEvent:
> ...



Joa Danke, dass weiß ich schon ^^... aber den Grund warum das so ist hab ich noch nicht durschaut ^^...


----------



## Murray (29. Apr 2010)

SirWayne hat gesagt.:


> J... aber den Grund warum das so ist hab ich noch nicht durschaut ^^...


Der Grund dafür, warum die Konstanten so gewählt wurden? K.A.


----------



## Gast2 (29. Apr 2010)

Murray hat gesagt.:


> Der Grund dafür, warum die Konstanten so gewählt wurden? K.A.



ja finds auf jeden fall komisch...


----------

