# JTree mit Rechtsklick markieren



## MScalli (31. Jan 2008)

weiss jemand wie ich einen Eintrag in einem JTree mit Rechtsklick markieren kann??
wenn ich den Eintrag links markiere und nen rechtsklick machen bekomme 
ich schon den selektierten Pfad, aber wie mache ich es das ich NUR die rechte Maustaste benutzte??

wo sich der Eintrag befindet weiss ich ja mit getRowForLocation..

Im netz hab ich gelesen das es mit getPathForLocation gehen soll und dann
setSelectionPath.. bekomme ich aber so nicht hin!!!


```
private void showPopup(MouseEvent e) {
        if (e.isPopupTrigger()) {
            popupmenu.show(e.getComponent(), e.getX(), e.getY());
            System.out.println("**** Rechtsklick ****"); 
            System.out.println(m_tree.getSelectionPath());

            
            int selRow = m_tree.getRowForLocation(e.getX(), e.getY());
            TreePath selPath = m_tree.getPathForLocation(e.getX(), e.getY());    
        }
    }
```


```
// MouseListener für Tree
        m_tree.addMouseListener(new MouseAdapter(){
            public void mouseReleased(MouseEvent e) {
                showPopup(e);
            }  
        });
```


kann mir wer helfen bitte ??


----------



## PollerJava (31. Jan 2008)

```
public void mousePressed(MouseEvent e) {                                                               
                    if (e.getModifiers() == 4) {  // rechte MT, auf Windows z.B
...
}
```


----------



## MScalli (31. Jan 2008)

????

sorry aber weiss gerade nicht was du mit diesem code meinst?!?!?

also bei nem JTable z.B. hole ich mir die ausgewählte zeile so


```
// hole Koordinaten Zeile
            int column = table.columnAtPoint(e.getPoint());
            int row = table.rowAtPoint(e.getPoint());
            
            // markiert die Zeile 
            table.changeSelection(row, column, false, false);
```

jetzt kann ich mir den Eintrag holen mit

table.getSelectedRow(table.getSelectedRow(), table.getSelectedColumn());


d.h. ich selektiere die Zeile bei der ich stehe und kann mir dann leicht den Inhalt holen.

wenn das irgendwie mit dieser Codezeile möglich ist bitte ich um ne kurze erklärung


----------



## Beni (31. Jan 2008)

@PollerJava


			
				PollerJava hat gesagt.:
			
		

> ```
> public void mousePressed(MouseEvent e) {
> if (e.getModifiers() == 4) {  // rechte MT, auf Windows z.B
> ...
> ...


Nie nie nie direkt eine "magische Zahl" angeben, wenn schon müsste da "MouseEvent.BUTTON3" stehen. Aber da hier der Rechtsklick wohl für ein Popup-Menü verwendet wird, ist "isPopupTrigger" schon die beste Lösung.

@MScalli
Viel fehlt nicht mehr, nur noch zwei Zeilen:

```
private void showPopup(MouseEvent e) {
        if (e.isPopupTrigger()) {
            popupmenu.show(e.getComponent(), e.getX(), e.getY());
            System.out.println("**** Rechtsklick ****");
            System.out.println(m_tree.getSelectionPath());

           
            int selRow = m_tree.getRowForLocation(e.getX(), e.getY());
            TreePath selPath = m_tree.getPathForLocation(e.getX(), e.getY());   
            if( selPath != null )
                        m_tree.setSelectionPath( setPath );
        }
    }
```


----------



## MScalli (31. Jan 2008)

perfekt.

vielen dank für eure hilfe.

@beni
Ich dachte eigentlich das ich das schon ausprobiert habe..
na habe ich wohl doch nicht^^ denn so gehts einwandfrei


----------

