JTree - Selektieren mit Rechtsklick

Status
Nicht offen für weitere Antworten.

Evolver

Bekanntes Mitglied
Ich habe mich etwas mit JTrees befasst. In meinem Fall kann ich mit Rechtsklick ein Kontextmenü (JPopupMenu) öffnen um irgendwelche Aktionen auf die Datenelemente des Baum durchzuführen. Unter Windows ist es ja Standard (und auch praktisch), dass bei einem Rechtklick auch das darunterliegende Element (Knoten) selektiert wird. Der JTree aber markiert Elemente ja nur bei einem Linksklick.

Gibt es eine einfache Möglichkeit, auch mittels Rechtsklick zu Selektieren? Oder wäre die einizige Möglichkeit, ein MouseListener auf dem JTree, der umständlich ermitteln muss, ob und welches Element unter der "Klickposition" liegt und es ggf. selektieren?


=============== EDIT ===============

Naja, nach etwas intensiverer Suche habe ich jetzt festgestellt, dass es doch ganz einfach ist. Im MouseListener muss ich einfach nur folgenden Code bei Rechtsklick ausführen:
Code:
public void mouseClicked(MouseEvent pME)
{
   if(pME.getButton()==3) 
      mMyTree.setSelectionPath(mMyTree.getPathForLocation(pME.getX(), pME.getY()));
}
 

André Uhres

Top Contributor
MouseListener an den JTree, bei mouseReleased*:
Code:
       if(evt.isPopupTrigger()){
            tree.setSelectionPath(tree.getPathForLocation(evt.getX(), evt.getY()));
EDIT: und mousePressed, siehe Folgepost.
 

André Uhres

Top Contributor
@Beni: ja richtig, ich glaube die API sagt auch, daß man aus diesem Grund "isPopupTriggered" in "mouseReleased" und "mousePressed" aufrufen sollte :wink:
 

Evolver

Bekanntes Mitglied
Was genau es mit der isPopupTrigger() auf sich hat, habe ich noch nicht genau verstanden...
public boolean isPopupTrigger()
Liefert true, falls es sich um das Ereignis handelt, mit dem Popup-Menüs geöffnet werden, sonst false.

...aber da ich mein JPopupMenu vom selben MouseListener (und der selben Funktion) aus aufrufe, funktioniert es einwandfrei, den SelectionPath einfach dort zu setzen.
 

André Uhres

Top Contributor
Evolver hat gesagt.:
Was genau es mit der isPopupTrigger() auf sich hat, habe ich noch nicht genau verstanden..
isPopupTrigger garantiert Plattformunabhängigkeit, weil der PopupTrigger nicht bei allen Plattformen der Rechtsklick sein muss.
 

Evolver

Bekanntes Mitglied
Also ich bin verunsichert über meine Wissenslücke bzgl. isPopupTrigger(). Also ich mache es so, dass bei Rechtklick in meinem Baum mein Object vom Typ JPopupMenu (bzw. einer davon abgeleiteten Klasse) aufgerufen wird (setVisible(true)).

Code:
mMyTree.addMouseListener(new MouseAdapter()
				{
					@Override
					public void mouseClicked(MouseEvent pME) {
						if(pME.getButton()==3) {
							mMyTree.setSelectionPath(mMyTree.getPathForLocation(pME.getX(), pME.getY()));
							mMyMenu.setLocation(pME.getXOnScreen(), pME.getYOnScreen());
							mMyMenu.showMenu();   // in dieser Methode wird dann setVisible(true) aufgerufen
						}
					}
				});

Ist das nicht die übliche Vorgehensweise, ein PopupMenü zu öffnen? Falls nein, wie dann? Falls ja, wo brauche ich isPopupTrigger()?
 

Wildcard

Top Contributor
Siehe oben:
Ein Mac zum Beispiel hat i.d.R. eine Maus mit nur einer Taste. Den Mousebutton 3 wirst du also schlecht drücken können :wink:
Wie sich ein Popup-Menü öffnen lässt, bestimmt das Look and Feel. Der Entwickler sollte also sowohl in mousePressed als auch in mouseReleased mit isPopupTrigger abfragen, ob die durchgeführte Aktion (im gegenwärtigen L'n'F) ein Popup auslösen soll.
 
R

Roar

Gast
ich wollt nur mal sagen mac's mighty mouse hat 5 maustasten und das nich erst seit gestern :roll: :oops: :wink:
 
R

Roar

Gast
die mighty mouse ist aber die standardmaus, eine andere bekommst du von apple gar nicht ???:L
 

Evolver

Bekanntes Mitglied
Wildcard hat gesagt.:
Siehe oben:
Ein Mac zum Beispiel hat i.d.R. eine Maus mit nur einer Taste. Den Mousebutton 3 wirst du also schlecht drücken können :wink:
Wie sich ein Popup-Menü öffnen lässt, bestimmt das Look and Feel. Der Entwickler sollte also sowohl in mousePressed als auch in mouseReleased mit isPopupTrigger abfragen, ob die durchgeführte Aktion (im gegenwärtigen L'n'F) ein Popup auslösen soll.

OK, aber im Falle eine 1-Tasten-Maus beim Mac ist ja der PopUp-Event dann kein MouseEvent, sondern ein KeyEvent, also müsste ich auch noch einen KeyListener einfügen, oder? Für KeyEvents ist aber die Funktion isPopupTrigger() nicht definiert.
Selbiges bei Windows: Rechts neben der Win-Taste ist ja auch eine Taste zum Öffnen eines Kontextmenüs. Die müsste ja für PopupTrigger ebenfalls true liefern, aber das ist ja auch ein KeyEvent.
 

Wildcard

Top Contributor
Nein, kein keyEvent. Bei Mac soweit ich weiß längeres drücken des Mousebuttons und Ctrl+mouseclick.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Bananabert Swing jtree : image als user object Allgemeine Java-Themen 2
F JTree: Nodes dynamisch anlegen via LinkedHashMap Allgemeine Java-Themen 2
E Swing Jtree Allgemeine Java-Themen 9
R JTree - Mehrere Roots Allgemeine Java-Themen 6
DStrohma Icons in JTree Nodes weiter nach rechts rücken Allgemeine Java-Themen 2
M JTree aktualisieren nach Mausklick Allgemeine Java-Themen 12
DStrohma Jede node in JTree mit eigenem Icon Allgemeine Java-Themen 7
Benji0815 Verzeichnis wie im Windows Explorer in einem JTree anzeigen Allgemeine Java-Themen 6
S JAVA JTree rekursiv umschreiben Allgemeine Java-Themen 5
S Suche im JTree nach Neuaufbau Allgemeine Java-Themen 4
N JTree nicht genutzte Pfade schließen Allgemeine Java-Themen 2
G JTree Node löschen Allgemeine Java-Themen 2
G JTree Node verschieben Allgemeine Java-Themen 2
MQue leerer JTree Allgemeine Java-Themen 6
MQue JTree Allgemeine Java-Themen 6
MQue JCheckBox in JTree Allgemeine Java-Themen 2
F JTree in Jsp Allgemeine Java-Themen 2
T Äquivalent zu JTree Allgemeine Java-Themen 4
C JTree: ActionListener auf die Nodes Allgemeine Java-Themen 3
M JTree mit Rechtsklick markieren Allgemeine Java-Themen 4
C JTree: Nodes automatisch öffnen Allgemeine Java-Themen 2
P JTree/ Nodes einfügen Allgemeine Java-Themen 2
P JTree Allgemeine Java-Themen 6
P aus JTree eine XML- Datei Allgemeine Java-Themen 6
P Vector auf JTree Allgemeine Java-Themen 6
P JTree Farbe Allgemeine Java-Themen 14
S JTree selektion erkennen und drauf reagieren Allgemeine Java-Themen 2
E JTree (schonwieder) - TreeCellEditor Allgemeine Java-Themen 9
E JTree - einzelnes Element (Knoten) editieren Allgemeine Java-Themen 2
P JTree ID vergeben Allgemeine Java-Themen 3
P JTree Allgemeine Java-Themen 4
P JTree/ JTabbedPane Allgemeine Java-Themen 34
L JTree Allgemeine Java-Themen 23
E root JTree Allgemeine Java-Themen 2
E Child in JTree hinzufügen Allgemeine Java-Themen 4
E JTree in NetBeans Allgemeine Java-Themen 2
R Objekt an Knoten von JTree anhaengen Allgemeine Java-Themen 2
R Daten aus Baum entsprechend in jTree einfuegen Allgemeine Java-Themen 2
T Jtree zu langsam beim klappen Allgemeine Java-Themen 8
S JTree - Brett vor'm Kopp Allgemeine Java-Themen 19
G Baumhierarchie in JTree eintragen Allgemeine Java-Themen 4
K JTree - Knoten expandieren Allgemeine Java-Themen 4
K JTree Inhalt löschen und Anzeige aktualisieren Allgemeine Java-Themen 13
G JTree automatisch sortieren lassen Allgemeine Java-Themen 5
Luma Diskettenlaufwerk rattert los bei Eintrag in JTree Allgemeine Java-Themen 6
G in Jtree suchen Allgemeine Java-Themen 2
K JTree plus eigener FileLoader Allgemeine Java-Themen 2
H Wie stellt ein JTree fest, wo etwas eingehängt werden soll? Allgemeine Java-Themen 2
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
H Swing JTextArea als TableCellRenderer in JTable - wie Zeilen selektieren? Allgemeine Java-Themen 47
V JFilechooser, mehrere Datein selektieren und Reihenfolge? Allgemeine Java-Themen 2
Z MouseClicked -> Rechtsklick Allgemeine Java-Themen 15
S [WinXP] .java mit Rechtsklick ausführen? Allgemeine Java-Themen 2
P java application in das rechtsklick menü im explorer adden? Allgemeine Java-Themen 21

Ähnliche Java Themen

Neue Themen


Oben