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?

Lobo
quelle

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());
        }
    }
});
Mohamed Saligh
quelle
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.

camickr
quelle
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);
    }
}
SandroMarques
quelle