MouseListener an der JList

FrankBooth

Erfahrenes Mitglied
Hallo,

Ich habe mir eine JList erstellt, diese mit Daten gefüllt und in ein JPanel gepackt.
An die JList habe ich einen Listener gepackt, der mir auf Rechtsklick ein Popupmenue anzeigt. Dabei wird aber nicht das Objekt aus der Liste ausgewählt (blauer Hintergrund).
Jetzt bin ich mit JList leider nicht so Vertraut und weiss nicht wie die auswahl über den rechtsklick zu realisieren ist.

Code:
personliste=new JList();
personliste.addMouseListener(new MouseAdapter(){
	@Override
	public void mouseReleased(MouseEvent e) {
	   if (e.isPopupTrigger()) {
              //hier sollte dann wohl die Auswahl des aktuellen Objekts hin :)
	      popupmenu.show(e.getComponent(), e.getX(), e.getY());
           }
       }
});	

jp.add(personliste,"0,3");
 
Was ist jetzt dein Problem? Weißt du nicht, wie du einen rechtsklick realisierts, oder nicht wie man einen Listeneintrag auswählt?
 
Moin,

das ist auch richtig so.
Mit Rechtsklick kannst Du auch nichts aus der JList auswählen,
wenn Du nicht explizit die rechte Maustaste mit der Auswahlfunktion belegst.
Entweder der User muss vorher per linker Maustaste einen Listeneintrag auswählen oder
Du realisierst etwas eben direkt über die rechte Maustaste.

Gruß,
Xan
 
Listeneintrag auswählen kann ich nicht :)

if (e.isPopupTrigger())
ist doch für den Rechtsklick.

Ich hab den Quelltext nur grob überflogen :p


Naja also Listeneinträge in der JList sind eigene Komponenten (JLabels), d.h. du könntest dir den Punkt holen, auf den geklickt wurde und damit bestimmen welches JLabel sich an dieser Position befindet. Und dieses markierst du dann usw.

Ist aber alles theoretisch, habs praktisch nicht getestet ;)
 
Moin zusammen,

also bei mir ist die Klasse "KontextMenu" wie folgt definiert und t wunderbar :

Java:
public class KontextMenu 
{
    private JPopupMenu menu = new JPopupMenu();
    private JMenuItem entry = null;

    public KontextMenu(final JTextComponent comp)
    {
        ActionListener al = new ActionListener() 
        {
            public void actionPerformed( ActionEvent e )
            {
                if(comp.getToolkit().getSystemClipboard() != null) 
                {
                    if( e.getActionCommand().equals("Ausschneiden") ) 
                    {
                        comp.cut();
                    } 
                    else if( e.getActionCommand().equals("Kopieren") ) 
                    {
                        comp.copy();
                    } 
                    else if( e.getActionCommand().equals("Einfügen") ) 
                    {
                        comp.paste();
                    }
                    else if( e.getActionCommand().equals("Alles markieren") ) 
                    {
                        comp.selectAll();
                    }
                }
            }
        };

        comp.addMouseListener( new MouseAdapter() 
        {
            public void mouseReleased( MouseEvent me ) 
            {
                if ( me.isPopupTrigger() )
                {
                    // Prüft, ob das TextComponent editierbar ist
                    if( comp.isEditable() )
                    {
                        menu.getComponent(2).setEnabled(true);
                        menu.getComponent(4).setEnabled(true);
                    }
                    else
                    {
                        menu.getComponent(2).setEnabled(false);
                        menu.getComponent(4).setEnabled(false);
                    }

                    menu.show( me.getComponent(), me.getX(), me.getY() );
                }
            }
        }
        );

        menu.add(new JMenuItem("Menü"));
        menu.getComponent(0).setEnabled(false);

        menu.addSeparator();

        entry = new JMenuItem( "Ausschneiden" );
        menu.add( entry );
        entry.addActionListener(al);

        entry = new JMenuItem( "Kopieren" );
        menu.add( entry );
        entry.addActionListener(al);

        entry = new JMenuItem( "Einfügen" );
        menu.add( entry );
        entry.addActionListener(al);

        menu.addSeparator();

        entry = new JMenuItem( "Alles markieren" );
        menu.add( entry );
        entry.addActionListener(al);

    }
}

Ich hoffe, dass Dir das weiterhilft!
Gruß
Klaus
 
Also ich bekomm es nicht auf die Reihe. Wenn ich das richtig verstehe, muß ich mir doch wohl die Komponente der Liste ermitteln, die angeklickt wird. Danach bekomm ich den Index an der Stelle, an der die Komponente in meiner Liste steht und mit

Liste.setSelectedIndex(index);

kann ich dann die Komponente quasi auswählen.
Ich bekomm aber mit:

liste.getComponentAt(e.getX(), e.getY());

etwas raus wie:

javax.swing.JList[,0,32,266x772,alignmentX=0.0,alignmentY=0.0,border=,flags=50331944,
maximumSize=,minimumSize=,preferredSize=,fixedCellHeight=-1,fixedCellWidth=-1,
horizontalScrollIncrement=-1,selectionBackground=javax.swing.plaf.ColorUIResource[r=10,g=36,b=106],
selectionForeground=javax.swing.plaf.ColorUIResource[r=255,g=255,b=255],visibleRowCount=8,layoutOrientation=0]

und das ist egal wo ich klicke das gleiche. Wo liegt mein Fehler
 
Zuletzt bearbeitet:
Ok ich habe es.

Nur für den Fall, das Andere das gleiche Problem haben.

Code:
personliste=new JList();
personliste.addMouseListener(new MouseAdapter(){
	@Override
	public void mouseReleased(MouseEvent e) {
	   if (e.isPopupTrigger()) {
              personliste.setSelectedIndex(personliste.locationToIndex(e.getPoint()) );
	      popupmenu.show(e.getComponent(), e.getX(), e.getY());
	   }
	}
});
 
Für alle, die hier über Google gelandet sind und sich in einem JTree befinden:

if (evt.getButton() == 3) {
jTree_Komplexe.setSelectionPath(jTree_Komplexe.getPathForLocation(evt.getX(), evt.getY()));
System.out.println("Menu:" + jTree_Komplexe.getSelectionPath());

}}
 

Neue Beiträge

Zurück