Doppelklicken Sie auf das Ereignis im JList-Element


73

Ich habe eine JListmit a DefaultListModel.

Wie kann ich ein Element in einer JListReaktion auf ein Doppelklickereignis erstellen?

Antworten:


139
String[] items = {"A", "B", "C", "D"};
JList list = new JList(items);

list.addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent evt) {
        JList list = (JList)evt.getSource();
        if (evt.getClickCount() == 2) {

            // Double-click detected
            int index = list.locationToIndex(evt.getPoint());
        } else if (evt.getClickCount() == 3) {

            // Triple-click detected
            int index = list.locationToIndex(evt.getPoint());
        }
    }
});

23
Beachten Sie, dass ein Doppelklick auf das letzte Objekt in der Liste erkannt wird, wenn die Liste einen leeren Bereich enthält und ein Benutzer auf den leeren Bereich doppelklickt. Wenn Sie nur Klicks im Bereich der Liste erkennen möchten, der Elemente enthält, können Sie Folgendes überprüfen: Rechteck r = list.getCellBounds (0, list.getLastVisibleIndex ()); if (r! = null && r.contains (evt.getPoint ())) {int index = list.locationToIndex (evt.getPoint ()); }
Jeremy Brooks

14
Wäre es nicht ausreichend, die JList nach dem aktuell ausgewählten Element zu fragen, anstatt locationToIndex zu verwenden? Rufen Sie einfach list.getSelectedIndex () auf.
Mostowski Zusammenbruch

3
Dieses Beispiel löst mit mehreren Klicks auf jeder Maustaste. Wenn Sie sich nur für den ersten Knopf interessieren, sollten Sie auch überprüfenif (evt.getButton() == MouseEvent.BUTTON1)
Yoshiya

11

Ich weiß, dass Sie eine einfache Lösung haben, aber vielleicht möchten Sie List Action nach einer allgemeineren Lösung durchsuchen, mit der Sie sowohl die Maus als auch die Tastatur verwenden können. Das richtige GUI-Design sollte es der Verwendung ermöglichen, beide Ansätze zu verwenden.


11

(basierend auf Mohamed Saligh, der akzeptierten Antwort)

Wenn Sie NetBeans verwenden

Wählen Sie das Fenster JList> Ereignisse> mouseClicked

private void jListNicknamesMouseClicked(java.awt.event.MouseEvent evt) {                                            
    JList list = (JList)evt.getSource();
    if (evt.getClickCount() == 2) {
        int index = list.locationToIndex(evt.getPoint());
        System.out.println("index: "+index);
    }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.