MouseClicked -> Rechtsklick

Z

Zentrum

Gast
Guten Nachmittag,

also ich weis 1000% wurde das schonmal besprochen aber ich finde dazu nichts, wie kann ich bei einem MouseClicked überprüfen ob es ein Rechtsklick war, den nur dann will ich das sich ein PopUp Menu öffnet. +

Jetzt nicht sagen mach einfach

Java:
if(evt.getClickCount()==2){
        	RECHTSKLICK!
        }

sonder wie man das wirklich unterscheide. Will eben das nur wenn ein bestimmter EIntrag in der JList selected ist ... und wenn dann ein Rechtsklick erfolgt das sich dann ein PopUp Menu öffnet.

Danke für die Hilfe, suche bestimmt schon seit 12Uhr:(

Grüße Zentrum
 
G

Gast2

Gast
dann hast du aber nicht wirklich sorfältig gesucht, ein Blick in die API hätte gereicht ;) :
Java:
evt.getButton()
gibt dir den Button zurück mit dem geklickt wurde (MouseEvent.BUTTON2 wäre die rechte Maustaste).
Alternativ kannst du für Popups auch
Code:
evt.isPopupTrigger()
nutzen
 
M

Marcinek

Gast
In MouseEvent gibt es Konstanten, die Maustasten andeuten.

Ich glaube, dass

public static final int BUTTON1 = 1;

linke Taste und

public static final int BUTTON2 = 2;

rechte Maustaste ist.
 

Michael...

Top Contributor
Die Klasse MouseEvent kennt die Methode
Code:
isPopupTricker()
damit definiert das System welche Maustaste Popups aktiviert

Daneben gibt's seit Java 1.5 die Methode
Code:
setComponentPopupMenu(JPopupMenu popup)
mit der man einer Komponente direkt ein Popup zuweisen kann.
 
Z

Zentrum

Gast
Kann mir jemand eine gute Seite empfehlen wo man sich in JPopUp Menu einlesen kann?!

Den ich muss hier eben noch die Position angeben können. Habe ja eine JList mit X Einträgen und erst wenn ein Eintrag selected worden ist, soll genau dort eben bei einem Rechtsklick ein PopUp Menu geöffnet werden.

Java:
 private void jList1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jList1MouseClicked
    	JPopupMenu popup = new JPopupMenu();
    	if(evt.getButton() == MouseEvent.BUTTON3){
    		
    	}


also jetzt geht es mir wie kann ich dem PopUp menu sagen öffne dich eben an dieser und dieser stelle und nicht überall?!
 

Michael...

Top Contributor
Kann mir jemand eine gute Seite empfehlen wo man sich in JPopUp Menu einlesen kann?!
Den ich muss hier eben noch die Position angeben können.
Ganz hilfreich ist oft: die API Doku zu lesen: JPopupMenu
Da wird dann z.B. die Methode setLocation(int x, int y) aufgeführt.
Dann gibt's noch Sun Tutorials : How to Use Menus
Habe ja eine JList mit X Einträgen und erst wenn ein Eintrag selected worden ist, soll genau dort eben bei einem Rechtsklick ein PopUp Menu geöffnet werden.
Das hat ja dann auch etwas mit der Liste zu tun, einfach überprüfen, ob in der JList ein Eintrag selektiert ist: siehe Doku zu JList dann kannst Du ja entscheiden, ob das Popup auftauchen soll oder nicht.
Ausserdem verrät Dir auch das MouseEvent über entsprechende Methoden die Position an der geclickt wurde.
 
Z

zentrum

Gast
also zum herrausfinden wo geclickt wurde kann ich, aber was bringt mir das es soll eben nur ein PopUp geöffnet werden wenn genau auf einen Eintrag in der JList ein rechtsklick ausgeführt wurde. WEnn er ins leere ein Rechtsklick macht soll nichts passieren.

mhh.... wie gehe ich den mit dne Daten um?!
 
M

Marcinek

Gast
Hallo,

ich würde mal mehr über dieses in erfahrung bringen:

Java:
setComponentPopupMenu(JPopupMenu popup)

In JList ist es "schwierig", aber nicht unmöglich auf die einzelenen Zellen ein Popup zu machen. Problem ist, dass über den zellen eine "Glasspane" sitzt und du nicht die korrekte Zelle auswählen kannst.

Ich löse das sehr aufwendig über das dahinterliegende Modell.

Ich würde erstmal testen, dass ich das POPUP an der richtigen stelle öffne, wenn das geht dann das popup zu dem richtigen Datzensatz.

Gruß,

Marcinek
 

Michael...

Top Contributor
Schau doch mal in die API Doku. JList bietet eine Methode locationToIndex(Point location) damit kann man erfragen, ob und überwelchem Eintrag der der Mouseclick ausgeführt wurde, dann kann man (im Falle eines Rechtsclick) diesen aktiv selektieren oder überprüfen, ob er selektiert ist und dem entsprechend ein Popup aufpoppen lassen oder nicht.
 
Z

zentrum

Gast
also ich habe eine Testanwendung, und dort ist dies so geregelt das wenn auf in die Liste rechtsgeklickt wird und dort kein Eintrag enthalten ist macht er nichts, wenn aber auf ein Eintrag rechts geklickt wurde, wird dieser selektiert und es erscheint ein PopUp Menu.

Mit den Point usw. das ist schon schön aber ich will eben nicht das er mir den nächst liegenden Eintrag nimmt sondern nur wenn eben auf diesen geklickt wird:(

Ich finde in der API nichts für mein Lösungsweg:(
 
Z

zentrum

Gast
kann man irgendwie den Point auslesen wo der Eintrag der JList steht ?!....

Oder wo der selected Werd der JList ist?
 
Z

zentrum

Gast
also habe es aufwendig hinbekommen:)

Danke erstmal für alle hilfe sonst hätte ich esnicht hinbekommen...

Java:
JPopupMenu popup = new JPopupMenu();
    	createPopup(popup);
    	int index = jList1.locationToIndex(evt.getPoint());
        jList1.setSelectedIndex(index);
        if(evt.getButton() == MouseEvent.BUTTON3){
    		if(evt.getY() >= index*17+index && evt.getY() <= index*17+index+17 ){
    			popup.show(jList1, evt.getX(), evt.getY());
    		}
    	}

werde anstatt der 17 eben noch die größe des Eintrages auslesen!
 

Michael...

Top Contributor
Versteh jetzt nicht, was an ein paar Zeilen Code so aufwendig ist
Vermutlich die richtigen hinzuschreiben ;-)

Dein Problem bestand herauszufinden ob tatsächlich über dem letzen Eintrag geclickt wurde?

Hier ein spontaner Ansatz von mir, ohne berechnen der Zellenposition:
Java:
	list.addMouseListener(new MouseAdapter() {
		public void mouseClicked(MouseEvent e) {
			if (e.getButton() == MouseEvent.BUTTON3) {
				int index  = list.locationToIndex(e.getPoint());
				Rectangle rect = list.getCellBounds(index, index);
				int y = e.getY();
				if (y >= rect.y && y <=(rect.y + rect.height))
					System.out.println("Rechtsklick über Listenindex: " + index);
				else
					System.out.println("Rechtsklick würde über keinem Eintrag ausgeführt.");
			}
		}
	});
 
Z

zentrum

Gast
ehm bin grad in der Ausbildung und erste mal mich mit JPopUp befasst, also fand ich es schon schwer.
 

Michael...

Top Contributor
ehm bin grad in der Ausbildung und erste mal mich mit JPopUp befasst, also fand ich es schon schwer.
Will ja nicht abstreiten, dass es am Anfang nicht immer ganz einfach ist. ;-) Aber gerade als Anfänger sollte man sich an das Arbeiten mit der API Doku gewöhnen, dann da findet sich die Lösung zu vielen Fragen und Problemen - ist jetzt meine persönliche Erfahrung.
 

KrokoDiehl

Top Contributor
<klugscheiss>
Also ich habe mal gesehen/gehört/mitbekommen das man SwingUtilities zur Button-Prüfung nutzen sollte...
Java:
public void mouseClicked(MouseEvent event)
{
    if (SwingUtilities.isRightMouseButton(event))
    {
    } //if Rechtsklick    
}
</klugscheiss>

Auch wenn es nicht unbedingt Kern dieses Themas ist, wollte ich das mal loswerden :)
 

Ähnliche Java Themen

Neue Themen


Oben